GraphRAG 深度解析:从 RAG 到知识图谱增强检索
本文系统梳理 GraphRAG 的核心原理、与传统 RAG / 知识图谱 / 图数据库的区别与联系,并深入剖析分层社区检测机制与 LightRAG 的设计取舍。
目录
一、四个概念速览
在深入之前,先厘清四个常被混淆的概念:
| 概念 | 本质定位 | 核心功能 |
|---|---|---|
| RAG | AI 应用架构模式 | 检索外部知识增强 LLM 生成 |
| 知识图谱 | 知识表示方法 | 以图结构组织实体与关系 |
| 图数据库 | 存储基础设施 | 高效存储和查询图结构数据 |
| GraphRAG | 进阶 RAG 范式 | 在 RAG 管道中引入图结构进行关系感知检索 |
三者的层级关系:
图数据库(基础设施层)
└── 知识图谱(数据组织方法,运行在图数据库上)
└── GraphRAG(AI 应用架构,以知识图谱为检索引擎)
二、GraphRAG 是什么
GraphRAG(Graph Retrieval-Augmented Generation)由微软研究院于 2024 年 4 月在论文 “From Local to Global: A Graph RAG Approach to Query-Focused Summarization” 中正式提出,并于同年 7 月开源,目前已超 31K Stars。
传统 RAG 的瓶颈
传统 RAG 把文档切块后做向量检索,本质是找相似文本片段。这在单跳问答场景下表现良好,但面对以下场景时明显力不从心:
- 多跳推理:答案需要跨多个文档片段推导
- 全局总结:需要理解整个语料库的宏观主题
- 关系追踪:需要明确追踪"A 通过 B 影响了 C"这类逻辑链
GraphRAG 的核心思想
在入库阶段就用 LLM 抽取实体与关系,构建全局知识图谱,让检索从"找相似"升级为"遍历关系网络"。
完整工作流程
索引阶段(Indexing):
原始文档
→ ① LLM 抽取实体 + 关系(三元组)
→ ② 构建全局知识图谱(节点 = 实体,边 = 关系)
→ ③ Leiden 算法做社区检测(分层聚类)
→ ④ LLM 对每个社区生成层级摘要
查询阶段(Query):
| 查询模式 | 适用场景 | 工作原理 |
|---|---|---|
| 全局搜索(Global Search) | 宏观总结性问题 | 遍历社区摘要,综合生成答案 |
| 本地搜索(Local Search) | 具体实体相关问题 | 定位实体节点,结合邻居关系检索 |
| 漂移搜索(Drift Search) | 多跳推理问题 | 从起点实体沿关系链探索 |
GraphRAG vs 传统 RAG
| 维度 | 传统 RAG | GraphRAG |
|---|---|---|
| 数据结构 | 平坦向量索引(文本块) | 知识图谱(节点 + 边) |
| 检索方式 | 语义相似度匹配 | 图遍历 + 语义检索(混合) |
| 上下文类型 | 孤立的文本片段 | 连接的关系网络 |
| 推理能力 | 单跳,逻辑链条易断裂 | 多跳,跨文档关联 |
| 全局理解 | 弱 | 强(社区摘要提供全局视野) |
| 构建成本 | 低(切块 + 向量化) | 高(LLM 实体抽取,数倍成本) |
| 更新维护 | 简单(增量追加) | 复杂(图谱更新、社区重算) |
学术评测结论(arXiv 2502.11371):RAG 在单跳问题和细粒度细节检索上更优;GraphRAG 在多跳推理和全局总结性问题上更优。两者互补,而非替代关系。
三、实体抽取:用的是什么模型?
这是一个常见的误区——GraphRAG 的实体抽取用的是生成式 LLM,而不是 Embedding 模型。
两类模型的本质差异
| Embedding 模型 | 生成式 LLM | |
|---|---|---|
| 输出形式 | 向量数字 [0.12, -0.87, ...] | 自然语言文本 |
| 能否识别"谁 - 关系 - 谁" | ❌ | ✅ |
| 成本 | 极低 | 较高 |
Embedding 模型本质上是个压缩机,它能衡量语义相似度,但无法"生成"出"A 和 B 之间存在 X 关系"这样的结构化信息。
实体抽取的质量保障机制
裸调 LLM 的输出不稳定,GraphRAG 通过以下几层手段约束:
① 强结构化 Prompt + JSON Schema 约束
你是一个知识图谱构建助手。
请从以下文本中提取所有实体和关系。
输出格式必须严格遵守以下 JSON Schema:
{
"entities": [
{"name": "实体名", "type": "PERSON|ORG|LOCATION|EVENT|CONCEPT", "description": "简短描述"}
],
"relationships": [
{"source": "实体A", "target": "实体B", "relation": "关系类型", "description": "关系说明"}
]
}
文本内容:[TEXT_CHUNK]
现代 LLM 支持 response_format: { type: "json_object" } 或 JSON Schema 约束,强制输出合法结构。
② 多次抽取 + 合并去重(Gleaning)
对同一个 chunk 抽取多次(默认 1~3 次),合并结果解决"漏抽"问题。
③ 实体消歧(Entity Resolution)
"苹果公司"与"Apple Inc."可能被抽取为不同实体,后处理步骤通过 Embedding 相似度聚合同义实体,再由 LLM 判断是否为同一个。
两类模型的分工
在 GraphRAG 完整管道中,两类模型各司其职:
原始文档
→ 生成式 LLM:抽取实体和关系(理解内容)
→ 构建知识图谱
→ Embedding 模型:对节点和社区摘要做向量化(支持混合检索)
→ 查询时:图遍历 + 向量检索混合
四、查询时的混合检索机制
以 Local Search(本地搜索) 为例,走一遍完整链路:
用户问:"爱因斯坦和玻尔在量子力学上的争论涉及哪些核心实验?"
Step 1:实体识别
LLM 解析 Query,识别关键实体:爱因斯坦、玻尔、量子力学
Step 2:向量检索(找入口节点)
对关键实体做 Embedding,在图谱节点向量索引里匹配
→ 命中节点:Einstein(node_001)、Bohr(node_002)
Step 3:图遍历(从节点出发扩展子图)
以 Einstein、Bohr 为起点,执行 N-hop 图遍历:
Einstein --[参与]--> EPR悖论实验
Einstein --[反对]--> 哥本哈根诠释
Bohr --[提出]--> 哥本哈根诠释
Bohr --[辩论]--> Einstein
EPR悖论 --[关联]--> 双缝实验
EPR悖论 --[引发]--> 贝尔不等式
图数据库执行 Cypher/GQL 查询,返回子图
Step 4:组合 Context
Context = [图谱子图的结构化关系]
+ [相关社区摘要]
+ [向量检索召回的原始文本块]
Step 5:LLM 综合生成最终答案
包含 EPR 实验、双缝实验等的完整答案
两种检索的分工
| 向量检索 | 图遍历 | |
|---|---|---|
| 作用 | 找"入口节点"(语义相似的起点) | 从入口出发扩展关联上下文 |
| 解决 | “找什么” | “怎么关联” |
| 弱点 | 找不到逻辑连接 | 找不到入口(冷启动) |
| 类比 | 搜索引擎 | 顺着链接深挖 |
两者缺一不可:没有向量检索,不知道从哪个节点开始;没有图遍历,只能找到相似片段,无法追踪关系链。
五、分层社区检测:GraphRAG 的核心设计
解决的根本矛盾
LLM 的上下文窗口有限(如 128K Token),但语料库可以有几千万 Token。如何在回答"整个文档库讲了什么"这类宏观问题时,不把所有节点都塞进上下文?
分层结构示意
Leiden 算法对知识图谱进行层级聚类,生成"社区摘要金字塔":
Level 3(根节点):整个语料库的总摘要
▲
Level 2(大社区):[现代物理学] [经典物理学]
▲ LLM 为每个社区生成摘要
Level 1(小社区):[量子力学] [相对论] [核物理]
▲ LLM 为每个社区生成摘要
Level 0(原始实体):爱因斯坦, 玻尔, EPR实验, 量子纠缠…
最贴切的类比:地图缩放层级
这个设计思路与 Google Maps 的 Zoom Level 如出一辙:
卫星视角(Zoom 1) → Level 3 摘要:"这个语料库讲的是现代物理学"
国家视角(Zoom 3) → Level 2 摘要:"量子力学方向 / 相对论方向"
城市视角(Zoom 5) → Level 1 摘要:"EPR实验相关研究群"
街道视角(Zoom 8) → Level 0 实体:爱因斯坦、玻尔、EPR实验…
地图不会在你看世界地图时加载每一条街道,GraphRAG 也不会在回答宏观问题时加载每个实体节点。
按问题粒度自动命中对应层级
问题粒度 命中的层级
│
├─ "整个文档库说了什么?" → Level 2~3 摘要,LLM 一次回答
│
├─ "量子力学领域的主要争论?"→ Level 1 摘要,缩小范围
│
└─ "爱因斯坦和玻尔争了什么?"→ Level 0 实体 + 图遍历
分层社区的本质是一套预计算好的多粒度摘要索引,让 LLM 在任何粒度的问题上都只需要加载"刚好够用"的上下文。
六、为什么增量更新这么难?
问题根源:Leiden 是全局算法
Leiden 算法通过最大化图的模块度(Modularity)来划分社区,这是一个全局最优化计算——它的结果依赖于整张图的结构。
当新文档加入,新实体被追加到图谱后,问题随之出现:
原图谱(已建好3层社区):
社区A = {量子力学相关:爱因斯坦, 玻尔, EPR实验}
社区B = {相对论相关:时空弯曲, 光速, 引力波}
加入新文档,抽取出:霍金, 黑洞辐射, 信息悖论
新节点与多个旧社区都有关联:
霍金 ←→ 爱因斯坦(社区A)
霍金 ←→ 引力波(社区B)
黑洞辐射 跨越 社区A 和 社区B 的边界
此时,旧社区的划分方案不再是最优解,旧社区摘要也因覆盖的实体变化而过时,必须重新运行 Leiden + 重新生成所有受影响的摘要。
类比:把公司所有员工按项目分成 10 个小组,然后来了 20 个新员工。你不能简单地"把新人随便塞进某个组",因为最优的分组方案整体都变了——可能需要重新划分成 12 个组,原来的某些组也要拆分重组。
七、LightRAG:工程化的取舍
LightRAG 由香港大学团队于 2024 年底提出,目标是用更低成本实现 GraphRAG 的核心能力。
核心差异:去掉社区层级
GraphRAG 的图谱: LightRAG 的图谱:
[摘要层 3]
[摘要层 2] 就是一张平图
[摘要层 1] 节点 + 关系
[原始实体层] 没有层级
LightRAG 没有社区层级,因此新文档加入时只需追加实体和关系,无需重算任何层级结构。
LightRAG 的双层检索
LightRAG 处理不同粒度问题的方式,不依赖预计算摘要,而是:
查询
│
├──► 低层检索(Low-level)
│ 找具体实体和直接关系 → 适合精确事实查询
│
└──► 高层检索(High-level)
找抽象概念和全局主题 → 适合宏观总结
(通过向量聚合实现,非预计算摘要)
两路结果融合 → LLM 生成答案
全面对比
| 维度 | 微软 GraphRAG | LightRAG |
|---|---|---|
| 全局总结能力 | ✅ 极强(预计算社区摘要) | ⚠️ 较弱(向量聚合替代) |
| 增量更新 | ❌ 代价高(需重建层级) | ✅ 简单追加 |
| 初始索引成本 | ❌ 极高 | ✅ 显著降低(约 1/5 ~ 1/10) |
| 多跳推理 | ✅ 支持 | ✅ 支持 |
| 适合语料 | 静态、大型、需宏观洞察 | 动态更新、中小规模 |
本质上是一个设计取舍:
GraphRAG 用"预计算层级摘要"换取了强大的全局理解能力,代价是更新灵活性差;LightRAG 放弃层级结构换来了轻量和灵活,代价是全局总结能力稍弱。
八、选型指南
适合 GraphRAG 的场景
- 法律文档发现(判例引用链、法规交叉引用)
- 金融风险分析(企业关联关系、供应链路径)
- 科学文献研究(跨论文多跳引用推理)
- 语料库静态且体量大,需要强全局总结能力
- 需要 3 跳以上逻辑推理的复杂问题
适合 LightRAG 的场景
- 企业知识库(文档持续更新)
- 中小规模语料(< 百万节点量级)
- 对索引成本敏感
- 动态内容为主,实时性要求较高
坚持传统 RAG 的场景
- 客服 FAQ、文档检索、单跳事实查询
- 文档规模极小(< 50 页,直接塞入 context 更高效)
- 失败案例主要是检索精度或分块碎片化问题(优化分块策略比引入图谱更有效)
2026 年最佳实践:混合架构
用户查询
│
▼
查询路由器(Query Router)
│
├──► 简单问答 → 传统向量 RAG(速度快,成本低)
│
├──► 关系推理 → GraphRAG / LightRAG 图遍历
│
└──► 全局总结 → GraphRAG 社区摘要
从向量 RAG 开始,监测你的失败案例。如果多跳查询在关系密集型内容上持续失败,再引入 GraphRAG;如果失败更多是检索精度问题,优化分块和混合搜索即可——不需要知识图谱。
参考资料
- Microsoft Research. From Local to Global: A Graph RAG Approach to Query-Focused Summarization (2024). arxiv.org/abs/2404.16130
- Edge et al. GraphRAG: Unlocking LLM discovery on narrative private data (2024). microsoft.github.io/graphrag
- RAG vs. GraphRAG: A Systematic Evaluation and Key Insights (2025). arxiv.org/abs/2502.11371
- IBM Think. 什么是 GraphRAG? ibm.com/cn-zh/think/topics/graphrag
- Memgraph. RAG vs GraphRAG: Shared Goal & Key Differences memgraph.com/blog/rag-vs-graphrag
更多推荐



所有评论(0)