mcpField
I
Infomesh

Infomesh

本地服务
github.com/dotnetpower搜索与检索76 周前更新

关于 Infomesh

Infomesh 是面向 AI 助手和开发者的去中心化点对点搜索引擎,无需托管搜索 API。它结合可离线使用的本地索引、节点搜索,以及网页抓取和获取工具。

主要功能

  1. 01去中心化点对点搜索
  2. 02基于本地索引离线搜索
  3. 03抓取并索引网址
  4. 04获取完整网页
  5. 05提供 CLI、Python 包和本地 HTTP API

适用场景

  1. 01无网络时搜索已索引页面
  2. 02跨可用节点搜索
  3. 03先抓取网址再搜索内容
  4. 04为 AI 助手获取网页

MCP 相关

MCP 服务向 MCP 客户端提供搜索、抓取和获取网页的能力。本地搜索不会离开节点;分布式搜索会将查询发送给其他节点。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"infomesh": {
"command": "uvx",
"args": [
"infomesh"
]
}
}
}
启动命令uvx infomesh

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiinfomesh

工具

5

收录的工具列表 · 更新于 3 周前

参数类型必填说明
answer_modeenum否响应模式:'snippets'(排名结果)、'summary'(答案提取)、'structured'(包含分数和元数据的 JSON)snippets | summary | structured
chunk_sizeinteger否用于拆分 RAG 上下文的块大小。设置后会返回带来源归属的分块。
domain_allowlistarray否仅包含来自这些域名的结果
domain_blocklistarray否排除来自这些域名的结果
explainboolean否为每个结果包含分数明细(BM25、新鲜度、可信度、权威性)
fetch_full_contentboolean否获取并返回每个结果的完整文章文本
languagestring否ISO 639-1 语言代码(例如 'en'、'ko'、'ja')
local_onlyboolean否仅搜索本地索引(离线,<10ms)
querystring是搜索查询字符串
recency_daysinteger否筛选最近 N 天内发布的结果
rerankboolean否通过本地 LLM 应用语义重排序
top_kinteger否返回结果数量

详细介绍

InfoMesh — 面向大模型的去中心化 P2P 搜索引擎

InfoMesh

面向大模型的完全去中心化 P2P 搜索引擎
无需信用卡。无需托管 API 密钥。无需按查询付费。

持续集成 PyPI MIT 许可证 Python 3.12+ 星标

问题 拉取请求 最近提交 仓库大小 兼容 MCP 更新日志

快速开始 • InfoMesh 的优势 • 功能 • 新功能 • 架构 • 安全 • 积分 • 参与贡献 • 文档


提示

P2P 引导节点配置 InfoMesh 目前内置了一个位于 Azure 美国东部的引导节点。安装可选的 p2p 依赖项后,节点会在启动时尝试连接;但不保证节点始终可用或能够访问。要手动添加更多对等节点:

infomesh peer add /ip4/<IP>/tcp/4001/p2p/<PEER_ID>
infomesh peer test

💡 为什么选择 InfoMesh?

问题所在

每个 AI 助手都需要实时访问网络,但这种访问受限于昂贵的专有搜索 API:

类型典型成本局限性
LLM 内置网络搜索隐藏在令牌成本中绑定到单一供应商的 API,无法独立使用
自定义搜索 API约 $3–5 / 1,000 次查询需要 API 密钥和计费账户,且有速率限制
AI 搜索 SaaS约 $0.01–0.05 / 次查询依赖 SaaS,且有月度使用上限
搜索抓取代理约 $50+/月不稳定,上游变更时容易失效
InfoMesh软件和查询费用为 $0需自行提供硬件和网络连接;抓取和资源限制仍适用

这为独立 AI 开发者、开源助手和研究人员筑起了付费墙。小型项目和本地大模型根本负担不起实时网络搜索。

以上价格仅为示例,并非供应商当前报价。实际价格、免费套餐、日志政策和限制因供应商及部署方式而异。

解决方案

我开始构建 AI Agent 后,很快就遇到了瓶颈:没有免费的网络搜索 API。 每家供应商都要求提供信用卡、计费账户或月度订阅——只是为了让 AI Agent 能在网上查找信息。这让我觉得不合理。

于是我构建了 InfoMesh——一个去中心化搜索引擎,由社区共同构成基础设施:

  • 没有中央服务器——每位参与者既是爬虫,也是搜索节点。
  • 没有单次查询费用——贡献抓取工作即可赚取搜索额度。贡献越多,可搜索的内容就越多。
  • 没有供应商锁定——采用标准 MCP 协议集成,可与本地索引离线协作。
  • 不集中收集查询——仅在本地执行的查询会留在你的节点上;分布式搜索会将查询发送给参与的对等节点。本地诊断信息可能包含查询文本。

InfoMesh 并不与现有商业搜索供应商竞争。这些公司通过广告变现,为大规模的人类搜索提供服务。InfoMesh 则通过 MCP 免费为 AI 助手提供精简且够用的搜索能力,让所有人都能实时访问网络,而无需按查询付费。

我只是想让我的 AI Agent 搜索网络,而不必掏钱。如果你也有同感,InfoMesh 就是为你打造的。

🆓 免费。支持所有使用方式。毫无例外。
使用方式费用示例
MCP(AI 助手)免费Claude、VS Code Copilot,以及任何 MCP 客户端调用 search()——无需支付 API 费用
CLI(终端)免费uv run infomesh search "python asyncio"——返回本地结果和可用对等节点;延迟取决于工作负载
Python package(代码)免费from infomesh.index.local_store import LocalStore——在你的应用中嵌入搜索功能
Local API(HTTP)免费curl localhost:8080/search?q=...——本地管理 API 运行时提供 REST 端点

无需托管 API 密钥或计费账户。运营者可以启用 API 密钥身份验证;抓取速率、额度核算和资源限制仍然适用。没有与金额支付挂钩的速率限制。 运行一个节点,为网络贡献力量,搜索就永远免费。


InfoMesh 与其他 Web 搜索 MCP 服务的对比

正在寻找免费的 Web 搜索 MCP 服务?以下是 InfoMesh 与常见替代方案的对比:

功能InfoMesh基于 API 的 MCP 服务基于爬虫的 MCP 服务元搜索引擎
免费额度不按查询计费;但受信用额度/资源限制有限(通常每月 1,000–2,000 次)不限量(无需 API)不限量
API 密钥可选,由运营方配置身份验证✅ 必需(需要注册)❌ 不需要❌ 不需要
去中心化✅ 完全 P2P❌ 中心化❌ 中心化❌ 单一实例
离线搜索✅ 本地索引可离线使用❌❌❌
隐私仅本地查询会保留在本地;分布式查询会联系对等节点⚠️ 服务提供方会记录查询不一✅ 可自托管
可自托管✅ 一切由你掌控❌❌✅ 需要 Docker
抓取自己的 URL✅ crawl_url() 工具❌❌❌
获取完整页面✅ fetch_page() 工具不一❌❌
安装pip install infomesh不一不一Docker Compose
开源✅ MIT不一不一不一

InfoMesh 将去中心化的对等搜索、离线本地搜索、无需必备的托管 API 密钥,以及抓取/索引自有内容的能力结合在一起,且不按查询计费。


🔐 安全设计 — 为你的节点提供分层防护

大多数搜索引擎要求你信任它们。InfoMesh 则要求你信任数学。

InfoMesh 没有集中式查询收集服务。仅本地搜索会保留在你的设备上;分布式搜索会将查询发送给对等节点,而参与网络可能会发布或复制已索引的内容。 本地会话、分析数据和诊断日志可能会保留信息,因此自托管并不保证查询绝不会被保留。

为网络做贡献 → 赚取积分 → 无需按查询付费即可搜索,但仍受资源和抓取限制。

就是这么简单。没有隐藏条件。

InfoMesh 如何分层构建安全性
🔑Ed25519 加密身份节点使用 Ed25519 密钥。签名的 v2 交换会将签名者绑定到 libp2p 对等节点身份;旧版 v1 兼容流量不属于经过身份验证的 v2 流量。信用记录签名是可选的。可通过 infomesh keys rotate 轮换密钥;请保护私钥,并区分应用密钥与传输身份。
🔏签名内容证明已发布的来源证明会将 SHA-256(raw_response) 和 SHA-256(extracted_text) 绑定到签名身份。验证可以检测签名证据是否发生变化;但无法证明来源页面内容属实。仅限本地的爬取不能保证内容会发布到网络。
🌳Merkle 树完整性Merkle 成员资格证明可根据特定根验证文档哈希。证据被篡改后,将无法通过针对该根的验证;有效证明不能证明来源内容属实,也不能保证每个对等节点都存储了完整索引。
🔍随机审计副本/来源审计维护约每小时运行一次,具体取决于可用对等节点和证据。副本损坏可能导致信任验证失败;网页内容发生变化的情况无法判定,不能据此自动认定存在作弊。连续 3 次审计失败被记录后,将触发隔离。
🛡️Sybil 攻击防御本地工作量证明生成和子网接入限制会提高参与成本。生成时间取决于硬件和随机性;这些机制不能保证阻止批量创建身份。默认的子网限制为每个 /24 接入分桶 3 个节点。
🌐日蚀攻击防御引导发现、对等节点交换和子网限制有助于提高连接多样性。至少有 3 个可独立访问的引导对等节点是部署目标,并非捆绑保证:当前节点列表中只有一个对等节点。这些防御措施无法消除日蚀攻击。
🚫DHT 投毒防御每个关键词的发布限制(每个节点每小时 10 次)、新发布内容签名和内容哈希检查可限制流入内容。旧版无签名读取提示仍未经验证;有效签名也不能证明内容属实。
🔒加密传输libp2p Noise 传输会保护传输中的对等节点流量。接收方仍会处理查询文本和结果;传输加密不等于匿名,也无法防范遭到入侵的端点。
🕵️不集中记录查询日志DHT 发现会使用关键词密钥,但对等节点搜索请求包含原始查询。本地会话和诊断信息可能保留查询内容,而远程对等节点是否记录日志不受你控制。如果查询不得发送给对等节点,请使用仅限本地的搜索。
🧮信用证明验证使用签名密钥记录的条目可纳入可验证的 Merkle 证明;无签名条目不具备此保证。农场式刷取检测和 24 小时观察期政策有助于识别滥用行为,但无法确保自我报告的贡献绝对可靠。
统一信任评分

每个对等节点都会根据行为而非身份,持续更新信任评分:

Trust = 0.15 × uptime  +  0.25 × contribution  +  0.40 × audit_pass_rate  +  0.20 × summary_quality
等级评分处理方式
🟢 可信≥ 0.8最高信任等级;搜索成本由贡献等级单独决定
🔵 正常0.5 – 0.8标准运行
🟡 可疑0.3 – 0.5低信任等级;检查审计证据和隔离状态
🔴 不可信< 0.3连续失败 3 次后隔离出网络
内置合规机制
法规InfoMesh 的处理方式
robots.txt严格执行,绝不例外,并自动加入屏蔽列表
DMCA通过经过授权的签名通知执行持久排除,并由对等节点中继;对于无法连接的对等节点,不保证送达期限
GDPR分布式删除记录,支持被遗忘权
版权仅将全文作为缓存存储;搜索结果会返回带有出处信息的摘要

**总而言之:**InfoMesh 通过密码学、审计和贡献激励,减少对中心化提供方的依赖。仅本地搜索会将查询保留在本地;对等节点搜索和发布会与其他节点共享数据。没有按查询收费,但仍存在运行限制和信任假设。


🚀 快速开始

安装并运行(两步完成,无需 Git)

你只需要一个 Linux 终端(Ubuntu、Debian 等)。 无需 Python 或开发经验。

第 1 步 — 安装 uv(Python 包管理器,一次性设置):

curl -LsSf https://astral.sh/uv/install.sh | sh

完成后,关闭并重新打开终端(或运行 source ~/.bashrc)。 这样可以确保 uv 和 uvx 命令可用。

第 2 步 — 运行 InfoMesh:

uvx infomesh status

uvx 会自动下载并运行 InfoMesh,无需 git clone、无需 pip install,也无需手动管理虚拟环境。InfoMesh 需要 Python 3.12+。 首次运行时会下载依赖项;后续运行会复用缓存的工具环境。

试用
# Crawl a webpage and index it
uvx infomesh crawl https://docs.python.org/3/library/asyncio.html --depth 0

# Search locally, and peers when P2P dependencies are available
uvx infomesh search "asyncio"

# View the node dashboard (works over SSH too)
uvx infomesh dashboard --text

--depth 0 将此示例限制为一个页面;省略该参数时,会根据抓取配置跟随链接(默认深度不受限制)。基础包不包含 P2P。安装原生依赖项后,可使用 uvx --from 'infomesh[p2p]' infomesh search "asyncio" 进行对等节点搜索。空的本地索引必须先成功抓取或导入内容,才能返回本地结果。

永久安装(可选)

如果你经常使用 InfoMesh,可以将其安装为持久工具,这样就不需要 uvx 前缀:

uv tool install infomesh

# Now run directly:
infomesh status
infomesh crawl https://example.com
infomesh search "example"
infomesh dashboard --text
连接到 AI 助手(MCP)

将 InfoMesh 添加为 VS Code (Copilot)、Claude Desktop、Cursor 或 Windsurf 中的 MCP 服务 — 默认无需托管 API 密钥。运营者可以通过 INFOMESH_API_KEY 启用身份验证。

Claude Desktop / Cursor / Windsurf 使用以下 mcpServers 格式:

{
  "mcpServers": {
    "infomesh": {
      "command": "uvx",
      "args": ["infomesh", "mcp"]
    }
  }
}

VS Code (Copilot) 则在 .vscode/mcp.json 中使用 servers 作为根键:

{
  "servers": {
    "infomesh": {
      "type": "stdio",
      "command": "uvx",
      "args": ["infomesh", "mcp"]
    }
  }
}

现在,你的 AI 助手可以通过 MCP 抓取和搜索本地索引,无需按查询付费。要启用对等节点搜索,请准备好 P2P 依赖项,并将 args 替换为 ["--from", "infomesh[p2p]", "infomesh", "mcp"]。以上基础示例不会安装 P2P 依赖项。

从源代码运行(贡献者 / 开发者)

如果你想贡献代码或从源代码运行:

系统依赖项

P2P 可选依赖项(libp2p)包含 C 扩展(fastecdsa、coincurve、pynacl),可能需要原生构建工具。安装 P2P 时(例如使用 uv tool install 'infomesh[p2p]')以及安装仓库的开发依赖项时都需要这些工具;开发依赖项同样包含 libp2p。

Linux(Debian / Ubuntu):

sudo apt-get update && sudo apt-get install -y build-essential python3-dev libgmp-dev

macOS:

brew install gmp
# Xcode Command Line Tools must also be installed

**Windows:**使用 WSL2(推荐),或安装 Visual Studio Build Tools + GMP。

**注意:**基础包(uv tool install infomesh,或从源代码运行 uv sync --no-dev)不需要 P2P 构建依赖项。普通的 uv sync 默认会包含 dev 组,因此此仓库的常规贡献者环境确实需要这些依赖项。

克隆并运行
# Clone and install with dev dependencies
git clone https://github.com/dotnetpower/infomesh.git
cd infomesh
uv sync

# Start InfoMesh with the TUI dashboard
uv run infomesh start

# Or run headless (servers / CI)
uv run infomesh start --no-dashboard
Docker
docker build -t infomesh .
docker run -d --name infomesh \
  -p 4001:4001 -p 8080:8080 \
  -v infomesh-data:/data \
  infomesh
验证是否正常运行
# Search your local index and peers
uvx infomesh search "python asyncio tutorial"

# Check node status
uvx infomesh status

# Crawl a specific URL on demand
uvx infomesh crawl https://docs.python.org/3/

# Export your index as a portable snapshot
uvx infomesh index export backup.zst
示例

examples/ 目录中提供了可直接运行的 Python 脚本:

# Local search
uv run python examples/basic_search.py "python tutorial"

# Crawl → index → search pipeline
uv run python examples/crawl_and_search.py https://docs.python.org/3/

# Programmatic MCP client
uv run python examples/mcp_client.py "async programming"

完整列表请参阅 examples/README.md。


✨ 功能

核心能力
功能描述
🌐 完全去中心化无中心服务器。每个节点既是枢纽,也是参与者——采用合作式以牙还牙架构
🤖 LLM 优先设计通过 MCP 提供纯文本 API,针对 AI 使用进行了优化。无需浏览器 UI
🔍 双重搜索关键词搜索(SQLite FTS5 + BM25)和可选的语义向量搜索(ChromaDB)
🕷️ 智能爬虫异步爬取,遵循 robots.txt 规范,设置礼貌延迟,并进行三层去重
📡 P2P 网络基于 libp2p,采用 Kademlia DHT、mDNS 本地发现和加密传输
💾 支持离线使用本地索引无需互联网即可工作——随时搜索已爬取的知识
🏆 积分激励通过爬取内容并为对等节点提供服务来赚取积分。贡献越多,搜索配额越高
🔐 内容完整性SHA-256 内容哈希、Ed25519 来源证明、随机审计和 Merkle 证明支持
🤏 zstd 压缩存储的文档内容和索引快照使用 zstandard;P2P 分帧并非全部压缩
📊 控制台仪表板美观的 Textual TUI,包含 6 个标签页:概览、爬取、搜索、网络、积分、设置
🌏 CJK 搜索原生中文/日文/韩文分词,并支持二元/三元组扩展
📡 RSS 监控可选启用 RSS/Atom 源轮询,并按优先级调度(crawl.rss_enabled)
🖥️ JS 渲染可选使用 Playwright 处理 SPA/React 页面(无头 Chromium)
📈 隐式反馈LLM 原生质量信号(获取/跳过/引用),用于改进排序
🩺 诊断infomesh doctor 检查运行状况;infomesh bench 测量性能
🔌 插件系统基于钩子的可扩展 API,可自定义爬虫、排序器和分词器
🌐 Web 仪表板基于浏览器的仪表板,位于 localhost:8080/dashboard,包含 5 个标签页
MCP 集成——为 AI 助手提供免费网页搜索

大多数商业搜索 API 按查询收费或要求付费订阅。 InfoMesh 提供 5 个整合后的 MCP 工具,不按查询收费——默认无需托管 API 密钥;但仍受运营方配置的身份验证和资源限制约束:

工具描述
web_search(query, ...)统一搜索——P2P + 本地、RAG、解释、答案提取。自动检测 CJK
fetch_page(url)获取 URL 的完整提取文本(缓存或实时获取,最大 100KB)
crawl_url(url, depth, force)爬取 URL 并加入索引(每小时限 60 次)
fact_check(claim, top_k)对照已索引来源交叉核验声明
status()节点状态:索引大小、对等节点、积分、分析数据

为保持向后兼容,仍接受旧版工具名称(search、search_local、network_stats 等)。

在 VS Code / Copilot / Claude Desktop / Cursor 中配置

此示例适用于 Claude Desktop 和 Cursor。VS Code / Copilot 需要使用 连接到你的 AI 助手 中展示的 servers 格式。这些基础软件包示例使用本地索引;同一章节还说明了如何启用 P2P。

{
  "mcpServers": {
    "infomesh": {
      "command": "uvx",
      "args": ["infomesh", "mcp"]
    }
  }
}
可选附加组件
# Vector search with ChromaDB + sentence-transformers
pip install 'infomesh[vector]'

# Local LLM summarization via Ollama
pip install 'infomesh[llm]'

# JavaScript rendering for SPA pages (Playwright)
pip install 'infomesh[browser]'

# Chinese/Japanese/Korean tokenization (jieba)
pip install 'infomesh[cjk]'

# Everything
pip install 'infomesh[all]'

这些命令会安装依赖项,但不会安装所有运行时前置条件。还必须启用/配置向量搜索、本地 LLM 和 JS 渲染;JS 渲染需要 Playwright 浏览器二进制文件,本地摘要生成则需要可用的模型/运行时。

CLI 命令
infomesh start                  # Start node (auto-prompts starter index download)
infomesh start --background     # Headless mode (no dashboard)
infomesh start --role crawler   # DMZ crawler-only node
infomesh search "query"         # Search local index + peers
infomesh search --local "query" # Search local index only
infomesh crawl https://...      # Crawl a URL
infomesh dashboard              # Interactive TUI dashboard
infomesh doctor                 # System diagnostics (10 checks)
infomesh bench                  # Performance benchmarks
infomesh feedback stats         # Implicit search quality signals
infomesh feedback top-urls      # Highest-quality URLs by feedback
infomesh feeds import subs.opml # Import RSS/Atom feeds from OPML
infomesh index import --starter # Download community starter index
infomesh mcp                    # Start MCP server (stdio)
infomesh mcp --http --port 8081 # Start MCP server (HTTP)

🆕 v0.2.0 新特性

CHANGELOG.md 中记录的 v0.2.0 功能里程碑涵盖了搜索智能、RAG 支持、安全性、可观测性和开发者体验方面的 100 多项功能。此历史里程碑标签并非当前软件包版本:此代码检出版本声明为 0.1.15。以下亮点包含可选能力和库工具,并不保证每种运行时路径都会启用所有功能:

搜索智能
功能描述
🧠 NLP 查询处理停用词移除(9 种语言)、同义词扩展、自然语言解析
✏️ 是否要找未找到结果时,根据编辑距离进行拼写纠正
📊 搜索分类按查询统计域名、语言和日期范围的分类数量
🎯 结果聚类按域名对结果分组,方便浏览
🔦 摘要高亮在结果摘要中高亮显示查询词
🧹 智能去重基于 Jaccard 相似度移除近似重复项
🔍 搜索解释透明展示每个结果的分数明细
RAG 与答案提取
功能描述
📚 RAG 输出提供分块且注明来源的上下文窗口,供大模型使用
💡 答案提取提供直接答案、置信度分数和来源 URL
✅ 事实核查对照多个已索引来源交叉验证声明
🏷️ 实体提取识别人物、组织、URL 和电子邮件地址
🛡️ 毒性过滤对搜索结果进行内容安全评分
爬虫增强
功能描述
📄 PDF 提取从爬取的 PDF 文档中提取文本
🏗️ 结构化数据解析 JSON-LD、OpenGraph 和 meta 标签
🌍 语言检测基于文字系统和词频进行检测(9 种语言)
📡 RSS/Atom 订阅源自动发现并解析订阅源
📝 内容差异对比检测不同爬取版本之间的变化
💻 代码块提取 <pre><code>,并检测语言
📊 表格提取将 HTML 表格转换为结构化数据(CSV/dict)
安全与 API
功能描述
🔑 API 密钥管理创建、验证、撤销和轮换密钥
👥 基于角色的访问控制Admin/Reader/Crawler 权限矩阵
📋 审计日志记录基于 SQLite 的审计日志记录工具;覆盖范围取决于已启用的调用路径
🔒 Webhook 签名使用 HMAC-SHA256 验证负载
📊 Prometheus 指标用于监控的 /metrics 端点
📖 OpenAPI 规范在 /openapi-spec 自动生成 OpenAPI 3.1 规范
开发者体验
功能描述
🐍 Python SDKInfoMeshClient,支持同步/异步搜索、爬取和建议
🔌 插件系统通过生命周期钩子注册自定义插件
🦜 LangChainInfoMeshRetriever 集成
🦙 LlamaIndexInfoMeshReader 集成
🏗️ HaystackInfoMeshDocumentStore 集成
⎈ Helm Chart可配置资源的 Kubernetes 部署
🐳 Docker Compose带卷的多容器配置

完整变更列表请参阅 CHANGELOG.md。


🏗️ 架构

InfoMesh 架构图

### 技术栈
层级技术原因
语言Python 3.12+现代异步支持、类型提示、match/case、StrEnum
P2P 网络libp2p (py-libp2p)经实践验证的 P2P 技术栈,包含 Kademlia DHT 和 Noise 加密
DHTKademlia基于 XOR 距离的路由;当前的 py-libp2p 后端会使用 256 位 SHA-256 对路由键进行规范化
爬取httpx + trafilatura出色的异步 HTTP 支持和高准确度的内容提取
关键词搜索SQLite FTS5无需安装、嵌入式,开箱即用地支持 BM25
向量搜索ChromaDB(可选)使用 all-MiniLM-L6-v2 进行语义/嵌入搜索
MCP 服务mcp-python-sdk用于大模型工具集成的标准协议
管理 APIFastAPI本地健康状况、状态和配置端点
序列化msgpack二进制消息编码;相较于 JSON 的速度和体积取决于负载
压缩zstandard可调节压缩级别,并为相似文档提供字典模式
仪表板Textual功能丰富的 TUI,包含标签页、迷你图、均衡器可视化和背景音乐
本地大模型ollama / llama.cpp在节点上进行摘要(Qwen 2.5、Llama 3.x、Gemma 3)
日志记录structlog结构化、可由机器解析的日志
打包uvPython 依赖项、环境和构建管理;提速效果取决于工作负载
搜索流程(目标延迟:约 1 秒)

InfoMesh 搜索流程图


🔒 安全与信任

InfoMesh 的设计基于零信任假设——每个对等节点都可能具有恶意。系统提供多层防护:

内容完整性
机制描述
内容证明发布的来源证明会将 SHA-256(raw_response) + SHA-256(extracted_text) 绑定到签名身份;仅在本地进行爬取并不保证会发布
Merkle 树提供全索引完整性证明和成员资格验证——任何人都可以审计任意文档是否被纳入
随机审计大约每小时进行一次副本/来源检查,具体取决于对等节点是否可用;副本损坏可能导致信任度受罚,而来源内容发生变化则无法据此得出结论
P2P 信用验证使用签名密钥记录的条目可提供 Merkle 证明;未签名条目不包含在已签名证明中
网络安全
威胁防御措施
女巫攻击本地工作量证明生成(耗时取决于硬件)+ 每个 /24 准入分桶默认最多允许 3 个节点;无法保证抵御大规模身份伪造
日蚀攻击引导节点发现 + 子网限制 + 对等节点刷新;至少有 3 个可独立连接的对等节点是部署目标,并非当前捆绑配置中的默认值
DHT 投毒每个关键词的发布速率限制(每个节点每小时 10 次)+ 带签名的发布 + 内容哈希验证
信用刷取新节点需经过 24 小时试用期 + 统计异常检测 + 原始 HTTP 哈希审计
中间人攻击所有 P2P 传输均通过 libp2p Noise 协议加密
密钥管理
  • Ed25519 密钥对存储在 ~/.infomesh/keys/
  • 密钥轮换:infomesh keys rotate — 轮换应用签名密钥,并在本地保存双重签名的撤销记录;不会轮换独立的 libp2p 传输密钥
  • 对等节点身份:libp2p 传输使用由其自身公钥派生的对等节点 ID;应用签名密钥标识符是独立的身份

**当前传播限制:**轮换操作会写入 .bin 记录,而启动发布器会扫描 .json 文件。在修正此集成不匹配问题之前,请勿依赖此命令自动通过 DHT 传播撤销信息。

统一信任评分

每个对等节点都有一个持续更新的信任评分:

Trust = 0.15 × uptime  +  0.25 × contribution  +  0.40 × audit_pass_rate  +  0.20 × summary_quality
层级评分处理方式
可信≥ 0.8最高信任等级;搜索成本取决于独立的贡献等级
普通0.5 – 0.8标准运行
可疑0.3 – 0.5低信任等级;检查审计证据和隔离状态
不可信< 0.3连续审计失败 3 次后隔离出网络

🏢 企业就绪能力

InfoMesh 包含面向生产部署的功能,但当前软件包被归类为 Alpha。生产环境使用前,请验证您的环境并查看运行时符合性限制:

分离式部署(DMZ / 私有网络)

企业环境可以将爬虫与索引器部署在不同网络区域:

┌─────────── DMZ ──────────────┐       ┌──────── Private Network ────────┐
│                              │       │                                 │
│  infomesh start --role crawler ───────▶  infomesh start --role search │
│  (crawls the public web)     │  P2P  │  (indexes + serves queries)    │
│                              │ auth  │                                 │
│  infomesh start --role crawler ───────▶  infomesh start --role search │
│                              │       │                                 │
└──────────────────────────────┘       └─────────────────────────────────┘

三种节点角色:

角色组件用例
full(默认)爬虫 + 索引器 + 搜索单节点或简单部署
crawler仅爬虫,将页面转发给索引器可访问互联网的 DMZ 节点
search仅索引器 + 搜索,接受提交私有网络,无需互联网连接

配置示例(~/.infomesh/config.toml):

# DMZ Crawler node
[node]
role = "crawler"
listen_address = "0.0.0.0"

[network]
index_submit_peers = ["/ip4/10.0.0.1/tcp/4001/p2p/<INDEXER_1_PEER_ID>", "/ip4/10.0.0.2/tcp/4001/p2p/<INDEXER_2_PEER_ID>"]
# Private Search/Index node
[node]
role = "search"
listen_address = "10.0.0.1"

[network]
peer_acl = ["<CRAWLER_1_PEER_ID>", "<CRAWLER_2_PEER_ID>"]

将每个占位符替换为对应节点的实际 libp2p 对等节点 ID。索引提交需要完整的对等节点多地址和经过身份验证的 v2 确认;不支持裸 IP/TCP 地址或旧版 HTTP 目标。

CLI 用法:

# Start as DMZ crawler
infomesh start --role crawler --seeds tech-docs

# Start as private indexer
infomesh start --role search --no-dashboard
运维
  • 资源调控器 — CPU/内存阈值、I/O 优先级和带宽控制,提供 4 种预设配置(minimal、balanced、contributor、dedicated)。动态限流会根据采样的系统负载和进程 RSS 做出响应;这并非严格的内存上限,也不能保证避免操作系统的 OOM-killer
  • 长时间运行韧性 — StartupLock + PID 命令行验证可防止同一数据目录启动多个节点进程;infomesh stop 会发送 SIGTERM,并等待进程正常关闭后再清除 PID 文件
  • 运行时心跳 — 长时间运行的 _serve 工作进程每 10 s 写入一次 runtime_status.json;管理 API 通过 /health?detail=1、/status 和 /metrics 提供最新心跳、降级级别、限流系数和进程内存信息
  • 启动前检查 — 启动前验证磁盘空间和网络连接
  • 负载保护 — 限制 QPM(每分钟查询数)和并发数,防止节点过载
  • WAL 模式 SQLite — 仪表板刷新期间支持安全并发读取,不会锁定爬取写入
  • 结构化日志 — 所有库代码均使用 structlog 输出机器可解析的日志
  • Docker 支持 — 提供带持久化数据卷挂载的 Dockerfile;生产就绪仍需针对具体部署进行验证
可配置
  • TOML 配置(~/.infomesh/config.toml),支持环境变量覆盖(INFOMESH_CRAWL_MAX_CONCURRENT=20)
  • 值验证 — 对选定的配置值进行验证或限制,并给出结构化警告;验证针对特定字段,并不保证涵盖所有值
  • 仪表板设置 — 可通过 TUI 设置选项卡编辑常用设置;高级字段仍需通过配置文件或 CLI 修改
  • 能耗感知调度 — 优先在配置的非高峰时段安排 LLM 密集型任务(1.5× 积分倍率)
合规性
  • 严格执行 robots.txt — 遵守所有爬取指令
  • DMCA 下架 — 经授权的签名通知会持久记录排除项和转发义务;无法保证在 24 小时内送达不可访问的对等节点
  • GDPR — 为个人数据提供分布式删除记录;支持被遗忘权
  • 内容归属 — AI 生成的摘要会标注 content_hash + 来源 URL
  • 付费墙检测 — fetch_page() 会检测并尊重付费墙内容
  • 使用条款 — TERMS_OF_USE.md 清晰说明爬虫行为和数据处理方式
规模
  • 采用 Kademlia DHT 路由,专为支持数千个节点而设计
  • 3 层去重机制可防止索引膨胀(URL 规范化 → SHA-256 精确匹配 → SimHash 近似重复)
  • 使用 zstd 压缩快照,实现节点间高效共享索引
  • 导入 Common Crawl 数据以引导构建大型索引

💰 赚取积分

积分是维持网络健康运行的激励机制。积分按每个节点本地记录——没有区块链,也没有中央账本。

积分如何运作
Credits Earned = Σ (Weight × Quantity × TimeMultiplier)
赚取方式
操作权重类别赚取方式
爬取1.0 /页基础只需运行 InfoMesh — 它会从种子 URL 自动爬取
查询处理0.5 /查询基础其他对等节点通过你的节点路由搜索查询
文档托管0.1 /小时基础被动赚取 — 你索引的文档为网络提供服务
网络在线时间0.5 /小时基础保持节点运行即可
LLM 摘要生成1.5 /页LLM启用本地 LLM,自动为爬取的内容生成摘要
为对等节点提供 LLM 服务2.0 /请求LLM处理其他节点发来的摘要请求
PR — 文档/拼写错误1,000 /已合并 PR奖励修正拼写错误或改进文档
PR — 修复错误10,000 /已合并 PR奖励修复错误并添加测试
PR — 功能50,000 /已合并 PR奖励实现新功能
PR — 重大贡献100,000 /已合并 PR奖励核心架构改进或重大功能

PR 行是账本操作权重,并不能证明会自动获得 GitHub 奖励。只有在账本中记录了相应贡献,已合并的 PR 才会赚取这些积分。

时间倍率
  • 基础操作:始终为 1.0×
  • 非高峰时段的 LLM 操作(可配置,默认为 23:00–07:00):1.5×
  • 非高峰调度注重能耗 — 网络会优先将批量 LLM 工作路由到当前处于非高峰时段的节点
搜索成本
等级贡献分数搜索成本实际兑换比例
等级 1< 1000.100 / 次查询10 次爬取 → 100 次搜索
等级 2100 – 9990.050 / 次查询10 次爬取 → 200 次搜索
等级 3≥ 1,0000.033 / 次查询10 次爬取 → 约 303 次搜索
公平性保障
  • 非大模型参与:每小时 10 次计入奖励的爬取,按 Tier 1 正常费率可覆盖 每小时 100 次搜索(债务费率下为 50 次);这是积分计算方式,不是吞吐量保证
  • 大模型贡献分数设有上限:大模型操作对用于划分等级的有效贡献分数的占比最多为 60%;这不会限制原始账本收益或余额
  • 在线奖励:只要保持节点在线,每小时即可获得 0.5 积分,不受硬件影响
  • 积分耗尽不会阻止搜索:即使积分为零,账本仍允许按下方规则搜索;资源保护措施仍可能限制请求
💳 零美元债务——无需信用卡,也不涉及真实货币

积分用完后会怎样?你仍然可以继续搜索。

InfoMesh 不会切断你的服务。没有付费墙,没有“请输入信用卡信息”,也没有升级按钮。取而代之的是一条简单、人性化的恢复路径:

阶段时长说明
✅ 正常余额 > 0 时按正常费用搜索。一切照常。
⏳ 宽限期余额归零后的前 72 小时搜索功能与之前完全相同。余额会变成负数,但不会受到惩罚。慢慢来。
📉 债务模式72 小时后继续搜索,但费用为 2 倍。债务会累积——旨在激励恢复,而非阻止搜索。
🔄 恢复随时只需运行节点。通过爬取、托管或贡献赚取积分。余额重新转正后,就会恢复正常。
Credits ran out
     │
     ▼
┌─────────────────────────────────────┐
│  🟢 Grace Period (72 hours)         │
│  Search works normally.             │
│  Balance goes negative — no penalty.│
└──────────────┬──────────────────────┘
               │ 72h passed, still negative?
               ▼
┌─────────────────────────────────────┐
│  🟡 Debt Mode                       │
│  Search continues at 2× cost.      │
│  Debt accumulates.                  │
└──────────────┬──────────────────────┘
               │ Earn credits → balance > 0
               ▼
┌─────────────────────────────────────┐
│  🟢 Back to Normal                  │
│  Debt cleared. Grace reset.         │
│  Full speed ahead.                  │
└─────────────────────────────────────┘

核心原则:InfoMesh 中的债务以积分而非金钱计算。你可以通过贡献而不是付款来偿还债务。运行节点、爬取一些页面、保持网络运行——债务就会自然消失。

无需信用卡。无需美元。无需订阅。不会弹出“试用已过期”的提示。 只需运行节点,即可恢复正常。


🤝 参与贡献

欢迎各种形式的贡献——代码、文档、错误报告、功能创意和种子 URL 列表。

开始贡献
# Clone and install
git clone https://github.com/dotnetpower/infomesh.git
cd infomesh
uv sync --dev --locked

# Run the supported test suite
uv run pytest tests/ --ignore=tests/test_vector.py -x -q --tb=short

# Run linter + formatter
uv run ruff check infomesh/ tests/
uv run ruff format --check .

# Run type checker
uv run mypy infomesh/ --ignore-missing-imports
贡献方式
贡献难度影响
🐛 报告错误简单高——惠及所有人
📝 改进文档 / 翻译简单高——降低入门门槛
🌱 添加种子 URL简单中——扩大爬取覆盖范围
🧪 编写测试中等高——持续覆盖分布式搜索、爬取和仪表板的回归问题
🔧 修复问题中等直接影响
✨ 实现功能困难推动项目向前发展
🔐 安全审计困难对建立信任至关重要
代码风格
  • 格式化工具:ruff format(兼容 black,每行 88 个字符)
  • 代码检查工具:ruff,启用 E、F、I、UP、B、SIM 规则
  • 类型提示:所有公共函数都必须添加
  • 文档字符串:所有公共类和函数都必须添加
  • 测试:每个 PR 都应包含新功能的测试
  • 库代码中不要使用 print()——请使用 structlog
拉取请求工作流
  1. Fork 此代码仓库
  2. 创建功能分支:git checkout -b feat/my-feature
  3. 编写代码和测试
  4. 运行 uv run ruff check infomesh/ tests/、uv run ruff format --check .、uv run mypy infomesh/ --ignore-missing-imports 和 uv run pytest tests/ --ignore=tests/test_vector.py -x -q --tb=short
  5. 提交 PR——已合并的贡献在账本中的奖励权重为 1,000 – 100,000 积分;要获得积分,必须记录贡献,仅仅打开或合并 PR 并不足够。

完整指南请参阅 CONTRIBUTING.md。


📖 文档

详细文档位于 docs/ 目录中:

文档描述
概览项目愿景、原则和使命
架构系统设计、数据流和组件交互
积分系统完整的激励机制和公平性分析
技术栈技术选型及其理由
法律robots.txt、DMCA、GDPR、合规性
信任与完整性安全模型和威胁分析
安全审计漏洞分析和企业级加固
控制台仪表板TUI 仪表板、选项卡、小组件、快捷键
MCP 集成MCP 服务设置、IDE 配置指南
发布PyPI 打包、CI/CD、发布流程

📌 另有**韩语(한국어)**文档。


📊 项目统计

2026-09-20 的工作树快照。文件数和行数统计包含 infomesh/ 和 tests/ 下的 Python 文件;源代码模块包含包初始化文件。以下测试结果来自 Python 3.13,不含可选的向量测试套件,并跳过了选择性启用的实时 LLM 检查。

指标数值
源代码模块169 个 Python 文件
测试文件91 个 test_*.py 文件
源代码行数51,404
测试代码行数28,478
通过的测试2,183 个通过,1 个跳过(--ignore=tests/test_vector.py)
MCP 工具5 个整合工具(支持旧名称)
测试覆盖率回归测试覆盖;本次运行无法证明代码或运行时路径覆盖率达到 100%
开发阶段10 个历史里程碑(Phase 0 → 6);不代表对运行时完全符合要求的保证
Python 版本3.12+
许可证MIT

🗺️ 路线图

此表记录的是已完成的历史组件里程碑,并不保证所有运行时集成或部署要求均已完成。目前重点是发展社区和加固生产环境;证据和运行限制请参阅运行时符合性记录。

阶段重点状态
0MVP — 单节点爬取 + 索引 + MCP + CLI✅ 已完成
1索引共享 — 快照、Common Crawl、向量搜索、SimHash✅ 已完成
2P2P 网络 — libp2p、DHT、分布式爬取与索引、Sybil/Eclipse 防御✅ 已完成
3质量与激励 — 排名、积分、信任、认证、审计、LLM✅ 已完成
4生产环境 — 链接图、LLM 重排序、来源归属、法律合规✅ 已完成
5A核心稳定性 — 资源管理器、自动重新爬取、查询缓存、负载保护✅ 已完成
5B搜索质量 — 延迟感知路由、Merkle Tree 完整性✅ 已完成
5C发布就绪 — Docker、密钥轮换、mDNS、LICENSE、CONTRIBUTING✅ 已完成
5D优化 — LLM 声誉、时区验证、仪表板设置、P2P 积分验证✅ 已完成
6搜索智能、RAG、安全性、可观测性、SDK、集成、开发者体验✅ 已完成
接下来
  • 🌍 公共引导节点 — 在多个区域扩展由社区维护的种子节点

    当前配置:bootstrap/nodes.json 包含一个 Azure 美国东部节点。启用 P2P 的节点会自动尝试发现引导节点;此列表不保证节点实时可用,防火墙/NAT 可能需要配置。

  • 🎭 JS 渲染 — 基于 Playwright 爬取 JS 密集型网站
  • 📱 Web 仪表板 — 除 TUI 外可选的浏览器界面
  • 🔍 语义搜索融合 — BM25 + 向量混合排名与 RRF
  • 🌐 多语言词干提取 — 针对各语言的分词和词干提取

⚖️ 法律

  • robots.txt:严格执行。禁止抓取的网站绝不会被抓取。
  • 版权:仅将全文存储为缓存;搜索结果返回带有来源归属的摘要。
  • DMCA:经授权签署的通知会持久保存排除记录,并通过对等节点中继处理。对于无法联系的对等节点,无法保证在 24 小时内送达。
  • GDPR:分布式删除记录。节点可以排除包含个人数据的页面。
  • AI 摘要:标记为 AI 生成,并通过 content_hash 链接到来源;始终提供原始 URL。
  • 使用条款:完整条款请参阅 TERMS_OF_USE.md。

🙏 致谢

InfoMesh 的建立离不开这些优秀开源项目:

httpx • trafilatura • libp2p • SQLite • ChromaDB • Textual • FastAPI • mcp-python-sdk • uv • structlog • zstandard


MIT 许可证 — 版权所有 2026 InfoMesh Contributors

如果你觉得 InfoMesh 有用,不妨给仓库点个 ⭐ — 这有助于其他人发现这个项目。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。