跳转至

三十八: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 的对比。

  • 评估、成本、安全、更新和生产化问题。

img

2. 普通 RAG 的局限

普通 RAG 通常基于 chunk 向量检索:

query -> embedding search -> top-k chunks -> LLM answer
它适合局部事实问答,但在以下场景容易困难: - 问题需要多个实体之间的关系。

  • 答案需要跨多个文档综合。

  • 用户询问全局主题、趋势、社区或网络结构。

  • 相关信息分散在很多 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
图中的节点通常是实体,边表示实体之间的关系。社区表示实体和关系形成的局部主题簇。社区摘要帮助回答全局问题。 img

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)
关系字段可以包括: - source entity。

  • target entity。

  • relation type。

  • relation description。

  • confidence。

  • source evidence。

关系可以是有向或无向,取决于语义。关系抽取要保留原文证据,否则后续难以验证。

8. Claim 抽取

有些 GraphRAG 系统还会抽取 claim,即可验证的事实陈述。例如:

GraphRAG uses community summaries for global search.
claim 有助于: - 支持答案证据。

  • 做事实核查。

  • 构建实体描述。

  • 处理多文档冲突。

claim 应关联来源 text unit 和时间信息,避免过时或无证据事实进入答案。

9. 实体消歧与归一化

实体抽取后需要解决同名和异名问题: - “MSFT”和“Microsoft”是否同一实体。

  • “GraphRAG”和“Microsoft GraphRAG”是否同一实体。

  • “Apple”是公司还是水果。

实体消歧方法: - 字符串规则。

  • embedding 相似度。

  • LLM 判断。

  • 类型和上下文约束。

  • 人工校验高频实体。

消歧错误会导致图谱断裂或错误合并,是 GraphRAG 的关键难点。

10. 图构建

图构建把实体作为节点、关系作为边:

G = (V, E)
V = entities
E = relationships / claims
节点可带属性: - name。

  • type。

  • description。

  • source IDs。

  • embedding。

  • community ID。

边可带属性: - relation type。

  • description。

  • weight。

  • source IDs。

  • confidence。

图构建后可以结合向量索引、全文索引和图数据库。

11. 社区发现

社区发现把图划分为若干结构紧密的子图。常见算法包括 Leiden、Louvain 等。 社区的意义: - 表示一组关系紧密的实体。

  • 对应一个主题、项目、组织或事件簇。

  • 支持全局问题的分层摘要。

社区层级可以是多级的:

level 0: 细粒度社区
level 1: 中等社区
level 2: 更大主题社区
层级社区有助于从局部到全局回答问题。

12. 社区摘要 Community Reports

GraphRAG 的一个关键机制是为社区生成摘要或报告。社区报告通常包含: - 社区主题。

  • 关键实体。

  • 关键关系。

  • 重要 claim。

  • 来源证据。

  • 风险或不确定性。

社区摘要用于回答全局问题,例如:

这个文档集合中主要有哪些主题?
不同项目之间有什么关系?
某个组织网络的关键风险是什么?
社区摘要降低了直接遍历大量 chunk 的成本。

Local Search 面向与特定实体或局部关系相关的问题。流程通常是:

query -> identify entities
entities -> retrieve neighboring nodes/edges/text units
assemble local context
LLM answer
适合: - 某个实体的定义、属性、关系。

  • 某两个实体之间的联系。

  • 局部多跳问题。

  • 基于具体对象的问答。

Local 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 的重要优势。

DRIFT Search 可以理解为结合全局社区信息和局部实体信息的搜索方式。它试图在全局摘要和局部证据之间取得平衡,既不只看社区概览,也不只看局部邻域。 适合: - 需要先理解主题背景,再深入局部证据的问题。

  • 全局问题中包含具体实体。

  • 局部问题需要社区上下文。

不同实现命名和细节可能变化,但核心思想是多粒度检索。

16. GraphRAG 与 Vector RAG 对比

Vector RAG: - 检索单元通常是 chunk。

  • 基于语义相似度。

  • 工程简单,成本较低。

  • 擅长局部事实问答。

  • 对全局关系和多跳问题较弱。

GraphRAG: - 检索单元包括实体、关系、社区、摘要和原文。

  • 基于图结构和语义结合。

  • 构建成本高。

  • 擅长多实体、多跳、全局总结。

  • 受抽取质量影响大。

二者不是替代关系,常常组合使用。

17. GraphRAG 的索引存储

GraphRAG 可能需要多种存储: - 文本存储:保存原始 text units。

  • 图数据库:保存实体和关系。

  • 向量索引:检索实体描述、社区摘要和原文片段。

  • 全文索引:关键词搜索。

  • 对象存储:保存报告、日志和中间结果。

生产系统要保证 ID 一致:

entity_id -> source_text_unit_id -> document_id
community_id -> entity_ids -> report_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
关键点: - 知识图谱索引是 GraphRAG 的基础。

  • 全局检索依赖社区摘要和 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="