跳到主要内容

生产环境中的 GraphRAG:当向量检索遇到瓶颈时

· 阅读需 11 分钟
Tian Pan
Software Engineer

你的向量搜索在基准测试中表现出色,但用户依然感到沮丧。

失败模式非常微妙:用户询问“我们的哪些供应商卷入了影响与 Martinez 账户所在地区相同客户的事件?”你的嵌入模型检索到了事故记录。它们检索到了供应商合同。它们检索到了客户账户。但它们是以相互孤立的文档形式检索出来的,LLM 必须在上下文中理清这些关系——而这些关系横跨了实体图(entity graph)中的三个跳数(hops)。当每个查询涉及五个或更多实体时,如果没有关系结构,准确性会降至接近零。而有了关系结构,性能则保持稳定。

这正是知识图谱增强检索——GraphRAG——旨在解决的瓶颈。它不是向量搜索的直接替代品。它是一个具有不同成本结构、不同失败模式、以及在特定类别查询中具有压倒性优势的不同系统。

GraphRAG 究竟是什么(它并非单一事物)

“GraphRAG” 一词涵盖了一系列架构,而非单一系统。了解你正在评估的是哪种变体,与评估基准测试本身同样重要。

类型 1:图增强向量搜索(Graph-Enhanced Vector Search)。 最轻量级的选项。你在现有的向量索引之上添加图元数据——实体标签、关系标签——作为结构化过滤器。不需要 LLM 驱动的实体提取。图不被直接查询;它约束了向量相似性搜索。对于涉及已知实体类型的查询,这能以极低的复杂度获得显著收益。

类型 2:图引导检索(Graph-Guided Retrieval)。 系统识别用户查询中的实体,遍历图以收集 N 跳范围内的相关实体,然后检索与这些实体关联的文档。向量相似性被遍历所取代或增强。这在跨文档推理方面胜出——例如找到分布在三个文档中的证据,这些文档之间没有语义重叠,但共享关键的实体关系。

类型 3:微软风格的全量 GraphRAG(Microsoft-Style Full GraphRAG)。 系统使用 LLM 从每个文档中提取实体和关系,对生成的图运行社区检测(community detection),并为每个社区构建分层摘要。在查询时,它根据查询范围路由到适当的社区层级。这是微软开源 GraphRAG 版本背后的架构,也是大多数基准测试论文中引用的架构。

类型 4:时序知识图谱(Temporal Knowledge Graphs)。 专门为智能体(agent)记忆构建。每个事实都带有时间戳;矛盾的事实会创建显式的更替(supersedes)关系。这就是 Neo4j 的 Graphiti 所设计的用途。它不是一个文档检索系统——将其用于静态文档库的问答是选错了工具。

大多数评估 “GraphRAG” 的团队实际上是在将类型 3 与普通向量 RAG 进行比较,然后纳闷为什么成本这么高。

令人不安的成本现状

对于一个 500 页的文档库,索引成本大致细分如下:

方法索引成本耗时
向量 RAG5 美元以下几分钟
LightRAG约 0.50 美元约 3 分钟
微软 GraphRAG50–200 美元约 45 分钟

类型 3 GraphRAG 的成本差距完全源于 LLM 驱动的实体提取,它消耗了约 58% 的总索引 Token。你是在付费让 LLM 阅读每个文档并生成结构化的实体关系图。这个过程不是线性扩展的——它随文档数量和实体密度而扩展。

微软在 2025 年 1 月通过“动态社区选择”(Dynamic Community Selection)解决了这个问题,在保持答案质量的同时减少了 79% 的 Token 使用量。他们的 LazyGraphRAG 变体将社区摘要推迟到查询时进行,以标准索引成本的约 0.1% 实现了相当的答案质量。权衡之处在于:由于系统需要按需构建摘要,查询延迟增加了 2–8 秒。

对于语料库变动频繁的团队,LazyGraphRAG 的方法通常比预构建容易过期的摘要更实用。对于语料库稳定且读请求密集的系统,预计算摘要则是值得的。

LightRAG 处于一个务实的中间地带——以 1/100 的成本实现全量 GraphRAG 约 70–90% 的性能,它使用的是简单的扁平图结构而非分层社区。其弱点在于广泛的分析型查询(例如“总结第三季度所有事故报告的主题”),在这方面全量 GraphRAG 的分层社区结构更胜一筹。

图检索特有的失败模式

向量 RAG 的失败是乏味且统一的:因为查询在语义上不匹配,所以没有检索到正确的切片(chunk)。你可以通过查看检索召回率(recall)来发现这些失败。

GraphRAG 的失败则多种多样且更难监测:

实体提取偏差。 从文档中提取实体的 LLM 准确率为 60–85%,具体取决于领域的专业性。在通用英语文本中,它表现良好。在专业领域——如医疗计费代码、法律合同条款、供应链零件编号——提取准确性会显著下降,且这些错误并非随机产生。类似的错误会一致地出现在同类文档中,因此你的覆盖漏洞是系统性的,而非随机的。

图谱衰减。 如果没有自动刷新,生产环境中的知识图谱每季度会偏离事实真相 15–20%。团队往往低估了维护负担:初始构建需要数周,但保持新鲜度需要自动化流水线来检测文档更改、重新提取受影响的实体,并在不破坏现有图谱的情况下更新关系。据团队反馈,在图谱新鲜度维护上投入的工程时间是初始构建的 2–3 倍。

社区摘要陈旧。 如果你使用预构建的社区摘要,这些摘要反映的是索引时的文档状态。数据系统中改变了供应商关系的客户投诉不会更新包含该供应商的社区摘要。图的结构链接会更新(如果你刷新它们),但 LLM 生成的摘要不会自动更新——它们需要重新运行社区检测和摘要生成。

混合系统中的路由失败。 大多数生产部署对简单查询使用向量 RAG,对复杂查询使用图检索。路由逻辑——即决定走哪条路径——本身就是一个故障点。一个被错误路由的复杂查询会进入向量搜索,并返回一个看似合理但并不完整的答案。用户看不到路由决策;他们看到的只是一个自信但错误的回答。

基准测试究竟显示了什么

向量 RAG 和 GraphRAG 之间的性能表现差异并非“GraphRAG 全面胜出”。具体数据更加明确:

  • 对于 特定文档搜索(检索确切的政策,查找特定的合同条款),向量 RAG 胜出:54% 对比 GraphRAG 的 35%。
  • 对于 聚合查询(过去 12 个月内有多少供应商发生过事故?),GraphRAG 检索到相关结果的频率高出 3 倍:23% 对比 8%。
  • 对于 跨文档推理(考虑到区域重叠,哪些客户会受到该供应商事故的影响?),GraphRAG 的优势达到 4 倍:33% 对比 8%。

在某些 GraphRAG 基准测试中出现的 3.4 倍整体准确率优势是真实的,但如果没有这些细分数据,就会产生误导。如果你的查询分布偏向于特定文档检索,那么这种优势并不适用。如果你的查询需要跨实体关系的多跳推理,那么优势将是非常巨大的。

何时真正使用 Graph RAG

一个实际的决策框架:

如果你的领域中只有不到 1,000 个实体且关系简单,请先从向量 RAG 开始。在向量索引上使用治理良好的元数据过滤器,其表现将优于 GraphRAG,且成本仅为其十分之一左右。这涵盖了大多数企业使用场景。

当你看到围绕已知实体类型的检索失败时,添加第一类图增强(即从现有的结构化数据——如 CRM、组织架构图、产品目录中提取元数据过滤器)。这是实现受图启发的检索的最廉价路径,无需支付实体提取成本。

当你的日志中出现特定的多跳查询模式,且向量搜索明显无法满足需求时,评估第二类图引导检索。不要为假设的未来查询构建架构——先在你的查询日志中找到真实的查询。

当你需要对庞大的半结构化语料库进行全局摘要,且你领域内的特定实体类型能从显式关系建模中获益时,考虑 LightRAG 或完整的 GraphRAG。医疗保健、法律、金融合规和供应链是经常达到这一门槛的领域。

仅在需要跟踪知识随时间演变的智能体记忆系统中,使用时序图架构 (Graphiti)。这与文档检索是不同的问题。

毁掉试点项目的图维护问题

GraphRAG 试点项目通常会成功。但 GraphRAG 的生产部署往往会悄无声息地失败——不是因为检索质量立即下降,而是因为低估了图维护的开销。

每一次文档更新都需要更新实体提取。每一次关系变更都需要更新图遍历结构。每一种新的文档类型都需要为该类型调整实体提取提示词。图不是一个能自动吸收写入的数据存储;它是一个衍生制品,当底层数据发生变化时,必须对其进行重建或增量更新。

在生产环境中取得成功的团队将知识图谱视为一等公民的数据产品——拥有 Schema 治理、质量监控、新鲜度 SLA 以及用于检测和刷新的自动化管道。而那些将其视为一次性部署、偶尔维护的基础设施的团队会发现,在两个季度内,图的准确性就会漂移到失去实用价值的程度。

阶段性迁移路径

在了解哪些查询真正需要它之前就构建完整的 GraphRAG 是一个昂贵的错误。更廉价的路径是:

  1. 检测你当前的向量 RAG 系统。 记录查询、检索到的分块以及用户满意度信号。识别用户感到沮丧或多次重复询问同一个问题的特定查询模式。

  2. 对失败模式进行分类。 区分语义不匹配失败(检索到了错误的分块)和关系推理失败(检索到了正确的分块但遗漏了关系)。只有关系型失败才能从图增强中获益。

  3. 从第一类开始。 如果你在现有系统中拥有结构化的实体数据,请将其作为元数据添加到向量索引中。这只需几天的工作,通常能解决 30–50% 的关系型失败。

  4. 运行针对性的第二类试点。 对于第一类无法解决的查询模式,构建一个仅涵盖这些查询所涉及实体类型的窄图。不要构建全面的企业知识图谱。构建能解决最高影响力故障的最小图谱。

  5. 在扩展前评估维护成本。 90 天后,衡量投入了多少工程精力来保持该窄图的新鲜度。将该成本推演到你正在考虑的更广泛的图谱上。如果维护成本在算力或人力上可行,则进行扩展。如果不成比例,那么你就找到了你的天花板。

GraphRAG 不是 RAG 的升级版——它是一个具有不同失败模式、不同成本和不同运维要求的不同系统。在正确的查询分布上使用并投入正确的维护成本,它可以解决向量搜索无法解决的问题。但在了解查询分布之前就普遍应用,这只是一种昂贵的方式来发现你大多数查询原本就运行得很好。

References:Let's stay in touch and Follow me for more thoughts and updates