图检索增强生成
基于图的检索增强生成系统 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//graphrag-postgres:
ghcr.io//graphrag-watcher:
ghcr.io//graphrag-mcp:集 GITHUB_REPOSITORY=/GraphRAG 在你的 .env.
发展
pip install -e ".[dev]"
pytest许可证
麻省理工学院
