三十八:GraphRAG¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484488&idx=1&sn=c4fb4d42527c5c5fcf96ac54abbf9675&chksm=f01eb731c7693e272fcff3f15d3b902515f833cc3b385c347a00a7d65da7589ad2a897c808ce#rd
1. 学习范围¶
本日主题是 GraphRAG,重点是建立知识图谱索引和全局检索。GraphRAG 是把图结构引入 RAG 的方法,用实体、关系、社区和摘要来增强传统基于 chunk/向量的检索。它尤其适合多实体、多关系、多跳推理和全局概览类问题。 本日覆盖: - GraphRAG 的动机和适用场景。
-
从文本到知识图谱索引的构建流程。
-
实体抽取、关系抽取、claim 抽取、实体消歧。
-
图构建、社区发现、社区摘要。
-
Local Search、Global Search、DRIFT Search 等检索思路。
-
GraphRAG 与普通 RAG、知识图谱问答、向量 RAG 的对比。
-
评估、成本、安全、更新和生产化问题。
2. 普通 RAG 的局限¶
普通 RAG 通常基于 chunk 向量检索:
它适合局部事实问答,但在以下场景容易困难: - 问题需要多个实体之间的关系。-
答案需要跨多个文档综合。
-
用户询问全局主题、趋势、社区或网络结构。
-
相关信息分散在很多 chunk 中。
-
top-k chunk 无法覆盖完整证据链。
-
语义相似并不等于关系相关。
GraphRAG 的目标是补充文本相似检索的不足,用图结构组织知识。
3. GraphRAG 的核心思想¶
GraphRAG 的核心是把文档中的实体和关系抽取出来,构建知识图谱,再基于图结构进行检索和生成。 高层流程:
Documents
-> text units
-> entity extraction
-> relationship extraction
-> graph construction
-> community detection
-> community reports / summaries
-> local/global search
-> answer
4. GraphRAG 与知识图谱问答¶
传统知识图谱问答通常依赖结构化三元组和查询语言,例如 SPARQL/Cypher。GraphRAG 更偏向把非结构化文本自动转成图索引,再用 LLM 进行检索、摘要和回答。 区别: - 知识图谱问答强调结构化事实和精确查询。
-
GraphRAG 强调从文本中自动构图,并结合 LLM 处理不完美图谱和自然语言问题。
-
GraphRAG 的图通常带有文本证据和社区摘要。
GraphRAG 不等于完全可靠的数据库查询,它仍然需要处理抽取错误和生成忠实性。
5. 文本单元 Text Units¶
GraphRAG 构建通常先把文档切成 text units。text unit 是抽取实体和关系的基本输入。 与普通 RAG chunk 不同,text unit 不一定直接作为最终检索上下文,而是用于图构建。 text unit 应保留: - 文档 ID。
-
标题。
-
章节路径。
-
段落位置。
-
原文。
-
时间和来源。
-
权限信息。
这些信息会作为图节点、边、claim 和引用的来源。
6. 实体抽取¶
实体抽取从 text units 中识别重要对象,例如: - 人物。
-
组织。
-
产品。
-
项目。
-
技术。
-
地点。
-
事件。
-
概念。
LLM 可以根据 schema 抽取实体:
Entity {
name: string
type: Person | Organization | Product | Concept | Event | ...
description: string
source_text_unit_ids: [...]
}
7. 关系抽取¶
关系抽取识别实体之间的连接,例如:
(Microsoft, develops, GraphRAG)
(GraphRAG, uses, community summaries)
(Project A, depends_on, Service B)
-
target entity。
-
relation type。
-
relation description。
-
confidence。
-
source evidence。
关系可以是有向或无向,取决于语义。关系抽取要保留原文证据,否则后续难以验证。
8. Claim 抽取¶
有些 GraphRAG 系统还会抽取 claim,即可验证的事实陈述。例如:
claim 有助于: - 支持答案证据。-
做事实核查。
-
构建实体描述。
-
处理多文档冲突。
claim 应关联来源 text unit 和时间信息,避免过时或无证据事实进入答案。
9. 实体消歧与归一化¶
实体抽取后需要解决同名和异名问题: - “MSFT”和“Microsoft”是否同一实体。
-
“GraphRAG”和“Microsoft GraphRAG”是否同一实体。
-
“Apple”是公司还是水果。
实体消歧方法: - 字符串规则。
-
embedding 相似度。
-
LLM 判断。
-
类型和上下文约束。
-
人工校验高频实体。
消歧错误会导致图谱断裂或错误合并,是 GraphRAG 的关键难点。
10. 图构建¶
图构建把实体作为节点、关系作为边:
节点可带属性: - name。-
type。
-
description。
-
source IDs。
-
embedding。
-
community ID。
边可带属性: - relation type。
-
description。
-
weight。
-
source IDs。
-
confidence。
图构建后可以结合向量索引、全文索引和图数据库。
11. 社区发现¶
社区发现把图划分为若干结构紧密的子图。常见算法包括 Leiden、Louvain 等。 社区的意义: - 表示一组关系紧密的实体。
-
对应一个主题、项目、组织或事件簇。
-
支持全局问题的分层摘要。
社区层级可以是多级的:
层级社区有助于从局部到全局回答问题。12. 社区摘要 Community Reports¶
GraphRAG 的一个关键机制是为社区生成摘要或报告。社区报告通常包含: - 社区主题。
-
关键实体。
-
关键关系。
-
重要 claim。
-
来源证据。
-
风险或不确定性。
社区摘要用于回答全局问题,例如:
社区摘要降低了直接遍历大量 chunk 的成本。13. Local Search¶
Local Search 面向与特定实体或局部关系相关的问题。流程通常是:
query -> identify entities
entities -> retrieve neighboring nodes/edges/text units
assemble local context
LLM answer
-
某两个实体之间的联系。
-
局部多跳问题。
-
基于具体对象的问答。
Local Search 重点是从实体出发扩展邻域。
14. Global Search¶
Global Search 面向全局性、总结性、主题性问题。它通常利用社区摘要,而不是只检索局部 chunk。 流程可以概括为:
query -> select relevant community reports
community reports -> map partial answers
partial answers -> reduce / synthesize final answer
-
跨文档趋势。
-
社区级风险。
-
“这个语料库主要讲什么?”
-
“不同部门关注的共同问题是什么?”
Global Search 是 GraphRAG 相比普通 top-k RAG 的重要优势。
15. DRIFT Search¶
DRIFT Search 可以理解为结合全局社区信息和局部实体信息的搜索方式。它试图在全局摘要和局部证据之间取得平衡,既不只看社区概览,也不只看局部邻域。 适合: - 需要先理解主题背景,再深入局部证据的问题。
-
全局问题中包含具体实体。
-
局部问题需要社区上下文。
不同实现命名和细节可能变化,但核心思想是多粒度检索。
16. GraphRAG 与 Vector RAG 对比¶
Vector RAG: - 检索单元通常是 chunk。
-
基于语义相似度。
-
工程简单,成本较低。
-
擅长局部事实问答。
-
对全局关系和多跳问题较弱。
GraphRAG: - 检索单元包括实体、关系、社区、摘要和原文。
-
基于图结构和语义结合。
-
构建成本高。
-
擅长多实体、多跳、全局总结。
-
受抽取质量影响大。
二者不是替代关系,常常组合使用。
17. GraphRAG 的索引存储¶
GraphRAG 可能需要多种存储: - 文本存储:保存原始 text units。
-
图数据库:保存实体和关系。
-
向量索引:检索实体描述、社区摘要和原文片段。
-
全文索引:关键词搜索。
-
对象存储:保存报告、日志和中间结果。
生产系统要保证 ID 一致:
ID 和来源链路是引用和审计的基础。18. GraphRAG 的评估¶
GraphRAG 评估比普通 RAG 更复杂。 图构建评估: - entity precision/recall。
-
relationship precision/recall。
-
entity resolution accuracy。
-
claim faithfulness。
检索评估: - entity hit rate。
-
path recall。
-
community relevance。
-
evidence coverage。
生成评估: - answer correctness。
-
faithfulness。
-
citation accuracy。
-
global coverage。
-
synthesis quality。
全局问题很难用单一标准答案评估,通常需要人工或 LLM judge 辅助,但要设计 rubric。
19. 成本与更新¶
GraphRAG 成本较高: - LLM 抽取实体和关系。
-
实体消歧。
-
社区发现。
-
社区摘要生成。
-
图谱更新和重算。
更新挑战: - 新文档可能引入新实体。
-
旧关系可能过期。
-
社区结构可能变化。
-
社区报告需要重写。
-
权限和版本要同步。
生产中常用增量更新加周期性全量重建。
20. 安全与权限¶
GraphRAG 中权限更复杂。即使用户无权访问某个文档,图中实体关系或社区摘要也可能泄露敏感信息。 权限控制需要覆盖: - 原始 text units。
-
entity descriptions。
-
relationships。
-
claims。
-
community reports。
-
search results。
-
final citations。
不能只在最终回答阶段过滤。权限应贯穿索引构建、检索和生成。
21. 适用场景¶
适合 GraphRAG 的场景: - 企业知识网络。
-
项目依赖和组织关系。
-
安全情报分析。
-
供应链和风险网络。
-
法律案件关系。
-
科研论文主题网络。
-
需要全局总结的文档集合。
-
多跳问答。
不一定适合: - 简单 FAQ。
-
小规模短文档。
-
低延迟强约束场景。
-
实体关系不重要的普通问答。
-
数据噪声大且无法校验抽取结果的场景。
22. 常见失败模式¶
GraphRAG 常见问题: - 实体漏抽。
-
实体误合并。
-
关系抽取错误。
-
社区划分不合理。
-
社区摘要幻觉。
-
图谱更新不及时。
-
全局搜索过度概括。
-
局部搜索漏掉跨社区证据。
-
权限泄露。
-
生成答案引用不到原文。
排查时应区分:抽取失败、图结构失败、检索失败、摘要失败、生成失败。
23. 面试表达要点¶
GraphRAG 高分表达:
普通 RAG 主要基于 chunk 相似度,适合局部事实问答,但对多实体关系、多跳推理和全局概览问题较弱。
GraphRAG 把文档抽取成实体、关系和 claim,构建知识图谱,再通过社区发现和社区摘要支持 global search,通过实体邻域支持 local search。
它的优势是能利用图结构组织跨文档关系,缺点是索引构建成本高、抽取和消歧错误会传播、权限和更新更复杂。
实际系统常把 GraphRAG 与向量检索、BM25、rerank 和原文引用结合,而不是完全替代普通 RAG。
24. 核心总结¶
GraphRAG 的核心链路:
文档 -> text units -> 实体/关系/claim 抽取
-> 实体消歧 -> 图构建 -> 社区发现 -> 社区报告
-> local/global search -> LLM answer with evidence
-
全局检索依赖社区摘要和 map-reduce 式综合。
-
局部检索依赖实体识别和邻域扩展。
-
图结构提升多跳和全局问题能力。
-
抽取质量、权限、更新和评估是生产难点。
25. 参考资料¶
-
Microsoft GraphRAG: https://microsoft.github.io/graphrag/
-
GraphRAG paper: https://arxiv.org/pdf/2404.16130
-
GraphRAG overview and examples: https://blog.csdn.net/m0_56255097/article/details/144033101
-
Zilliz GraphRAG article: https://xie.infoq.cn/article/18ca7cd7702fc0f03baa02b01
-
Microsoft GraphRAG GitHub: https://github.com/microsoft/graphrag
预览时标签不可点<div class="