Microsoft GraphRAG 基于知识图谱的 RAG 总结
1. 一句话理解
Microsoft GraphRAG 是一种把文档先转换成知识图谱,再基于图谱中的实体、关系和社区进行检索与回答的 RAG 方案。它擅长处理需要跨文档连接信息、全局综合理解的复杂查询。
2. 解决什么痛点?
传统 RAG 把文档切成 chunk 后做向量检索,擅长回答”某段文字说了什么”,但不擅长:
- 连接分散信息:比如”Elon Musk 创立/收购了哪些公司?它们之间有什么关系?”
- 全局理解:比如”这篇文章的主题是什么?整体趋势如何?”
- 复杂综合推理:需要把多个来源的信息拼凑起来
GraphRAG 通过知识图谱把实体和关系显式建模,解决这些问题。
3. 索引阶段流程
原始文本
↓
Text Chunking(文本切分)
↓
Element Extraction(LLM 提取实体和关系)
↓
Graph Construction(构建知识图谱)
↓
Community Detection(发现社区/簇)
↓
Community Summarization(为每个社区生成摘要)
各步骤说明
| 步骤 | 作用 |
|---|---|
| Chunking | 把长文本切分成 manageable 的小块 |
| Element Extraction | LLM 识别实体(如 Elon Musk、Tesla)和关系(如 founded、CEO of) |
| Graph Construction | 实体作为节点,关系作为边,构建知识图谱 |
| Community Detection | 用 Leiden 等算法发现紧密相关的节点簇 |
| Community Summarization | 为每个社区生成摘要,供全局搜索使用 |
4. 查询阶段:两种搜索模式
4.1 Local Search(局部搜索)
针对具体实体的查询,展开该实体的邻居节点和相关概念。
示例:
“What and how many companies and subsidiaries founded by Elon Musk?”
4.2 Global Search(全局搜索)
针对整体语料的查询,综合多个社区摘要给出宏观回答。
示例:
“What are the major accomplishments of Elon Musk?”
5. 代码实现要点
这个 notebook 使用 GraphRAG 官方 CLI 工具:
# 初始化配置
python -m graphrag.index --init --root data/graphrag
# 建索引
python -m graphrag.index --root ./data/graphrag
# 查询
python -m graphrag.query --root ./data/graphrag --method local "query"
配置
- LLM:
gpt-4o - Embedding:
text-embedding-3-large - 支持 Azure OpenAI 或 OpenAI
注意:按照
.claude.md,这个 notebook 没有被迁移到阿里云百炼,因为它明确依赖 Azure OpenAI/OpenAI。
数据源
notebook 用 BeautifulSoup 抓取 Wikipedia 上 Elon Musk 的词条,保存为 data/elon.md,再喂给 GraphRAG 建索引。
6. 与传统 RAG 的对比
| 传统 RAG | GraphRAG | |
|---|---|---|
| 检索单元 | 文本 chunk | 实体、关系、社区 |
| 擅长问题 | “某段文字说了什么” | “这些实体有什么关系” |
| 索引成本 | 低(embedding 一次) | 高(大量 LLM 调用) |
| 查询成本 | 低 | 中到高 |
| 全局理解 | 弱 | 强 |
| 可解释性 | 低(黑盒相似度) | 较高(可追溯关系) |
7. 主要局限
- 索引成本极高:每个 chunk 都要调 LLM 提取实体和关系;
- 对 LLM 质量敏感:实体关系提取错误会传播到整个图谱;
- 不适合简单事实查询:如”BLEU 是多少”用传统 RAG 更快更便宜;
- 图规模管理:文档量大时图谱可能很庞大,成本上升。
8. 适用场景
- 人物关系网分析
- 企业架构与股权关系
- 医学文献中的疾病-药物-症状关系
- 法律案例中的主体关系
- 任何实体关系密集、需要跨文档综合的语料
9. 核心 Insight
GraphRAG 的本质是把”语义检索”升级成”关系检索”:
- 向量 RAG 回答”哪段文字和我的问题语义最像”;
- GraphRAG 回答”哪些实体通过什么关系连接在一起”。
10. 与 RAPTOR 的对比
- RAPTOR:用树的层级抽象解决”宏观 vs 细节”的问题;
- GraphRAG:用图的节点关系解决”连接 vs 综合”的问题。
两者甚至可以结合:先用 GraphRAG 找到相关实体和社区,再在 RAPTOR 树中定位这些实体的详细描述。
11. 相关技术
- [[raptor-summary]]:用主题树组织文档
- [[proposition-chunking-summary]]:把文档拆成原子化事实
- [[query-transformations-summary]]:改写问题提高检索匹配度
- [[colpali-multimodal-rag-qa]]:多模态图像检索
Enjoy Reading This Article?
Here are some more articles you might like to read next:
- Google Gemini updates: Flash 1.5, Gemma 2 and Project Astra
- Displaying External Posts on Your al-folio Blog
- Graph RAG with Milvus —— 纯向量库造图的多跳推理
- Hierarchical Indices 层级索引 —— 先粗后细的两级检索
- HyDE 与 HyPE —— 假设检索技术的两个方向
- 二叉树刷题总结
- RAG 技术体系化分类——从 Pipeline 阶段到失败模式
- MemoRAG 记忆增强型 RAG 总结
- Multimodal RAG with Captioning 图像描述型多模态 RAG 总结
- 掌握 ColPali 多模态 RAG 需要回答的 8 个问题