RAG 演进 04-GraphRAG

本文总结 GraphRAG 的定义、和传统 RAG 的区别,以及如何实现 GraphRAG

什么是 GraphRAG?

GraphRAG(Graph-based Retrieval-Augmented Generation)是微软提出的一种结合知识图谱的增强检索生成框架,旨在改进传统 RAG 的局限性。其核心思想是通过构建结构化知识图谱,对文档内容进行全局语义建模,从而提升大语言模型(LLM)在复杂问题中的推理能力和回答准确性。

与传统 RAG 依赖非结构化文本的向量检索不同,GraphRAG 通过图谱的拓扑结构(如节点、边、子图)挖掘深层语义关联,解决传统 RAG 在长尾问题、多跳推理和全局一致性上的不足,总的来说,他们之间有以下区别:

维度传统 RAGGraphRAG
数据组织方式非结构化文本的向量化表示结构化知识图谱(实体、关系、子图)
检索逻辑基于向量相似度的片段匹配基于图谱拓扑的关联推理(多跳查询)
上下文理解局部语义匹配,缺乏全局关联性全局图谱支持复杂逻辑推理
可解释性黑盒检索,结果依赖向量空间分布白盒化路径检索,答案支持图谱溯源
适用场景简单问答、单跳检索任务复杂推理、多跳问答、事件关联分析
数据动态性更新需全量重新嵌入支持增量更新(增删节点 / 边)
计算开销低(仅需向量索引)高(需构建和维护知识图谱)

RAG 每次检索出的 chunk,只是某个文档的内容,而通过知识图谱,GraphRAG 在全局预料层面检索知识,弥补了传统 RAG 在复杂关联推理中的不足,同时提升了回答的可解释性。

GraphRAG 的实现过程

flowchart LR
	A[文档]
	B[实体/关系抽取]
	C[构建知识图谱]
	D[社区划分]
	E[检索子图]
	F[llm生成答案]
	A-->B-->C-->D-->E-->F

GraphRAG 的实现分为以下关键步骤:

  1. 索引(数据预处理与知识图谱构建

    • 实体与关系抽取:使用 LLM 解析文档,提取实体(如人物、地点、事件)及其关系(如 “属于”“导致”)。
    • 图谱生成:将实体和关系存储为图结构(节点 = 实体,边 = 关系),支持属性扩展(如时间、上下文描述)。
    • 社区检测:通过图聚类算法(如 Louvain)将图谱划分为主题社区(如 “技术”“市场”),每个社区代表一个语义子图。
    • 生成社区摘要:使用自下而上的方法为每个 community 及其中的重要部分生成摘要。这些摘要包括 Community 内的主要 Entity、Entity 的关系和关键 Claim。这一步为整个数据集提供了概览,并为后续查询提供了有用的上下文信息
  2. 查询生成 (检索)
    利用用户提问到知识图谱检索上下文,根据检索的范围,可以分为 2 种检索方式:

  • 全局查询:在整个知识图谱检索上下文,可以跨多文档检索
  • 本地查询:在特定子图(如社区、领域节点),聚焦在某个实体上

举个例子说明两者之间的关系:

全局查询本地查询
目标从全局图谱中提取跨社区、跨实体的关联信息,解决复杂问题快速检索与特定实体直接相关的信息,解决简单问题
步骤1. 问题解析:使用 LLM 解析问题,提取关键实体(如 “公司 A”“产品策略”“市场地位”)。

2. 图谱范围检索:
社区检测:通过聚类算法(如 Louvain)识别与实体相关的多个社区(如 “产品社区”“市场社区”)。
跨社区路径发现:使用图遍历算法(如随机游走、广度优先搜索)查找跨社区的关系路径。

3. 子图融合与增强:
合并相关社区的局部子图,生成全局语义视图。
通过图嵌入(如 Node2Vec)生成向量表示,捕捉全局语义关联。

4. 生成答案:
将融合后的子图信息转化为自然语言提示,输入 LLM 生成回答。
1. 实体定位:
使用命名实体识别(NER)或关键词匹配定位目标实体(如 “产品 A”)。

2. 邻域检索:
提取实体的直接邻居节点(如 “功能”“用户群体”“技术参数”)。
限定跳数(如 1~2 跳)遍历子图,避免过度扩展。

3. 上下文生成:
将邻域关系转化为文本描述(如 “产品 A 的功能包括 X、Y,主要用户是 Z”)。

4. 生成答案:
直接基于局部上下文生成简洁回答,无需复杂推理。
问题产品 A 的销量下降导致公司 B 股价下跌?产品 A 的发布日期是什么时候?
检索路径产品 A(社区 1)→ 用户投诉(社区 1)→ 市场份额下降(社区 2)→ 财报数据(社区 3)→ 股价下跌(社区 3)产品 A → 发布日期 → “2023 年 1 月”
使用算法社区检测、图嵌入邻域遍历、关键词匹配
使用工具Neo4j(图遍历)、Gephi(可视化)Elasticsearch(关键词检索)、NetworkX

所以全局查询强调整体关联,适合复杂推理,但计算成本高,本地查询注重效率,适合简单问答,但依赖图谱构建质量,实际使用建议混合使用,当用户提出关于特定 Entity(如人名、地点、组织等)的问题时,建议使用本地搜索工作流程,若结果不足再触发全局检索

  1. 生成
    • 子图检索:根据用户问题定位相关社区或子图,提取结构化信息(如实体链、关系路径)。
    • 上下文增强:将子图信息转化为文本提示(Prompt),输入 LLM 生成最终回答。

GraphRAG 的例子

背景:微软基于 GraphRAG 构建新闻事件分析系统,用于回答涉及多实体关联的复杂问题,例如:“2023 年某科技公司并购案对行业竞争格局的影响?”

实施流程

  1. 数据源:爬取 100 万篇科技新闻,清洗后提取实体(公司、人物、产品)及关系(并购、合作、竞争)。
  2. 图谱构建:在 Neo4j 中存储节点(公司 A、公司 B)、边(“并购”)、属性(时间、金额)。
  3. 混合检索
    • 向量检索:通过 Milvus 检索与 “并购” 相关的文本片段。
    • 图谱检索:查询 “公司 A→并购→公司 B→影响→行业竞争” 的多跳路径。
  4. 答案生成:将检索结果(文本片段 + 子图结构)输入 GPT-4,生成包含因果链的答案。

效果对比

  • 传统 RAG:仅能返回单篇新闻中的并购金额等片段化信息。
  • GraphRAG:可生成跨时间、跨实体的综合分析,例如:“并购导致市场份额向头部集中,触发反垄断调查”。

总结

GraphRAG 通过知识图谱的引入,解决了传统 RAG 在复杂推理任务中的局限性,但其实现成本较高,需权衡业务需求与资源投入。未来方向包括:

  1. 轻量化图谱构建:利用 LLM 自动生成三元组。
  2. 动态图谱更新:结合流数据处理技术实现实时更新。
  3. 多模态扩展:融合文本、图像、表格等多模态数据构建异构图谱。

适用场景建议

  • 推荐采用 GraphRAG:金融风控(关联交易分析)、医疗诊断(病因推理)、法律合规(案件关联性审查)。
  • 仍适用传统 RAG:客服问答(单轮对话)、文档摘要(无复杂逻辑)。

通过灵活选择 RAG 与 GraphRAG 的组合,可最大化大模型在垂直领域落地的价值。