基于图的知识检索增强生成系统

一个基于PostgreSQL和Apache AGE的知识图谱检索增强生成系统,通过MCP服务器接口实现文档的自动解析、嵌入和索引。

  • by MvdB
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 M-vdBerg/GraphRAG

使用说明

图检索增强生成

基于图的检索增强生成系统 PostgreSQL+Apache时代 带着一个 MCP服务器 界面。

将markdown文件放入关注的文件夹中——系统会自动解析、嵌入它们,并将其作为知识图进行索引。通过MCP服务器从任何兼容MCP的客户端(Claude Desktop、Claude Code等)查询图形。

建筑

docs/  ←── you edit markdown here
  │
  ▼
[watcher service]
  │  watchdog file events
  │  sentence-transformers (CUDA) embeddings
  │  Markdown → chunks → vectors
  ▼
[PostgreSQL + AGE + pgvector]
  │  Document / Chunk / Entity vertices
  │  HAS_CHUNK / NEXT_CHUNK / LINKS_TO edges  (structural, automatic)
  │  SIMILAR_TO / MENTIONS edges              (semantic, via enricher)
  │  vector(1024) cosine similarity index
  ▼
[MCP server — HTTP/SSE]
  tools: search · get_document · list_documents · get_related · get_chunk_context

快速启动

# 1. Clone and configure
cp .env.example .env
# Edit .env — at minimum set POSTGRES_PASSWORD

# 2. (Optional) copy the dev override for bind-mounted docs folder
cp docker-compose.override.yml.example docker-compose.override.yml

# 3. Start everything
docker compose up --build

# 4. Drop markdown files into docs/
cp my-notes.md docs/
# The watcher picks them up within seconds

语义丰富(可选)

这 丰富者 添加了两层观察者不会自动创建的跨文档连接:

Layer 它做什么 LLM需要什么?
SIMILAR_TO edges 使用pgvector余弦相似度跨文档链接语义相似的块 否
MENTIONS 边缘+ Entity 顶点 从每个块中提取命名实体和概念 是

按需运行(文档索引后):

docker compose exec watcher python -m graphrag.enricher

丰富者是 渐进的 --它只处理新的块或自上次运行以来内容发生更改的块。切换 ENRICHER_MODEL 触发新车型的全面重新运行。

LLM端点

富集器可与任何兼容OpenAI的推理服务器配合使用。在中配置 .env:

ENRICHER_BASE_URL=http://localhost:4000/v1   # LiteLLM, vLLM, Ollama, LM Studio, …
ENRICHER_API_KEY=dummy
ENRICHER_MODEL=mistral/mistral-small-24b     # or any model your endpoint serves

推荐模型(指令遵循+结构化JSON输出):

  • mistral/mistral-small-24b --快速、准确地提取实体
  • qwen/qwen2.5-72b-instruct --以吞吐量为代价提高质量

MCP工具

工具 说明
search 语义向量搜索——返回带有分数的排序块
get_document 通过以下方式检索文档的所有块 doc_id
list_documents 列出所有索引文档
get_related 图形遍历——通过markdown超链接链接的文档
get_chunk_context 围绕搜索结果展开上下文(相邻块)

连接到克劳德桌面/克劳德代码

添加到MCP配置(claude_desktop_config.json 或 .claude/mcp.json):

{
  "mcpServers": {
    "graphrag": {
      "url": "http://localhost:8000/sse"
    }
  }
}

环境变量

看 .env.example 查看完整列表。 关键变量:

变量 默认值 描述
POSTGRES_PASSWORD (必填) PostgreSQL密码
EMBEDDING_MODEL BAAI/bge-m3 拥抱脸部模型ID
EMBEDDING_DEVICE cuda cuda 或 cpu
MCP_PORT 8000 MCP服务器端口
ENRICHER_BASE_URL http://localhost:4000/v1 OpenAI兼容推理端点
ENRICHER_MODEL mistral/mistral-small-24b 实体提取模型
SIMILAR_TO_THRESHOLD 0.82 SIMILAR_TO边的余弦相似性截止

图形模式

顶点标签

标签 描述
Document 每个索引标记文件一个顶点
Chunk 文档中每个标题部分一个顶点
Entity 由富集者提取的命名实体或概念

边缘标签

标签 来源→ 致 创建者 描述
HAS_CHUNK 文件→ 区块 观察者 文档拥有区块
NEXT_CHUNK Chunk→ Chunk 监视器 文档中的顺序
LINKS_TO 文件→ 文档 观察者 显式标记超链接
SIMILAR_TO Chunk↔ Chunk 富集器 语义相似度高于阈值
MENTIONS Chunk→ 实体 富集者 Chunk提到了这个实体/概念

嵌入模型

违约: BAAI/bge-m3 (1024种昏暗、多语言、100多种语言,包括德语)。

如果你改变 EMBEDDING_MODEL 对于具有不同输出维度的模型,更新 vector(1024) 在 docker/postgres/init/02_schema.sql 并相应地重新创建数据库卷。

预构建图像(GHCR)

每次推送时,图像都会发布到GitHub容器注册表 main:

ghcr.io/<owner>/graphrag-postgres:<tag>
ghcr.io/<owner>/graphrag-watcher:<tag>
ghcr.io/<owner>/graphrag-mcp:<tag>

集 GITHUB_REPOSITORY=<owner>/GraphRAG 在你的 .env.

发展

pip install -e ".[dev]"
pytest

许可证

麻省理工学院