AI++
工程实践·进阶·12 分钟阅读·AI++ 编辑部

进阶 RAG:从「检索即塞文档」到「会判断、会推理」的检索增强

朴素 RAG(检索 top-k 片段塞进 prompt)在简单问答上有效,但面对多跳推理、全局摘要、信息冲突时力不从心。 进阶 RAG 沿两条线演进:Self-RAG 让模型学会「何时检索、检索是否相关、答案是否有据」;GraphRAG 把文档结构化成知识图谱,支持跨文档的全局问答。 它们把检索增强从「外挂记忆」升级成「会思考的检索-推理系统」,是 RAG 走向生产可靠的关键。

一句话结论

进阶 RAG 不再是「检索一段文本塞给模型」那么简单——Self-RAG 让模型学会自己决定何时检索、判断检索结果是否相关、答案是否被证据支持;GraphRAG 则把语料结构化成知识图谱,让模型能回答需要跨文档综合的全局问题。两者分别从「检索决策」和「检索结构」两个方向,把 RAG 从外挂记忆升级成会判断、会推理的系统。

背景问题

先说清楚朴素 RAG(Naive RAG)的工作方式:

  1. 把文档切成 chunk,每个 chunk 算个 embedding 存进向量库。
  2. 用户提问时,把问题 embedding,从向量库召回 top-k 最相似的 chunk。
  3. 把这些 chunk 塞进 prompt,让模型基于它们生成答案。

这套在「事实问答」上有效——「X 公司的 CEO 是谁」这种能在单个 chunk 找到答案的。但它在几类场景上明显失效:

1. 检索质量不稳

向量相似 ≠ 语义相关。一个表面相似但答非所问的 chunk 会排到 top-k,模型要么被误导、要么忽略它。「Lost in the middle」现象还表明:长 prompt 中间的 chunk 模型反而容易忽略,位置敏感。

2. 多跳推理做不了

「A 公司收购了 B 公司,B 公司的创始人之前在哪工作?」答案分散在多个 chunk 里,需要先找 A 收购 B、再找 B 的创始人、再找其前雇主。朴素 top-k 召回很可能只命中其中一个 chunk,模型拿不到完整链条。

3. 全局 / 摘要类问题无解

「这 100 份文档的核心论点是什么?」朴素 RAG 召回几个 chunk 根本覆盖不了全局信息,模型只能基于局部片段瞎猜。

4. 没有自我纠错

模型不知道自己检索得够不够、答案有没有依据。检索错了就错了,没有回头机制。

这些短板让朴素 RAG 在生产里可靠性不足——尤其在需要严谨引用、多源综合的场景。进阶 RAG 就是为补这些缺口发展的。

核心思路

进阶 RAG 沿两条主要方向演进,对应检索系统的两个核心问题:「该不该信、该怎么用检索结果」和「该检索什么结构的信息」。

方向一:Self-RAG —— 让模型学会反思检索

Self-RAG(Asai et al., 2023)的核心思想:把「检索决策」和「检索结果评估」交给模型自己,通过训练让模型学会反思。

它引入几种「反思 token」:

  • Retrieve token:决定是否需要检索([Retrieve]/[No Retrieve])。简单问题可能不需要检索,复杂问题才触发。
  • IsRel token:判断检索回来的 chunk 是否与问题相关([Relevant]/[Irrelevant])。
  • IsSup token:判断生成的回答是否被检索证据支持([Fully supported]/[Partly supported]/[No support])。
  • IsUse token:判断回答整体是否有用([Utility])。

训练时,用现成模型生成这些反思 token 的标注(或规则构造),让模型学会预测它们。推理时,模型自主走这样的流程:

  1. 看到问题 → 预测 Retrieve token,决定是否检索。
  2. 若检索 → 拿到多个 chunk → 对每个预测 IsRel,过滤不相关的。
  3. 基于相关 chunk 生成候选回答 → 预测 IsSup 检查证据支持度。
  4. 多次生成 + 用 IsSup/IsUse 打分 → 选最佳回答。

关键区别:朴素 RAG 是「无脑检索 + 无脑生成」,Self-RAG 是「按需检索 + 带判据生成」。这让模型能:

  • 简单问题跳过检索(省成本、避免误导)。
  • 检索结果不好时主动重试或多轮检索。
  • 输出时附带「证据支持度」,让答案可审计。

方向二:GraphRAG —— 把语料结构化成图谱

GraphRAG(Microsoft Research, 2024)解决的是另一类问题:全局、跨文档的综合问答

朴素 RAG 的根本限制是「以 chunk 为最小检索单元」,无法回答需要全局视角的问题。GraphRAG 的思路是:先把语料结构化成知识图谱,检索在图结构上进行。

它的流程:

  1. 图谱构建:用 LLM 从文档里抽取实体和关系,构建知识图谱。节点是实体,边是关系。
  2. 社区检测:用图算法(如 Leiden)把图谱分成「社区」——主题相关的实体聚成一组。
  3. 社区摘要:为每个社区生成一段摘要,描述这组实体和关系讲的是什么。
  4. 检索与回答
    • 局部问答(具体实体问题):在图上找相关实体及其邻居,类似传统 RAG 但基于图结构。
    • 全局问答(「这批文档主要讨论什么」):遍历所有社区摘要,让模型综合各社区摘要作答。

GraphRAG 的价值:

  • 全局摘要类问题有了可行解——社区摘要提供了「压缩后的全局视角」。
  • 多跳关系天然支持——图遍历本身就是多跳。
  • 实体消歧、跨文档关联比纯向量相似更准。

代价是构建图谱要消耗大量 LLM 调用(抽取实体、生成摘要),前期投入高。它适合「一次构建、多次查询」的语料,不适合频繁变更的场景。

关键技术点

1. Self-RAG 的训练成本与质量

Self-RAG 要训出一个会反思的模型,需要:

  • 高质量的反思 token 标注(用强模型蒸馏或规则构造)。
  • SFT 让模型学会预测反思 token。
  • 可选的 RL(如 DPO/GRPO)进一步提升反思质量。

门槛比朴素 RAG(无需训练,直接用现成模型)高不少。这也是 Self-RAG 在中小团队落地慢的原因——它不只是工程,还涉及训练。

2. GraphRAG 的图谱质量决定上限

GraphRAG 的效果严重依赖:

  • 实体抽取质量:抽取漏了、错了,图就残缺。LLM 抽取在专业领域(医学、法律)容易漏术语。
  • 关系定义:什么算「关系」需要 domain 设计,泛化关系图会噪声大。
  • 社区粒度:社区太大→摘要太泛;太小→摘要太碎。需要调参。

这意味着 GraphRAG 不是「接上就能用」的,它需要针对语料做图谱构建的工程化调优。

3. 检索增强的「检索」本身在被重新定义

进阶 RAG 揭示一个趋势:「检索」不再只是向量相似召回。它可以是:

  • 结构化检索:图遍历、SQL 查询、知识库查询。
  • 多路召回 + 重排:向量 + BM25 + 图,再用 cross-encoder 重排。
  • 多查询融合(RAG-Fusion):用 LLM 把一个问题改写成多个变体,分别召回,用 reciprocal rank fusion 合并。
  • 假设文档检索(HyDE):先让 LLM 生成一个「假设答案」,用它的 embedding 去检索(假设答案比问题更接近目标 chunk 的语义)。

「检索-生成」的边界在模糊——检索本身越来越多地调用 LLM,生成也越来越多地反馈到检索。

4. 长上下文模型 vs RAG 的关系

一个常被问的问题:有了 1M 上下文模型,还需要 RAG 吗?

答案是:需要,但角色变了。

  • 长上下文模型能塞进更多内容,但「塞得进」不等于「用得好」——lost in the middle、注意力分散、成本随长度上升。
  • RAG 的价值从「让模型看到」转向「让模型看到对的、少的、结构化的信息」。
  • 进阶 RAG + 长上下文模型的组合(按需检索 + 长窗口精读)比单纯堆上下文更经济、更可靠。

5. Agentic RAG:把检索做成工具调用

最新趋势是把 RAG 包装成 agent 可调用的工具:模型自主决定调用哪个检索工具(向量库、图谱、SQL)、调用几次、如何组合结果。这让 RAG 从「固定 pipeline」变成「agent 的技能」,灵活度大幅提升,但也带来可控性挑战。

效果与局限

效果:

  • Self-RAG 在事实性、引用准确性上明显优于朴素 RAG,尤其在需要严谨引用的场景(医疗、法律问答)。论文显示在多个 benchmark 上幻觉率显著下降。
  • GraphRAG 在全局摘要、多跳推理类问题上提供朴素 RAG 无法企及的能力,已在企业知识库、研究文献分析等场景落地。
  • 多路召回 + 重排、HyDE、RAG-Fusion 等「轻量进阶」组合,在不训练模型的前提下能把 RAG 质量提升一个台阶,是性价比最高的改进方向。

局限:

  • Self-RAG 训练门槛高。需要训练反思能力,对中小团队不友好;用闭源模型 + prompt 工程模拟反思是折中方案但效果打折。
  • GraphRAG 构建成本高。图谱构建的 LLM 调用成本可观,且语料变更要重建,不适合高频更新场景。
  • 延迟增加。Self-RAG 的多轮检索、GraphRAG 的图遍历都增加推理延迟,实时场景受限。
  • 评估困难。RAG 系统的评估(检索质量、生成质量、引用准确性)需要专门框架(如 RAGAS),没有统一标准。
  • 不是所有场景都需要进阶。简单 FAQ、单文档问答,朴素 RAG 仍是最优解——进阶方法的复杂度反而是负担。

谁该关心

  • 做企业知识库 / 智能客服的人:进阶 RAG 是把「能用」提升到「可靠」的关键,尤其需要引用准确性、多源综合的场景。
  • RAG 应用工程师:从朴素 RAG 到进阶 RAG 的升级路径(多路召回 + 重排 → Self-RAG 式反思 → GraphRAG 式结构化)是技能树的必修。
  • 研究检索系统的人:进阶 RAG 把「检索」从信息检索问题变成了「检索 + 推理 + 决策」的复合问题,是新研究热点。
  • 评估 AI 应用可靠性的人:RAG 的可审计性(引用、证据支持度)让它比纯生成更适合需要可追溯的场景,进阶 RAG 强化了这个优势。

一个判断:进阶 RAG 不是要取代朴素 RAG,而是按问题复杂度分层——简单问题用朴素 RAG(甚至不用 RAG),中等问题用「多路召回 + 重排 + HyDE」的轻量进阶,复杂问题用 Self-RAG / GraphRAG / Agentic RAG。理解每层方法的适用边界,比追求「最先进」更重要。RAG 的未来大概率是「agent + 多种检索技能 + 反思」的组合,而非某一种单一方法的胜利。

RAG检索增强知识图谱多跳推理