RAG 演进 04-GraphRAG
本文总结 GraphRAG 的定义、和传统 RAG 的区别,以及如何实现 GraphRAG
什么是 GraphRAG?
GraphRAG(Graph-based Retrieval-Augmented Generation)是微软提出的一种结合知识图谱的增强检索生成框架,旨在改进传统 RAG 的局限性。其核心思想是通过构建结构化知识图谱,对文档内容进行全局语义建模,从而提升大语言模型(LLM)在复杂问题中的推理能力和回答准确性。
与传统 RAG 依赖非结构化文本的向量检索不同,GraphRAG 通过图谱的拓扑结构(如节点、边、子图)挖掘深层语义关联,解决传统 RAG 在长尾问题、多跳推理和全局一致性上的不足,总的来说,他们之间有以下区别:
维度 | 传统 RAG | GraphRAG |
---|---|---|
数据组织方式 | 非结构化文本的向量化表示 | 结构化知识图谱(实体、关系、子图) |
检索逻辑 | 基于向量相似度的片段匹配 | 基于图谱拓扑的关联推理(多跳查询) |
上下文理解 | 局部语义匹配,缺乏全局关联性 | 全局图谱支持复杂逻辑推理 |
可解释性 | 黑盒检索,结果依赖向量空间分布 | 白盒化路径检索,答案支持图谱溯源 |
适用场景 | 简单问答、单跳检索任务 | 复杂推理、多跳问答、事件关联分析 |
数据动态性 | 更新需全量重新嵌入 | 支持增量更新(增删节点 / 边) |
计算开销 | 低(仅需向量索引) | 高(需构建和维护知识图谱) |
RAG 每次检索出的 chunk,只是某个文档的内容,而通过知识图谱,GraphRAG 在全局预料层面检索知识,弥补了传统 RAG 在复杂关联推理中的不足,同时提升了回答的可解释性。
GraphRAG 的实现过程
flowchart LR
A[文档]
B[实体/关系抽取]
C[构建知识图谱]
D[社区划分]
E[检索子图]
F[llm生成答案]
A-->B-->C-->D-->E-->F
GraphRAG 的实现分为以下关键步骤:
索引(数据预处理与知识图谱构建)
- 实体与关系抽取:使用 LLM 解析文档,提取实体(如人物、地点、事件)及其关系(如 “属于”“导致”)。
- 图谱生成:将实体和关系存储为图结构(节点 = 实体,边 = 关系),支持属性扩展(如时间、上下文描述)。
- 社区检测:通过图聚类算法(如 Louvain)将图谱划分为主题社区(如 “技术”“市场”),每个社区代表一个语义子图。
- 生成社区摘要:使用自下而上的方法为每个 community 及其中的重要部分生成摘要。这些摘要包括 Community 内的主要 Entity、Entity 的关系和关键 Claim。这一步为整个数据集提供了概览,并为后续查询提供了有用的上下文信息
查询生成 (检索)
利用用户提问到知识图谱检索上下文,根据检索的范围,可以分为 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(如人名、地点、组织等)的问题时,建议使用本地搜索工作流程,若结果不足再触发全局检索
- 生成
- 子图检索:根据用户问题定位相关社区或子图,提取结构化信息(如实体链、关系路径)。
- 上下文增强:将子图信息转化为文本提示(Prompt),输入 LLM 生成最终回答。
GraphRAG 的例子
背景:微软基于 GraphRAG 构建新闻事件分析系统,用于回答涉及多实体关联的复杂问题,例如:“2023 年某科技公司并购案对行业竞争格局的影响?”
实施流程:
- 数据源:爬取 100 万篇科技新闻,清洗后提取实体(公司、人物、产品)及关系(并购、合作、竞争)。
- 图谱构建:在 Neo4j 中存储节点(公司 A、公司 B)、边(“并购”)、属性(时间、金额)。
- 混合检索:
- 向量检索:通过 Milvus 检索与 “并购” 相关的文本片段。
- 图谱检索:查询 “公司 A→并购→公司 B→影响→行业竞争” 的多跳路径。
- 答案生成:将检索结果(文本片段 + 子图结构)输入 GPT-4,生成包含因果链的答案。
效果对比:
- 传统 RAG:仅能返回单篇新闻中的并购金额等片段化信息。
- GraphRAG:可生成跨时间、跨实体的综合分析,例如:“并购导致市场份额向头部集中,触发反垄断调查”。
总结
GraphRAG 通过知识图谱的引入,解决了传统 RAG 在复杂推理任务中的局限性,但其实现成本较高,需权衡业务需求与资源投入。未来方向包括:
- 轻量化图谱构建:利用 LLM 自动生成三元组。
- 动态图谱更新:结合流数据处理技术实现实时更新。
- 多模态扩展:融合文本、图像、表格等多模态数据构建异构图谱。
适用场景建议:
- 推荐采用 GraphRAG:金融风控(关联交易分析)、医疗诊断(病因推理)、法律合规(案件关联性审查)。
- 仍适用传统 RAG:客服问答(单轮对话)、文档摘要(无复杂逻辑)。
通过灵活选择 RAG 与 GraphRAG 的组合,可最大化大模型在垂直领域落地的价值。