Skip to content

GraphRAG

GraphRAG(Graph-based Retrieval-Augmented Generation)是微软研究院于 2024 年提出的检索增强生成范式,通过构建知识图谱和分层社区摘要,解决传统 RAG 在处理全局性、跨文档综合问题时的局限。

核心问题

传统 Naive RAG 基于向量相似度检索文本片段,在回答局部问题(如"某公司的 CEO 是谁")时表现良好,但面对全局问题(如"这份文档集中的主要主题是什么""这些研究之间的共同趋势")时效果不佳——因为全局问题需要综合整个语料库的语义结构,而非检索几个相关片段。

核心原理

GraphRAG 的核心思想是:在索引阶段预计算分层语义摘要,使全局推理在查询阶段变得可行

索引阶段(Build-Time)

原始文档

文本分块(带重叠窗口)

实体抽取(LLM-based NER)

关系抽取(实体对 + 关系描述)

知识图谱构建(实体为节点,关系为边)

社区发现(Leiden 算法)

分层 Map-Reduce 摘要

GraphRAG 索引(持久化存储)

1. 实体与关系抽取

使用 LLM 从文本块中抽取结构化信息:

  • 实体:名称、类型、描述
  • 关系:源实体、目标实体、关系描述、权重
  • 声明/论断(可选):用于事实核查的细粒度陈述

抽取在重叠文本窗口上执行,以提高召回率并减少边界效应。

2. 知识图谱构建

将抽取结果组织为属性图:

  • 节点 = 实体(带类型和描述)
  • 边 = 关系(带描述和权重)
  • 结果是一个无向属性图,捕捉语料库的语义结构

3. 社区发现(Leiden 算法)

使用 Leiden 算法(Traag et al., 2018)对知识图谱进行层次化社区检测:

  • 相比 Louvain 算法,Leiden 保证社区内部连通性更好,收敛更快
  • 生成多级社区层次结构(Level 0 根级 → Level 1 → Level 2 叶子社区)
  • 分辨率参数控制社区粒度

4. Map-Reduce 分层摘要

  • Map 阶段:对每个叶子社区,使用 LLM 生成社区级摘要
  • Reduce 阶段:迭代地将下层社区摘要汇总为上层摘要
  • 结果:在多个抽象层级上预计算语义摘要,形成"语义金字塔"

查询阶段(Run-Time)

GraphRAG 支持两种查询模式,分别对应不同类型的问题:

适用于需要综合整个语料库的全局性问题:

  • 根据问题广度选择适当的社区层级
  • 检索相关社区摘要
  • 使用 Map-Reduce 生成中间答案
  • 综合为最终响应

优势:能回答"主要主题""共同趋势"等 holistic 问题
代价:延迟较高,Token 消耗大

适用于关于特定实体的具体事实问题:

  • 类似 Naive RAG,但利用知识图谱提供结构化上下文
  • 检索:相关实体、其关系、关联文本块
  • 生成精确回答

优势:延迟低,回答精确
局限:仅限于局部上下文

GraphRAG vs. Naive RAG

维度Naive RAGGraphRAG
索引方式文本块 + 向量嵌入知识图谱 + 社区分层摘要
检索机制向量语义相似度图遍历 + 结构化检索
全局问题差(无综合机制)优秀(预计算层次摘要)
局部问题良好良好(带图结构上下文)
可解释性低(哪些文本块?)高(哪些实体/社区?)
延迟较高(尤其全局搜索)
Token 成本较低较高(索引 + 全局查询)
部署复杂度简单复杂(多阶段流水线)

适用场景

选择 GraphRAG

  • 需要回答关于整个数据集的全局性问题
  • 数据集中实体关系丰富(如学术论文、法律文档、医疗记录)
  • 需要可解释的源追溯
  • 可接受较高的索引成本

选择 Naive RAG

  • 简单事实查找
  • 超大规模检索(百万级文档)
  • 低延迟要求
  • 计算预算有限

开源实现

microsoft/graphrag

  • 仓库https://github.com/microsoft/graphrag
  • 许可:MIT
  • 语言:Python
  • 核心模块
    • graphrag.index:索引流水线
    • graphrag.query:本地/全局查询引擎
    • graphrag.config:YAML 配置管理
    • graphrag.llm:LLM 提供商抽象(OpenAI、Azure OpenAI 等)

其他实现与集成

  • LangChain:提供 GraphRAG 集成组件
  • Neo4j:图数据库原生支持 GraphRAG 架构
  • LlamaIndex:支持知识图谱索引和查询

关键论文

论文作者年份贡献
"From Local to Global: A Graph RAG Approach to Query-Focused Summarization"Edge et al., Microsoft Research2024GraphRAG 原始论文,arXiv:2404.16130
"From Louvain to Leiden"Traag et al.2018Leiden 社区检测算法

局限与挑战

  1. 索引成本高:需要大量 LLM 调用进行实体抽取和摘要生成
  2. 图谱质量依赖抽取精度:实体/关系抽取错误会级联传播
  3. 动态数据更新:增量更新知识图谱比重建向量索引更复杂
  4. 超大规模扩展:十亿级文档的图谱构建和查询仍是开放问题
  5. 多语言支持:跨语言实体对齐和关系抽取的准确性

相关页面

Sources

AI Knowledge Base — 持续积累