Appearance
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 支持两种查询模式,分别对应不同类型的问题:
全局搜索(Global Search)
适用于需要综合整个语料库的全局性问题:
- 根据问题广度选择适当的社区层级
- 检索相关社区摘要
- 使用 Map-Reduce 生成中间答案
- 综合为最终响应
优势:能回答"主要主题""共同趋势"等 holistic 问题
代价:延迟较高,Token 消耗大
局部搜索(Local Search)
适用于关于特定实体的具体事实问题:
- 类似 Naive RAG,但利用知识图谱提供结构化上下文
- 检索:相关实体、其关系、关联文本块
- 生成精确回答
优势:延迟低,回答精确
局限:仅限于局部上下文
GraphRAG vs. Naive RAG
| 维度 | Naive RAG | GraphRAG |
|---|---|---|
| 索引方式 | 文本块 + 向量嵌入 | 知识图谱 + 社区分层摘要 |
| 检索机制 | 向量语义相似度 | 图遍历 + 结构化检索 |
| 全局问题 | 差(无综合机制) | 优秀(预计算层次摘要) |
| 局部问题 | 良好 | 良好(带图结构上下文) |
| 可解释性 | 低(哪些文本块?) | 高(哪些实体/社区?) |
| 延迟 | 低 | 较高(尤其全局搜索) |
| 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 Research | 2024 | GraphRAG 原始论文,arXiv:2404.16130 |
| "From Louvain to Leiden" | Traag et al. | 2018 | Leiden 社区检测算法 |
局限与挑战
- 索引成本高:需要大量 LLM 调用进行实体抽取和摘要生成
- 图谱质量依赖抽取精度:实体/关系抽取错误会级联传播
- 动态数据更新:增量更新知识图谱比重建向量索引更复杂
- 超大规模扩展:十亿级文档的图谱构建和查询仍是开放问题
- 多语言支持:跨语言实体对齐和关系抽取的准确性
相关页面
- Retrieval Augmented Generation — 传统 RAG 技术的基础概念
- Vector Databases — RAG 系统的向量存储层
- Semantic Search — 基于向量表示的语义检索
- Embedding Models / Vector Representations — 文本嵌入与向量表示技术
- LLM Wiki — 基于 LLM 的持久化知识库模式
- AI Agents — 结合知识检索的 AI 系统形态
Sources
- Edge, D. et al. "From Local to Global: A Graph RAG Approach to Query-Focused Summarization." arXiv:2404.16130, 2024. https://arxiv.org/abs/2404.16130
- Microsoft Research Blog. "GraphRAG: Unlocking LLM discovery on narrative private data." https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
- Microsoft GraphRAG Documentation. https://microsoft.github.io/graphrag/
- Traag, V.A. et al. "From Louvain to Leiden: guaranteeing well-connected communities." Scientific Reports, 2019.
- Neo4j. "GraphRAG Architecture." https://neo4j.com/blog/development/graphrag-architecture/
- LangChain. "GraphRAG Explained." https://blog.langchain.dev/graphrag-explained/