加密白皮书知识图谱问答系统

GraphRAG MCP是一个本地优先的模块化系统,将加密白皮书转换为知识图谱和可向量搜索的语料库,通过RAG和知识图谱增强回答相关问题。

  • by Swissbit92
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Swissbit92/GraphDB_Desktop

使用说明

🧠 GraphRAG MCP(大脑图谱检索增强生成多模态处理/模型/系统)

以实体为中心的检索增强生成技术在加密货币白皮书中的应用
本地优先 • 私有 • 准备就绪,适用于FastMCP


1️⃣ ✨ 概述

GraphRAG MCP(注:GraphRAG可能是一个特定技术或系统的名称,MCP可能代表某种模式、配置或组件,但具体含义需根据上下文确定,此处直接翻译为“GraphRAG MCP”,保留原样) 是一个模块化的, 本地优先 将加密货币白皮书转化为(某种形式或用途的)系统 以实体为中心的知识图谱 以及一个 可向量搜索的语料库,然后回答问题,使用 RAG(检索增强生成)+ 可选的KG(知识图谱)增强 + LLM(大型语言模型)综合 — 全部通过标准化实现 FastMCP 工具。

为什么选择这个项目?

  • 🛡️ 翻译为中文是“护盾”。这个符号通常用来表示防护、保护或防御的概念。 默认隐私保护: 完全在您的机器上运行(Ollama、Chroma、GraphDB)。
  • ⚡(闪电符号,无特定含义,可单独使用或根据上下文表示速度、能量、惊喜等) 快速且专注: 实体过滤检索将上下文范围缩小到正确的标记/协议。
  • 🧩 这个表情符号通常被用来表示“拼图”、“碎片”或“思考”的意思,但在没有具体上下文的情况下,它也可以简单地被翻译为“拼图块”或“碎片”。不过,为了更贴近日常表达,我们也可以将其意译为“思考中”或“正在拼凑信息”,具体取决于使用场景。在这里,我将其翻译为“拼图块”以保持其原始含义。 可组合的: 暴露;揭露 rag.* 并且 kg.* 工具,所以(用于)an(此处“an”可能指特定的名词或情境,需具体上下文确定) MCP协调员 或者 Streamlit(可直接作为专有名词使用,无需翻译,若需解释性翻译,可译为“一个用于快速构建数据应用的工具/框架”) 该应用程序可以协调多工具的工作流程。
  • 🧠 表示“大脑”或“思考”,可翻译为“大脑”或“思考中”。 可解释的答案: 回报;返回 带有文档/片段/实体ID的引用 对于每一个回复。

🔁 典型用法

  1. 解析并标注白皮书 → 构建嵌入表示并插入实体。
  2. 通过(某种方式)提问 rag.qa (语义+实体过滤检索),可选地使用知识图谱(KG)标签/别名进行丰富。
  3. 获取简洁的大型语言模型(LLM)答案,并附上来源片段的内联引用。

2️⃣ 特点/功能

🧩 知识图谱(KG)

  • 仅实体架构 使用RDF/OWL本体(mcp-core.ttl, mcp-crypto.ttl)。
  • 建立在……之上 Ontotext GraphDB 11+(版本) 带有SHACL验证和SPARQL/GraphQL端点。
  • 存储规范实体,如代币、协议、组件和组织。
  • 通过别名、标签和关系,实现对RAG答案的知识图谱(KG)丰富化。

🔍 向量检索(RAG)

  • ChromaDB(可译为“色度数据库”或根据具体上下文调整为更贴切的名称,但“色度数据库”为直译,具体翻译需结合应用场景) 作为分块嵌入的持久向量存储。
  • 使用(某种方法或工具)生成的嵌入 Ollama 的 nomic-embed-text 模型。
  • 支持 语义的 和 实体过滤过的 用于精确上下文检索的检索模式。
  • 每个数据块都包含结构化的元数据: doc_id, chunk_id, entity_ids, section_type,以及 page。

🧠 本地大型语言模型推理

  • 用途 Ollama(注:这是一个专有名词或特定项目名,直接翻译可能无具体含义,故保持原样) 对于完全本地推理——无需外部API密钥。
  • 兼容如……等型号 llama3.1:latest, qwen2.5:14b-instruct,或 mistral。
  • 执行标注、总结以及最终的质量保证(QA)综合工作。
  • 包括确定性(的内容/方法/等) 模拟模式 用于离线测试和持续集成(CI)。

⚙️ FastMCP 服务器

  • 两台模块化服务器通过(某种方式)暴露工具 FastMCP 2.x:
    • rag → rag.search, rag.embed_and_index, rag.reindex, rag.delete, rag.health, rag.qa
    • kg → sparql_query, sparql_update, push_labels, validate_labels, list_documents, kg.health
  • 两者均可通过标准I/O在本地运行,并且与MCP协调器兼容。

🔒 隐私与可移植性

  • 100%离线操作——适用于断网或研究环境。
  • 可复现的本地堆栈(GraphDB + Chroma + Ollama + FastMCP)。
  • 在Windows 11、macOS或Linux系统上均可无缝运行。

🚀 准备就绪,可集成

  • 即插即用,与 MCP协调员 或者 Streamlit 应用程序 供最终用户问答使用。
  • 可与其他MCP(管理控制点/主控程序等,具体含义根据上下文确定)实现互操作,例如:
    • Brave API MCP(网页搜索)
    • MongoDB MCP(策略数据)
    • Telegram MCP(消息传递)
    • Gmail MCP(电子邮件检索)
  • 返回干净的JSON输出,便于在代理工作流中进行链式调用。

3️⃣ 🏗️ 建筑

这个(或:那个) GraphRAG MCP 建筑融合 知识图谱推理, 基于向量的检索,和 本地大型语言模型(LLM)合成 — 全都在 MCP 互操作性标准。
它专为……而设计 清晰度, 隐私,和 模块化可扩展性。


🧭 高级概述

层 技术 目的 示例组件
🗂 摄入层(或摄入层,根据上下文,“Ingestion Layer”可理解为系统或数据处理中的一个层级,负责接收或处理输入数据) Python + LangChain 读取PDF,将其分割成语义块,并使用大型语言模型(LLM)进行标注 pdf_reader.py, semantic_splitter.py, llm_chunk_tagger.py
🧩 知识图谱层(KG) GraphDB(Ontotext)+ RDFLib 存储规范实体(令牌、协议、组织) graphdb_sink.py, namespaces.pySHACL shapes(SHACL形状)
磁盘 向量检索层(RAG) ChromaDB + Ollama 嵌入 存储文本块 + 元数据 + 用于语义检索的嵌入 chroma_store.py, .chroma/
⚙️ MCP层 FastMCP 2.x 暴露标准化的MCP工具(rag.*, kg.*) rag_server.py, kg_server.py
🧠 大语言模型(LLM)合成层 Ollama 大语言模型(LLMs)llama3.1, qwen2.5 利用检索到的上下文和知识图谱(KG)信息回答问题 rag.qa, llm_chunk_tagger
💬 用户界面层 MCP协调员 / Streamlit 连接多个MCP以进行对话式问答 协调员用户界面或自定义Streamlit仪表板

🔹 数据流图

            ┌────────────────────────────────────────┐
            │              Whitepapers               │
            │ (PDFs, research papers, documentation) │
            └───────────────────┬────────────────────┘
                                │
                                ▼
            ┌─────────────────────────────────────────────┐
            │      📄 Ingestion & Labeling                │
            │  pdf_reader → semantic_splitter →           │
            │  llm_chunk_tagger → postprocess             │
            └───────────────────┬─────────────────────────┘
                                 │
                        ┌────────┴────────┐
                        │                 │
                        ▼                 ▼
            ┌────────────────┐    ┌──────────────────────┐
            │ 🧠 GraphDB KG  │    │ 💾 Chroma RAG      │
            │ Entities & IRIs │   │ Chunks + Embeddings │
            └────────┬────────┘   └────────┬────────────┘
                     │                     │
                     ▼                     ▼
               ┌───────────────┐      ┌───────────────┐
               │ ⚙️ kg_server  │     │ ⚙️ rag_server │
               │ (FastMCP)     │      │ (FastMCP)     │
               └────────┬──────┘      └──────┬────────┘
                        │                    │
                        └────────┬───────────┘
                                 ▼
                  ┌────────────────────────────────┐
                  │ 💬 MCP Coordinator / Streamlit │
                  │  User-facing Q&A Interface     │
                  └────────────────────────────────┘


🧠 它的工作原理(分步说明)

步骤 描述 输入 输出
1️⃣ PDF解析 白皮书PDF 原始文本页面
2️⃣ 语义分割 原始文本 有意义的片段(按部分/主题划分)
3️⃣ 大语言模型标注 文本块 实体、关系和章节标签
4️⃣ 后处理 标记的片段 已清理的带有规范实体IRI的JSONL文件
5️⃣ 索引编制 JSONL 标签 Chroma 嵌入 + 知识图谱三元组
6️⃣ 检索(rag.search) 查询文本/实体 相关片段
7️⃣ 补充(可选) 提取的实体 知识图谱中的别名、定义
8️⃣ 答案综合(rag.qa) 问题+上下文 简洁答案及引用

🌐 数据模态

数据类型 存储 示例
🧱(石头) 实体 GraphDB <https://kg.mcp.ai/id/token/bitcoin> → rdf:type crypto:Token
📜 块(或称为“数据块”) Chroma “比特币是一种点对点的电子现金系统……”
🧩(拼图块) 嵌入 Chroma / Ollama 768维 nomic-embed-text 向量
🧮(计算器图标,无实际文字含义) 出处;来源 元数据 doc_id, chunk_id, page, entity_ids[]
💬 答案 MCP JSON { "answer": "...", "citations": [...] }

🧱 核心MCP工具

服务器 工具 描述
🧩(拼图或积木的符号,无直接对应中文意义,可保留原样或根据上下文翻译为“拼图”、“积木”等) RAG(Retrieval-Augmented Generation,检索增强生成) rag.search 在数据块上进行语义搜索
rag.embed_and_index 将新标记的片段添加到索引中
rag.reindex 从输出目录重建
rag.delete 按ID或过滤器删除
rag.qa 使用大型语言模型(LLM)进行综合问答
rag.health 诊断与商店信息
🧠 KG(千克) sparql_query / sparql_update 在GraphDB上执行SPARQL查询
push_labels / validate_labels 添加或验证知识图谱条目
list_documents, get_chunk 提取文档元数据
kg.health 检查GraphDB仓库状态

4️⃣ ⚙️ 安装与设置

设置您的本地(环境/配置) GraphRAG MCP环境 只需几步!
这个堆栈完全离线运行,并且与(其他系统/组件)无缝集成 Ollama(注:这是一个专有名词或特定项目名,直接音译为中文可能无实际意义,但在此提供音译以保持原文形式), GraphDB(中文可译为“图形数据库”),和 色度。


🧾 先决条件

要求 描述 示例
🐍(一条蛇) python 版本 三月十一号加 推荐 python --version → Python 3.11.8
🧠 Ollama(注:Ollama是一个用于本地运行大型语言模型的工具或平台的名称,在中文中通常直接保留原名,不进行翻译。) 本地LLM运行时(用于推理+嵌入) ollama pull llama3.1:latest
🧩(拼图块) GraphDB Desktop 11+(或译为:GraphDB 桌面版 11及以上版本) 本地知识图谱数据库 运行于 http://localhost:7200
磁盘驱动器 ChromaDB(可译为“色度数据库”或根据具体上下文可能译为“色彩数据库”等,但“ChromaDB”本身是一个专有名词,直接翻译可能不完全准确,需结合具体语境) 用于嵌入的向量存储 在以下条件下自动初始化 .chroma/
工具 FastMCP 多组件平台运行时(2.x) 通过安装 pip

🧱 文件夹布局(简化版)

文件夹 用途 示例内容
src/ 核心代码库 pipeline.py, mcp/, kg/, rag/
outputs/run_simple/ 生成的输出 标记的片段、报告、嵌入表示
.chroma/ 染色体持久向量存储 chroma.sqlite3, index/
.env 环境配置 Ollama、GraphDB、Chroma 设置
tests/ 离线单元测试 test_rag_qa.py, test_kg_server.py

分步设置指南

🪄 1️⃣ 克隆并创建虚拟环境

git clone https://github.com/Swissbit92/GraphDB_Desktop.git

⚡ 2️⃣ 激活环境

操作系统 命令
🪟(这个符号在中文中没有直接对应的翻译,它是一个表示“墙”或“墙壁”的Unicode字符,可以理解为“墙”或“墙壁”的意思,但具体翻译可能因上下文而异。) Windows(PowerShell) .venv\Scripts\activate
🐧 企鹅 Linux / macOS(可翻译为“Linux / Mac操作系统”或保持原样,因为“macOS”是苹果公司的操作系统名称,通常直接使用) source .venv/bin/activate

📦 3️⃣ 安装依赖项

pip install -r requirements.txt

⚙️ 4️⃣ 验证安装

python -m src.mcp.rag_server --list-tools
python -m src.mcp.kg_server --list-tools

✅ 您应该能看到像这样的工具 rag.qa, rag.search,以及 kg.health.


🧠 可选:预加载 Ollama 模型

模型 用途 拉取命令
驴子 llama3.1:latest(可译为“最新版本的llama3.1”) 默认推理+总结模型 ollama pull llama3.1:latest
🧩(拼图/积木/神秘物品等,具体含义根据上下文而定) nomic-embed-text(可译为“诺米文本嵌入模型”或根据具体上下文调整,但“诺米文本嵌入”是较为直接的翻译) 用于RAG向量化的嵌入模型 ollama pull nomic-embed-text
🤖 Qwen2.5:14b-instruct(可译为“通义千问2.5:140亿参数指令版”,但根据语境,“Qwen2.5:14b-instruct”可能直接作为模型名称使用,不进行具体翻译) 更大的模型用于复杂问答任务 ollama pull qwen2.5:14b-instruct

🔍 快速理智检查

运行快速健康诊断以确保所有配置均正确无误:

pytest -q
python -m src.mcp.rag_server --run-tool rag.health
python -m src.mcp.kg_server --run-tool kg.health

如果两者都返回✅ 好的,你已经准备好运行这个数据处理流程并开始查询你的(数据/信息)了 知识图谱 + 检索增强生成(RAG) 系统!


5️⃣ 🧪 如何使用与测试

📥 吸收白皮书内容并构建指数

# Place your PDFs under .\whitepapers\ then run:
python -m src.pipeline --input ".\whitepapers\*.pdf"

✅ 输出:

  • 带标签的JSONL(每行一个JSON对象的格式) outputs\run_simple\labels\
  • 色度指数 .chroma\
  • (如果启用)将实体推送到GraphDB存储库 mcp_kg

🖧 启动MCP服务器(RAG + KG)

# Terminal A
python -m src.mcp.rag_server
# Terminal B
python -m src.mcp.kg_server

💡 提示:在另一个 PowerShell 窗口中,确认工具是否可用:

python -m src.mcp.rag_server --list-tools
python -m src.mcp.kg_server --list-tools

🔎 快速检索检查(RAG)

# Example: semantic search for "peer-to-peer electronic cash"
python -m src.mcp.rag_server --run-tool rag.search --input '{ "text": "peer-to-peer electronic cash", "k": 3 }'

你应该能看到与之匹配的代码块 doc_id, chunk_id以及距离。


❓ 带引用的问题提出(rag.qa)

# Fully offline (deterministic mock answer)
python -m src.mcp.rag_server --run-tool rag.qa --input '{ "question": "What problem does Bitcoin aim to solve?", "k": 5, "kg_enrich": true, "use_mock_llm": true }'

➡️ 退货:

  • answer简洁回复(模拟或大型语言模型生成)
  • citations: [ {doc_id, chunk_id, entity_ids, text} ]
  • took_ms, model_used

通过省略(某些内容)来切换到真实的大型语言模型(LLM)合成 use_mock_llm (需要Ollama运行)。


🧠 可选:实体过滤问答

python -m src.mcp.rag_server --run-tool rag.qa --input '{ "question": "How does proof-of-work secure the network?", "entity_ids": ["https://kg.mcp.ai/id/token/bitcoin"], "k": 5, "kg_enrich": true, "use_mock_llm": true }'

这限制了检索仅针对标记有指定知识图谱实体的块。


🧪 运行测试套件

pytest -q

关键测试(全部为离线测试):

  • tests\test_rag_qa.py验证检索归一化和模拟大型语言模型(LLM)模式
  • tests\test_kg_server.py检查KG(知识图谱)连接性(如果GraphDB未运行则跳过)

🩺 健康检查

python -m src.mcp.rag_server --run-tool rag.health
python -m src.mcp.kg_server --run-tool kg.health

期待收集到信息、文件数量以及确认状态。


🧩 MCP协调员/用户界面连接员(可选)

确保您的 mcp.json 引用正在运行的服务器:

{
  "mcpServers": {
    "rag": { "command": "python", "args": ["-m", "src.mcp.rag_server"] },
    "kg":  { "command": "python", "args": ["-m", "src.mcp.kg_server"] }
  }
}

然后,通过您的MCP协调器或Streamlit应用程序进行连接,以交互式地调用 rag.qa 并且 kg.* 工具。


🙏 结束语

GraphRAG MCP是更广泛范围内的一个组成部分 Eeva AI(埃瓦人工智能) 生态系统——一个开放、模块化的智能加密研究与策略生成框架。
如果没有这个不断推动本地人工智能和知识工程边界的令人惊叹的开源社区,这个项目就不会存在。

如果你觉得这有用:

  • ⭐ 给仓库点赞(或关注) 支持持续发展
  • 🧩(拼图/碎片/谜题) 贡献 改进或新的MCP模块
  • 🧠 表示“大脑”或“思考”的意思。 探索 与其他MCP(Brave API、MongoDB、Telegram等)的集成
  • 💬 分享反馈 — 每一条建议都有助于让系统变得更智能、更快、更可靠

“知识只有在相互关联时才具有力量。”
— Eeva人工智能研究

感谢您成为开源旅程中的一员。 🚀(火箭或快速上升的象征)