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. 主要局限

  1. 索引成本极高:每个 chunk 都要调 LLM 提取实体和关系;
  2. 对 LLM 质量敏感:实体关系提取错误会传播到整个图谱;
  3. 不适合简单事实查询:如”BLEU 是多少”用传统 RAG 更快更便宜;
  4. 图规模管理:文档量大时图谱可能很庞大,成本上升。

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: