关于 Infomesh
Infomesh 是面向 AI 助手和开发者的去中心化点对点搜索引擎,无需托管搜索 API。它结合可离线使用的本地索引、节点搜索,以及网页抓取和获取工具。
主要功能
- 01去中心化点对点搜索
- 02基于本地索引离线搜索
- 03抓取并索引网址
- 04获取完整网页
- 05提供 CLI、Python 包和本地 HTTP API
适用场景
- 01无网络时搜索已索引页面
- 02跨可用节点搜索
- 03先抓取网址再搜索内容
- 04为 AI 助手获取网页
MCP 相关
MCP 服务向 MCP 客户端提供搜索、抓取和获取网页的能力。本地搜索不会离开节点;分布式搜索会将查询发送给其他节点。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
5收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| answer_mode | enum | 否 | 响应模式:'snippets'(排名结果)、'summary'(答案提取)、'structured'(包含分数和元数据的 JSON)snippets | summary | structured |
| chunk_size | integer | 否 | 用于拆分 RAG 上下文的块大小。设置后会返回带来源归属的分块。 |
| domain_allowlist | array | 否 | 仅包含来自这些域名的结果 |
| domain_blocklist | array | 否 | 排除来自这些域名的结果 |
| explain | boolean | 否 | 为每个结果包含分数明细(BM25、新鲜度、可信度、权威性) |
| fetch_full_content | boolean | 否 | 获取并返回每个结果的完整文章文本 |
| language | string | 否 | ISO 639-1 语言代码(例如 'en'、'ko'、'ja') |
| local_only | boolean | 否 | 仅搜索本地索引(离线,<10ms) |
| query | string | 是 | 搜索查询字符串 |
| recency_days | integer | 否 | 筛选最近 N 天内发布的结果 |
| rerank | boolean | 否 | 通过本地 LLM 应用语义重排序 |
| top_k | integer | 否 | 返回结果数量 |
详细介绍
InfoMesh
面向大模型的完全去中心化 P2P 搜索引擎
无需信用卡。无需托管 API 密钥。无需按查询付费。
快速开始 • 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 SDK | InfoMeshClient,支持同步/异步搜索、爬取和建议 |
| 🔌 插件系统 | 通过生命周期钩子注册自定义插件 |
| 🦜 LangChain | InfoMeshRetriever 集成 |
| 🦙 LlamaIndex | InfoMeshReader 集成 |
| 🏗️ Haystack | InfoMeshDocumentStore 集成 |
| ⎈ Helm Chart | 可配置资源的 Kubernetes 部署 |
| 🐳 Docker Compose | 带卷的多容器配置 |
完整变更列表请参阅 CHANGELOG.md。
🏗️ 架构
| 层级 | 技术 | 原因 |
|---|---|---|
| 语言 | Python 3.12+ | 现代异步支持、类型提示、match/case、StrEnum |
| P2P 网络 | libp2p (py-libp2p) | 经实践验证的 P2P 技术栈,包含 Kademlia DHT 和 Noise 加密 |
| DHT | Kademlia | 基于 XOR 距离的路由;当前的 py-libp2p 后端会使用 256 位 SHA-256 对路由键进行规范化 |
| 爬取 | httpx + trafilatura | 出色的异步 HTTP 支持和高准确度的内容提取 |
| 关键词搜索 | SQLite FTS5 | 无需安装、嵌入式,开箱即用地支持 BM25 |
| 向量搜索 | ChromaDB(可选) | 使用 all-MiniLM-L6-v2 进行语义/嵌入搜索 |
| MCP 服务 | mcp-python-sdk | 用于大模型工具集成的标准协议 |
| 管理 API | FastAPI | 本地健康状况、状态和配置端点 |
| 序列化 | msgpack | 二进制消息编码;相较于 JSON 的速度和体积取决于负载 |
| 压缩 | zstandard | 可调节压缩级别,并为相似文档提供字典模式 |
| 仪表板 | Textual | 功能丰富的 TUI,包含标签页、迷你图、均衡器可视化和背景音乐 |
| 本地大模型 | ollama / llama.cpp | 在节点上进行摘要(Qwen 2.5、Llama 3.x、Gemma 3) |
| 日志记录 | structlog | 结构化、可由机器解析的日志 |
| 打包 | uv | Python 依赖项、环境和构建管理;提速效果取决于工作负载 |
搜索流程(目标延迟:约 1 秒)
🔒 安全与信任
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 | < 100 | 0.100 / 次查询 | 10 次爬取 → 100 次搜索 |
| 等级 2 | 100 – 999 | 0.050 / 次查询 | 10 次爬取 → 200 次搜索 |
| 等级 3 | ≥ 1,000 | 0.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
拉取请求工作流
- Fork 此代码仓库
- 创建功能分支:
git checkout -b feat/my-feature - 编写代码和测试
- 运行
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 - 提交 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 |
🗺️ 路线图
此表记录的是已完成的历史组件里程碑,并不保证所有运行时集成或部署要求均已完成。目前重点是发展社区和加固生产环境;证据和运行限制请参阅运行时符合性记录。
| 阶段 | 重点 | 状态 |
|---|---|---|
| 0 | MVP — 单节点爬取 + 索引 + MCP + CLI | ✅ 已完成 |
| 1 | 索引共享 — 快照、Common Crawl、向量搜索、SimHash | ✅ 已完成 |
| 2 | P2P 网络 — 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 有用,不妨给仓库点个 ⭐ — 这有助于其他人发现这个项目。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。