Graph RAG

当向量检索遇到知识图谱:用实体、关系与图遍历,补足纯向量 RAG 在多跳推理上的天然短板

22 min read Part of RAG · Ch. 8

Graph RAG

flowchart LR
  A["Graph RAG"]
  A --> B["分类:检索增强 (RAG)"]
  A --> C["关键词:RAG"]
  A --> D["关键词:Graph RAG"]
  A --> E["关键词:Knowledge Graph"]
  A --> F["关键词:Neo4j"]

前一篇讲到 Agentic RAG,本质是在讨论:当问题不再适合一条固定检索流水线时,系统该如何动态决定“查什么、查几次、去哪里查”。

但还有一类问题,即使你把检索流程做得再聪明,纯向量检索仍然会遇到明显瓶颈:

它能找到“相关文本”,却不天然擅长表示“实体之间的关系”。

比如问:

张三的上级所在部门的预算是多少?

一个纯向量 RAG 系统可能可以召回这些片段:

  • 张三的个人介绍
  • 李四的管理职责
  • 研发部预算说明
  • 部门组织结构文档

这些内容都“相关”,但问题在于:相关不等于可连接。 系统需要的不只是若干相似文本,而是一条明确的关系链:

张三 → 上级 → 所在部门 → 预算

这正是 Graph RAG 要补的位置。

所以,Graph RAG 不是在和向量 RAG 竞争谁更先进,而是在解决一个纯向量范式不擅长处理的问题:

当知识的关键不只是“内容像不像”,而是“谁和谁怎么连着”时,需要把关系结构显式建出来。

为什么纯向量 RAG 在这类问题上会吃力

向量检索擅长的是语义相似性。 一句话被编码成向量后,系统更容易回答的是:

  • 哪些文本和这个问题表达得像
  • 哪些片段可能谈的是同一个主题
  • 哪些内容在语义空间里彼此接近

这类能力非常强,也正因为如此,Vector RAG 在大量知识问答场景里已经足够有效。 但它有一个天然边界:向量空间主要表达“相似”,不是“关系”

这会带来几类典型问题。

问题纯向量 RAG 的表现
关系缺失返回的是相关片段,不是明确关系路径
多跳推理困难需要把多个检索结果拼成链条,容易断裂
结构化知识弱层级、依赖、组织关系、引用关系容易被扁平化
结果可解释性不足系统可能答对,但很难说明“是沿哪条路径推出来的”

可以把它总结成先看定义:

向量检索擅长回答“像什么”,图结构更擅长表达“是什么、和谁有关、怎么连起来”。

这两种能力不是互斥的,而是互补的。

什么是知识图谱

知识图谱可以先用一个非常朴素的方式理解:

知识图谱 = 实体(Entity) + 关系(Relationship) + 属性(Property)

比如在企业场景里:

  • “张三”是一个实体
  • “研发部”是一个实体
  • “任职于”是一种关系
  • “预算”可能是部门这个实体的一个属性

于是,原本散落在文本里的知识,就可以被建模成节点和边:

(张三) --[任职于]--> (研发部)
(研发部) --[隶属于]--> (技术中心)
(张三) --[汇报给]--> (李四)
(李四) --[管理]--> (研发部)

这个表示方式看起来简单,但意义很大。 因为一旦知识变成图,检索就不再只是“找相似文本”,还可以是:

  • 从一个实体出发做图遍历
  • 沿着某类关系走一跳、两跳、三跳
  • 找到某条明确路径上的目标节点
  • 对路径进行解释和验证

所以,图谱的价值不只是“结构化存储”,更在于:

它把原本隐含在文本里的关系显式化了。

这也是 Graph RAG 和普通 RAG 最根本的差异。

Graph RAG 的核心思路

如果用一句话概括:

Graph RAG 是把知识图谱的“结构能力”和向量检索的“语义能力”结合起来。

它通常不是完全抛弃向量检索,而是在知识表示层多加了一层图结构。 这样系统处理问题时,就不再只能靠相似度召回,还能利用实体关系来缩小搜索空间、补全推理链条。

一个典型的 Graph RAG 系统里,通常有三类核心组件:

组件作用
知识图谱存储实体、关系、属性,支持路径和子图查询
向量索引对文本块、节点描述、子图摘要做语义检索
LLM负责理解问题、生成查询、组织答案、处理歧义

真正的关键不在于“有没有图数据库”,而在于系统能不能同时利用两种能力:

图提供结构

图更擅长表达:

  • 谁属于谁
  • 谁管理谁
  • 哪个项目依赖哪个项目
  • 哪条法条引用了哪条法条
  • 哪个产品和哪些模块、团队、事故有关

这些信息如果只放在文本里,模型也许可以“读懂”,但系统很难稳定地“查对”。

向量提供语义

图并不天然解决一切。 如果用户问题表述模糊、实体没完全对齐、描述是近义表达,仍然需要语义能力帮你找到可能的入口实体、相关节点说明或局部文本证据。

因此,Graph RAG 的真正价值,通常不是“用图替代向量”,而是:

让图负责关系约束,让向量负责语义召回。

图谱到底补了向量的什么短板

Graph RAG 之所以值得单独拿出来讲,是因为它不是简单“多接一个数据库”,而是补了纯向量 RAG 很难系统解决的几个问题。

1. 多跳关系推理

像下面这类问题,天然适合图:

  • A 的上级是谁
  • A 的上级属于哪个部门
  • 这个部门的预算是多少
  • 预算负责人又是谁

这里每一步都有明确关系类型。 向量检索可以分别找到“相关文本”,但很难天然保证这些结果恰好组成同一条逻辑链。图谱则可以把这条链当作显式路径查询出来。

2. 层级和依赖结构

很多企业和业务知识不是“散文式知识”,而是天然带层次的:

  • 组织架构
  • 产品模块依赖
  • 项目归属关系
  • 审批流程
  • 法条引用链
  • 医疗概念体系

这类知识如果只被切成 chunk,再丢进向量库,结构会被显著扁平化。 你仍然能搜到相关内容,但“上层、下层、依赖、从属、因果、引用”这些关系不再清晰。

3. 实体对齐与可解释性

Graph RAG 的一个常被低估的优点是: 它天然更容易给出“为什么是这个答案”。

例如系统不只是说“张三所在部门预算是 2000 万”,而是可以明确展示路径:

张三 → 汇报给李四 → 李四管理研发部 → 研发部预算为 2000 万

这个路径并不只是为了美观,它在工程上很有意义:

  • 更容易审计
  • 更容易发现错链
  • 更容易调试抽取错误
  • 更适合高可信问答场景

也正因为如此,Graph RAG 往往在企业知识、金融风控、法律、医疗等更强调关系可追溯的场景里更有价值。

Graph RAG 不是“只有图”,而是图与文本一起工作

很多人第一次接触 Graph RAG 时,会误以为它的意思是:

先把知识全部转成图,然后只靠图来回答问题。

这通常不现实,也没必要。

原因很简单: 现实世界里的知识很少能被完整、准确、低成本地全部结构化。很多信息依然存在于自然语言文本里,而且文本本身保留了大量上下文细节。图谱更像是一种高价值关系的抽象层,而不是对全文本的彻底替代。

因此,成熟的 Graph RAG 更常见的形态是:

  1. 从文档里抽取关键实体与关系,建成图
  2. 保留原始文本或文本切块作为证据层
  3. 检索时先借助图缩小范围、锁定路径或定位子图
  4. 再把子图相关文本一起交给模型生成答案

换句话说:

图负责“找关系骨架”,文本负责“补语义细节与原始证据”。

这也是为什么 Graph RAG 往往会自然走向 Hybrid 方案,而不是纯图方案。

Microsoft GraphRAG 在做什么

Graph RAG 这个词最近几年更常被广泛提起,很大程度上是因为 Microsoft 推出的 GraphRAG 方案让这条路线被更多人系统看到。

但理解它时,一个常见误区是:把它等同于“任何图数据库 + LLM”。 实际上,Microsoft GraphRAG 更像是一套围绕从文本构图、社区聚合、局部检索与全局概括展开的方法框架。

它的思路里,有两个很值得关注的点。

Community Detection:不是只查节点,还要形成“主题社区”

如果图足够大,单看局部节点关系仍然不够。 你还需要一种方式,把图里高度相关的节点聚成更大的主题单元。

这就是所谓的社区检测(Community Detection)。

直观理解,它是在说:

  • 哪些实体和关系经常共同出现
  • 哪些节点形成了相对稳定的主题簇
  • 这个簇能不能代表一个更高层的问题域

例如在企业知识中,一个社区可能围绕某个产品线形成:

  • 产品
  • 团队
  • 项目
  • 风险事件
  • 核心客户
  • 相关文档

当这些节点形成社区后,你就不只是有零散关系,还能进一步对这个社区做摘要,把局部结构升维为“主题级知识”。

Global Search vs Local Search:局部事实和全局概括不是一回事

这是 GraphRAG 很有启发性的一点: 它区分了两类不同的问题。

模式描述更适合回答的问题
Local Search围绕具体实体或局部子图做检索谁、什么、何时、某条关系链是什么
Global Search在社区摘要或高层聚合知识上检索整体风险、主要主题、宏观概括、全局趋势

这个区分很重要,因为传统 RAG 经常把所有问题都当成“找几段相关文本”来处理。 但现实里,问题其实分成两大类:

一类是局部事实问题

例如:

  • 张三现在属于哪个团队
  • 产品 A 依赖哪些服务
  • 某条法规引用了哪几条上位法

这类问题更适合在局部子图里精准查询。

另一类是全局概括问题

例如:

  • 公司当前主要的风险集中在哪些领域
  • 某个业务线的核心议题有哪些
  • 过去一年哪些主题最频繁出现

这类问题即使有图,也很难只靠某条路径回答。 它更像是在问“整个知识图谱中,哪些聚类或主题最重要”。 这就需要社区级摘要和更高层的聚合表示。

所以,GraphRAG 带来的一个重要启发不是某个具体实现细节,而是:

图结构不只适合查事实路径,也适合组织更高层的主题视角。

Graph RAG 的典型构建流程

无论你是不是采用某个具体框架,Graph RAG 大致都会经历几个阶段。

1. 从文档中抽取实体

先识别出文档里的关键对象,例如:

  • 部门
  • 公司
  • 项目
  • 产品
  • 法条
  • 症状
  • 药物

这里的难点不是“抽不抽得出来”,而是:

  • 抽得是否稳定
  • 同一实体是否能对齐
  • 粒度是否合适
  • 是否保留足够上下文

比如“研发部”“研发中心”“技术研发部”到底是不是同一个实体,这类归一化问题在真实工程中非常常见。

2. 抽取实体之间的关系

关系抽取比实体抽取更关键,也更容易出问题。 因为 Graph RAG 真正依赖的是“可走的边”。

例如:

  • 任职于
  • 汇报给
  • 管理
  • 属于
  • 依赖
  • 引用
  • 负责
  • 影响
  • 包含

同一句话里可能有多个关系,也可能有隐含关系。 而一旦关系抽错,后面的图查询和路径推理都会被污染。

3. 建图并存储

把实体和关系以图的形式持久化存储。 常见选择包括:

方案特点
Neo4j工程化成熟,查询语言直观,适合生产系统
Amazon Neptune 等图服务托管能力更强,适合云环境
NetworkX轻量,适合原型验证和离线分析

这里要注意,图存储不是目的,查询能力才是重点。 如果建了图,却没有稳定的查询和更新策略,图很容易变成一个昂贵但难用的旁路系统。

4. 做摘要、聚合或子图表示

如果图规模较大,仅靠单节点和原始边查询很难支撑更高层问题。 这时通常需要对局部子图、社区或主题簇做摘要和表示。

这一步并不是 GraphRAG 独有,但在图规模上去后会非常关键。 否则系统只能回答“小问题”,很难回答“整体怎么看”。

5. 检索与回答

真正上线时,Graph RAG 往往不是“只查图”,而是组合式流程:

  • 先识别问题里的核心实体
  • 决定查局部路径还是做全局主题检索
  • 查到相关子图
  • 把子图及相关文本证据转成 LLM 可消费的上下文
  • 最后由模型合成答案

可以看到,Graph RAG 的重点从来不只是“有没有图”,而是:

你能否让图成为检索与回答过程中的有效约束。

从文档构建知识图谱:听上去简单,实际很考验细节

很多介绍会把这件事写成先看定义:

让 LLM 抽取 (头实体, 关系, 尾实体) 三元组。

这确实是起点,但如果要走向工程可用,至少要面对下面这些问题。

实体边界怎么定

“张三负责增长平台”里,“增长平台”是项目、产品线、系统名,还是团队名? 不同文档里说法可能不一致,如果没有 schema 约束,抽出来的图会非常乱。

实体归一化怎么做

“OpenAI”“OpenAI 公司”“OpenAI, Inc.”到底是不是一个实体? “李总”和“李四”是不是同一人? 如果归一化做不好,图会被拆碎,关系链也会断裂。

关系类型怎么收敛

如果完全让模型自由生成关系标签,你很快会得到一堆近义但不统一的边:

  • 管理
  • 负责
  • 领导
  • 主管
  • oversee
  • lead

这些边语义相近,但如果不收敛,后续查询会变得非常脆弱。 所以,工程上通常需要一个受控的 relation schema,而不是无限开放式关系集。

关系可信度如何处理

不是所有抽取出来的边都同样可信。 有些关系来自明确陈述,有些来自模糊表述,有些甚至只是模型推断。 如果这些边被一视同仁地写进生产图谱,后果会很糟。

一个更现实的做法是为边保存额外信息:

  • 来源文档
  • 抽取置信度
  • 时间戳
  • 是否已人工校验
  • 原始证据片段

这会让图谱不只是“一个关系集合”,而是“一个可追溯的关系层”。

Neo4j + LLM:为什么这是很多团队的第一站

Neo4j 常被拿来做 Graph RAG 的起点,不只是因为它流行,更因为它有一个很实际的优点:

图查询这件事,在 Neo4j 里足够直观。

比如查询“张三的上级管理的部门预算”这类问题,可以很自然地表达成路径:

MATCH (p:Person {name: "张三"})-[:REPORTS_TO]->(m:Person)-[:MANAGES]->(d:Department)
RETURN d.name, d.budget

这类查询方式对 Graph RAG 很重要,因为它让“关系链”成为一等公民,而不是藏在文本里等模型自己理解。

典型的集成方式大致有三类。

1. LLM 生成 Cypher

用户自然语言问题先被模型转成 Cypher,再去图数据库里查。 这是最直观的玩法,但也最容易踩坑。

问题在于,LLM 生成结构化查询时会遇到:

  • schema 理解错误
  • 关系方向写反
  • 节点类型用错
  • 过滤条件漏掉
  • 把不存在的字段或关系编出来

所以,LLM 直接生成 Cypher 更适合:

  • schema 较稳定
  • 查询模板有限
  • 有校验层或 query guardrail
  • 容错成本较低

而不适合把数据库完全暴露给模型自由发挥。

2. 图查询结果转文本,再交给 LLM 回答

这是更稳的一种方式。 系统先查子图,再把节点、关系和属性转成一种可读文本,让模型负责组织答案。

例如把结果转成:

  • 张三汇报给李四
  • 李四管理研发部
  • 研发部预算为 2000 万

这种方式的好处是:

  • LLM 不需要直接操作复杂数据库
  • 可以在进入生成前做安全过滤
  • 可以把路径和证据一起交给模型

3. 图与向量联合检索

这是很多实际系统最终会走到的状态。 因为只查图不够灵活,只查向量又容易丢关系,所以常见做法是:

  • 先通过语义检索找到候选实体或相关文档
  • 再基于图做局部扩展
  • 或者先通过图锁定子图,再对子图相关文本做向量检索和重排

这意味着,Neo4j + LLM 真正有价值的地方,不在于“能生成 Cypher”,而在于:

它让图结构成为检索流程的一部分,而不是一个孤立的存储层。

Graph RAG、Vector RAG 和 Hybrid 的差异

如果用最简化的方式对比,可以先看下面这张表。

维度Vector RAGGraph RAGHybrid
语义匹配通常需额外补足
关系推理
多跳路径不稳定更自然更稳
构建成本较高
可解释性中等
上线复杂度中高
适用问题语义问答、事实问答多跳、关系链、结构化问题综合型复杂场景

但表格只能说明表面差异,更重要的是理解三者适合的问题类型。

Vector RAG 适合“找相关内容”

如果问题的核心是:

  • 找一段解释
  • 找一个定义
  • 找若干相关事实
  • 找与问题表述语义接近的文本

那 Vector RAG 往往已经很好用。

Graph RAG 适合“找关系和路径”

如果问题本质上是在问:

  • A 和 B 如何相连
  • A 的上级 / 下级 / 依赖 / 归属 / 引用对象是什么
  • 某实体沿几跳关系后会到哪里
  • 某个局部网络里有哪些关键节点

那么 Graph RAG 更合适。

Hybrid 更适合现实系统

因为真实问题很少纯粹属于某一类。 用户既可能需要路径,也可能需要路径背后的文本语境、解释、时间条件和证据片段。

所以大多数长期可用的系统,最终不会在 Vector 和 Graph 之间二选一,而会走向:

让图负责约束,让向量负责补充。

哪些场景最适合 Graph RAG

并不是只要“看起来高级”就该建图。 Graph RAG 只有在知识和问题都呈现出明显关系结构时,投入才更有意义。

1. 企业知识管理

企业知识天然有大量实体关系:

  • 人员与组织
  • 项目与团队
  • 系统与服务
  • 流程与审批角色
  • 文档之间的引用和依赖

这类场景非常容易出现“A 的 B 的 C”式问题,Graph RAG 往往比纯向量更稳。

2. 金融风控

股权关系、担保链、关联交易、资金流、控制链,这些问题天然是图问题。 很多风险并不藏在某一篇文档里,而藏在“多实体之间的连接模式”里。

3. 医疗与生命科学

疾病、症状、检查、药物、禁忌、通路之间都有丰富关系。 Graph RAG 在这里的潜力很大,但同时也因为领域精度要求高,更依赖高质量 schema 和知识源。

4. 法律与合规

法条引用、案例关联、上位法与下位法关系、条款适用条件,这些都很适合显式关系建模。 相较于只搜相似段落,图结构更有助于追踪“依据链”。

5. 多跳问答

凡是问题结构天然长成:

  • A 的 B 是谁
  • A 相关的 C 中有哪些满足 D
  • 谁负责过与某事故相关的项目
  • 哪些部门和某项风险存在间接关系

这类问题都更值得考虑图路径。

什么时候不建议上 Graph RAG

Graph RAG 的一个常见问题是: 因为它听起来更“高级”,所以容易被过度引入。

但很多问题其实并不需要图。

例如:

  • FAQ 式问答
  • 单篇文档问答
  • 简单事实检索
  • 大量无明确实体关系的说明文档
  • 主要靠概念相似而不是关系路径的问题

对于这些场景,建图带来的收益往往不够覆盖成本。 你需要维护额外的数据层、抽取流程、更新机制和查询逻辑,最后效果却未必明显优于一个做得不错的向量 RAG。

更直接地说:

如果问题主要是在找“哪段内容最相关”,而不是在找“哪条关系链成立”,Graph RAG 往往不是最优先选项。

构建成本不只在“建图”,更在“把图维持为真”

Graph RAG 真正昂贵的地方,不只是第一次建图,而是后续维护。 很多 PoC 都能把图建出来,但上线之后才发现难点集中在“图怎么持续可信”。

下面这些成本通常都不能忽略。

成本项真正的难点
实体 / 关系抽取不只是抽得出,而是抽得稳、抽得准
图存储与查询不只是部署数据库,而是形成可用的查询层
增量更新文档变更后,图如何局部更新而不污染既有关系
实体归一化同名异物、异名同物、版本漂移都会破坏图质量
社区摘要 / 子图表示图大了以后,如何做高层组织与全局检索
评估体系如何验证图路径和答案是否真的提升了质量

这里最容易被低估的是增量更新

向量库更新通常只要重切 chunk、重建 embedding; 但图更新不是简单覆盖。 因为修改一篇文档,可能影响:

  • 某个实体属性
  • 某条关系是否还成立
  • 某条边的时间状态
  • 某个社区摘要是否过期
  • 某个子图的中心节点是否发生变化

所以,Graph RAG 的维护难度天然高于向量 RAG。 这也是为什么它更适合那些知识关系价值足够高、问题复杂度足够高、ROI 足够明确的场景。

Graph RAG 最大的工程难点,往往不是检索,而是 schema

很多团队做到后面会发现,决定系统质量上限的不是某个模型,而是 schema 设计。

建图前,你至少要回答这些问题:

  • 你有哪些核心实体类型?
  • 这些实体有哪些关键属性?
  • 你允许哪些关系类型?
  • 哪些关系是方向性的?
  • 哪些关系有时效性?
  • 哪些属性应该做节点属性,哪些应该保留在原始文本里?

例如一个企业知识库,可能有这样的 schema:

实体类型属性示例常见关系
Personname, title, department, start_dateREPORTS_TO, WORKS_IN, LEADS
Departmentname, budget, parent_departmentBELONGS_TO, OWNS
Projectname, status, owner, start_dateLED_BY, INVOLVES, DEPENDS_ON
Systemname, service_tier, owner_teamRUNS_ON, DEPENDS_ON, MAINTAINED_BY
Documenttitle, source, updated_atREFERENCES, DESCRIBES

schema 设计直接影响三个层面:

抽取是否稳定

如果 schema 太宽泛,抽取就会混乱; 如果 schema 太细,抽取和维护成本会飙升。

查询是否自然

如果关系类型设计得不合理,后续查询会变得别扭,甚至需要依赖大量 prompt 修补。

演化是否可持续

一开始把 schema 设计得过于“全能”,很可能在几周后失控。 实际更可行的做法通常是:

从最关键的实体和关系开始,只建那些能明显改善回答质量的边。

Graph RAG 里,最危险的不是 schema 太小,而是 schema 看起来很全,实际上没人能持续维护。

一个更务实的落地方式:渐进式引入,而不是全量替换

如果你已经有 Vector RAG,不需要把系统推倒重来。 Graph RAG 更合理的引入方式,通常是渐进式的。

1. 先做并行验证

在现有 pipeline 旁边,加一条图检索路径。 不要一开始就替换主流程,而是先看同一批问题上,图路径是否真的提升了结果质量。

最值得优先测试的问题是:

  • 关系类问题
  • 多跳类问题
  • 组织架构 / 依赖链 / 引用链问题

2. 做混合检索

比较实用的做法是:

  • 图遍历拿到相关实体和子图
  • 向量检索拿到相关文本块
  • 把两边结果交给统一的重排或答案合成层

这样可以兼顾路径和语义,不至于在某一侧过拟合。

3. 做问题路由

不是所有问题都要走图。 你可以让系统识别:

  • 关系型问题 → 走图优先
  • 语义型问题 → 走向量优先
  • 混合型问题 → 走 Hybrid

这一步很重要,因为 Graph RAG 的价值通常集中在一部分问题上,而不是平均提升所有问题。

4. 再决定是否把图变成主路径

只有当你确认:

  • 这类问题占比足够高
  • 图带来的收益足够明显
  • 更新与维护成本可接受

再考虑把图能力前置为主要路径。 否则,它更适合作为高价值复杂问题的增强通道。

所以,Graph RAG 最现实的迁移路径不是“all in”,而是:

先证明关系结构值得被显式建模,再逐步放大投入。

常见误区与失败模式

Graph RAG 看起来很适合解决复杂问题,但它也有很多典型坑,而且不少坑比向量 RAG 更隐蔽。

1. 图建得很大,但没有回答质量提升

这通常发生在“为建图而建图”的项目里。 抽了很多实体和关系,图数据库也搭好了,但用户问题本身并不真的依赖这些关系。 最后系统复杂度大涨,收益却不明显。

2. 抽取质量一般,导致错误路径非常自信

图的危险在于: 一旦某条边是错的,路径推理会看起来特别“像那么回事”。

相比向量检索的模糊相关性,图路径更容易给人一种强确定感。 但如果边本身不可靠,这种确定感反而更危险。

3. schema 过度设计

一开始就试图覆盖所有实体和关系,结果 schema 太复杂,抽取不稳定,查询也变脆。 最终工程团队在维护 schema,而不是在提升问答质量。

4. 只关心图,不保留原始证据

如果图里只有抽象关系,没有回指原文证据,系统就很难处理细节、时间条件和歧义。 这会让回答“有结构,但没语境”。

5. 把 Graph RAG 当作替代基础检索质量的捷径

如果文档质量差、元数据乱、实体识别不稳定,那么建图不会神奇地修复这些问题。 它通常只会把原本分散的问题集中暴露出来。

一个很重要的实践原则:图只建高价值关系

Graph RAG 的关键不是“图越全越好”,而是“哪些关系值得进入图”。

真正有价值的边,通常具备几个特点:

  • 高频出现在用户问题里
  • 对答案路径有决定性作用
  • 能明显减少检索歧义
  • 在原文本里不容易被稳定拼接
  • 具有较强业务语义

例如企业场景中的这些关系通常就很有价值:

  • 汇报关系
  • 部门归属
  • 项目负责人
  • 系统依赖
  • 文档引用
  • 事故影响范围

而一些过于细碎、描述性、低复用的关系,未必值得进图。 因为每多一种边,你就多一份抽取、校验、更新和查询成本。

所以,更实用的做法往往不是“尽量全量结构化”,而是:

只把那些真正能改善检索与推理质量的关系抽出来。

小结

Graph RAG 的意义,不在于给 RAG 加一个“更酷的数据库”,而在于补足纯向量范式在关系表达上的天然不足。

当问题依赖的是:

  • 实体之间的连接
  • 明确的多跳路径
  • 层级和依赖结构
  • 可追溯的关系链

那么 Graph RAG 往往比单纯的向量召回更稳、更可解释,也更接近问题本身的结构。

但它同样不是默认答案。

它的代价包括:

  • 更高的构建成本
  • 更复杂的 schema 设计
  • 更难的增量更新
  • 更高的抽取质量要求
  • 更重的评估与维护负担

因此,更克制的结论应该是:

Graph RAG 不是用来替代 Vector RAG 的,而是当知识天然长成“图”、问题天然需要“走关系链”时,对 RAG 的一次必要补足。

如果前几篇更多是在讨论“如何把文本检索做准”,这一篇则是在讨论:

当知识的关键不再只是文本片段,而是片段背后的实体关系时,RAG 应该如何升级。

这也正好引向下一篇: 当模型上下文窗口越来越大时,RAG 还是不是必要?长上下文和 RAG,到底是替代关系,还是协作关系?

核心概念速查

概念一句话说明
Knowledge Graph用实体、关系、属性把知识表示成节点和边
Graph RAG将图遍历与文本/向量检索结合,用结构补足语义检索
多跳推理沿着多段实体关系逐步到达答案,而不是一次召回即得
Local Search围绕具体实体和局部子图做精确检索,适合事实问题
Global Search在社区摘要或高层主题表示上做检索,适合概括性问题
Community Detection把高度相关的节点聚成主题社区,用于全局理解与摘要
Hybrid RAG让图负责关系约束,让向量负责语义召回与文本证据
最大难点不是“建图”,而是 schema、实体归一化、增量更新与关系可信度
实践原则只为高价值关系建图,先小规模验证收益,再渐进式引入