跳到主要内容

检索增强生成 — 从闭卷考试到开卷考试

这一章讲三件事: 为什么「更大的模型」解决不了知识问题;一个 RAG 系统的六个模块各自在干什么;流程怎么编排(像导演排戏一样决定先演哪段)、模块怎么训练、系统怎么评估。 一句话定位: 智能体给了模型手脚,这一章给模型配一个随开随查的图书馆。

1. 为什么需要 RAG:知识的天花板

两个数字说清问题的严重性。研究显示,模型要在预训练数据里见过同一知识点约 1000 次,才能比较准确地记住它;而 GPT-4 Turbo 在本科低年级知识点记忆测试中的成绩也只有 73.6%1。指望参数背下所有知识,既记不全(长尾知识)、又记不新(训练截止日之后的世界)、还经常编造(幻觉)。

RAG(Retrieval-Augmented Generation)的解法是把问题的性质改掉:回答前先检索外部知识库,把查到的内容和问题一起交给模型。书里有个精确的类比——从「闭卷考试」变成「阅读理解」:模型不再靠记忆答题,而是看着材料作答2。形式化地写,就是建立「在给定数据 D 上,从问题 Q 到答案 A 的映射」。

这个改法已经催生了一整类产品:AI 搜索。2023 年起 Bing AI、Perplexity、Bard、Kimi、秘塔相继落地——它们不再只是「信息检索工具」,而是「答案引擎」:直接生成带分析和出处的答案3

2. 先给任务分级:难度完全不同

不是所有问题对 RAG 的要求一样。书里按认知层次分四级,每一级的瓶颈不同4:

层级例子瓶颈
1 显性事实「中国最长的河是哪条?」答案明文写在某个片段里检索的效率与精度
2 隐性事实「计算机学院和法学院都在一个校区吗?」要查两个事实再对比多次检索 + 聚合,自适应检索量
3 可解释推理按《胸痛管理指南》对具体病例给诊断建议把文档里的决策规则融入提示
4 隐性推理「当前经济形势将如何影响该公司?」推理方法藏在分散的数据里逻辑检索与跨源综合

看难度的现实意义:市面上大量 RAG 教程只解决第 1 级;你的业务问题落在哪一级,决定该花力气在检索还是推理编排上。

3. 六个模块:一条查询的完整旅程

书里采用模块化 RAG(Modular RAG)架构——系统拆成独立协作的模块,模块里再分子模块,底层是可组合的操作符;整个系统可以画成一张计算图5

主走查:「复旦大学在哪里?」的六站之旅

用户输入:「复旦大学在哪里?」

① 检索前优化:查询改写模块把它改写成「复旦大学地址」
(原始问句口语化,直接拿去匹配文档效率低)

② 检索:稀疏检索(BM25 按词匹配)和稠密检索(语义向量)
各自召回一批候选,混合排序

③ 检索后优化:重排序模型把最相关的片段排到最前;
压缩模块删掉片段里的废话,省上下文

④ 生成:问题 + 若干片段拼成提示词,交给语言模型。
书里的真实示例里,四个片段(校名出处、吴淞办学、
上医前身、2000 年合并)被 <chunk> 标签包好塞进提示,
模型据此组织出「复旦公学 1905 年创立……」的回答

⑤ 编排(后台):调度模块判断检索结果够不够回答,
不够就再检索一轮

图说:①②④ 的处理形态变化是书里给的机制;
六站对应 Modular RAG 的六个模块,顺序可编排、可循环。

逐站展开关键机制。

索引(资料入库时):核心决策是「块切多大」。大块上下文全但噪声多、算力贵;小块精准但语义割裂。三种优化:滑动窗口(相邻块留重叠区,语义平滑过渡)、语义切分(按相邻段落的向量相似度动态决定在哪断开)、小到大(检索用小块保精准,命中后取它挂靠的大块/父块喂给模型,两头便宜都占)6。结构化组织再加两层:层次化索引(父节点存子块摘要,先粗后细)和知识图谱索引(节点是文档结构单元、边是语义关系)7

检索前(理解用户):用户的问题常常措辞含混。查询扩展把「复旦大学」扩成多个查询变体并行检索;查询转换把它改写成更适合检索的形式;最难的一种是 HyDE——先让模型生成一份「假设的答案文档」,再拿这份假文档去查真文档,把「问题匹配答案」变成「答案匹配答案」;反向 HyDE 则给每个文档预生成假设问题8。查询结构化处理另一类需求:把自然语言转成 SQL(数据库查询语句)或图查询语言,直接查表格和知识图谱。

检索(找资料):稀疏检索(TF-IDF——词频统计法——和 BM25 这类按词频统计匹配的老牌方法)按词面统计匹配,快、便宜,但认不出「汽车」和「车辆」是近义。

稠密检索把查询和文档都编码成高维(维度很多的)语义向量,懂同义词,但计算存储贵。

工程上几乎总是混合:稀疏做粗排快速筛出候选,稠密或重排(把初筛结果再排一遍序)模型做精排9

检索后(喂料之前):三件事。重排序:规则法(按相关性、多样性,或 MMR——兼顾「与查询相关」和「彼此不重复」)或模型法。压缩:大模型和人类一样「中间遗忘」(lost in the middle)——长上下文里中间部分最容易被忽略,所以先用小模型删掉片段里的低信息内容;也可以让大模型自己审查相关性(法律系统 Chatlaw 的做法)10内容选择:按自信息量逐词打分,删掉信息价值低的部分。

生成(写答案):机制上没有新东西——就是带着检索材料做普通的条件生成。价值在于知识细节不再需要模型准确记忆:校史年份这类内容,片段里写着,模型照着说就行。

编排(总调度):路由决定一条查询走哪条处理管道(按关键词匹配、按语义意图,或两者加权);调度决定要不要再检索一轮(规则判定:生成的词元概率都低于阈值就重新生成;或让 LLM 自己判断;或微调模型输出特殊标记(预先定义的暗号)来触发检索,如 Self-RAG 一类方法)11;融合负责合并多路结果,倒数排名融合(RRF)按「排名倒数求和」把多路检索结果合成一个列表。

4. 流程拓扑与训练优化

六个模块怎么连,形成四种典型拓扑12:线性(查询→检索→生成,最朴素;加上查询改写就是「重写-检索-阅读」)、条件(路由按问题性质切管道)、分支(并行多路:多个子查询各自检索生成再融合)、循环(检索-生成互相依赖、可回退)。

循环内部再分三型。迭代(一遍遍重来)型:每轮都重新检索。

递归(一层层往深里钻)型:沿着依赖链逐层深入。

自适应型:让模型自己决定何时检索、何时收工,已经带上智能体味道。

模块本身也可以训练。书里挑了四个代表:RQ-RAG 训练模型在生成中主动发出改写/分解/消歧查询,最后按困惑度或置信度从多条候选轨迹里挑答案;RAG-HAT 专治幻觉——训练一个能指出「哪里幻觉、为何幻觉、怎么防御」的检测模型,用它的结果构造偏好数据做 DPO,还设计了「过于谨慎惩罚」防止模型为了少幻觉而把答案越写越短,最终造出 19721 对训练样本;JudgeRank 做零样本重排,让模型显式走三步推理(分析问题→摘要文档→判断相关)再打分;RankRAG 最激进——一个模型同时学会重排和生成,把两件事统一成同一种问答格式训练13

5. 怎么评估一个 RAG 系统

RAG 评估的难点在「要分着看还要合着看」。检索组件看五项:相关性、准确性、覆盖与多样性、动态适应性(知识库更新后能否跟上)、排序能力(MRR、MAP 这类按排名给分的尺子)。

生成组件看六项,核心是忠实度(faithfulness)——回答是否真的基于检索到的内容,而不是模型又自由发挥了。

整体还要看协作效果、任务完成度、响应速度与鲁棒(扛得住意外输入)性14

打分尺子分两族:基于排名的(MRR/MAP/P@k),和基于二元判定的。

精确率(报出来的里有多少是真的)= 真阳性/(真阳性+假阳性)。

召回率(该找的里找到了多少)则衡量找得全不全。

6. 作者的判断与证据

  • 有证据的: 1000 次曝光、73.6% 记忆成绩、各模块的代表方法与数字(RAG-HAT 的 19721 对、RankRAG 的两阶段),均有文献出处。
  • 作者的判断: 采用 Modular RAG 框架组织全章(引自同济团队的工作),这个框架的好处是把庞杂的方法放进统一坐标系;但它是一种「事后整理」,不代表所有系统都该按六模块设计。
  • 书里的坦白: 检索不到相关文档时,模型「往往仍尝试生成输出」,这是幻觉的重要来源之一;HyDE 这类补救会增加计算成本——没有免费的对症药。

7. 边界与局限

  • 书中的 LangChain 相关代码(上一章)与本章的 Modular RAG 都演进极快,方法名(尤其编排模块)尚未完全标准化。
  • 多模态 RAG(MuRAG、REVEAL 等)只有一段综述,工程细节缺失。
  • 评估一节给了打分尺子清单,没给「尺子达到多少算能上线」的行业基准——这本来也没有共识。
  • 图数据库/Text-to-Cypher 一线只点到名字,深度实现要另找资料。

8. 可带走的

  1. RAG 改变的是任务性质:闭卷背答案 → 开卷看材料作答;幻觉的治本思路不是「更大的模型」而是「给它材料」;

  2. 先给业务问题分级(显性事实/隐性事实/可解释推理/隐性推理),再决定投入——只按第 1 级设计的系统会被第 2 级问题击穿;

  3. 分块(把文档切成小块)没有万能尺寸;「小到大」——检索用小块、生成挂大块——是两头兼顾的标准答案;

  4. 检索前最值得先做的是查询改写;HyDE 用「假答案查真文档」是应对口语化查询的利器;

  5. 稀疏+稠密混合检索是默认配置:BM25 管关键词,向量管语义;

  6. 「中间遗忘」提醒你:检索到 20 段不如精选 5 段——重排和压缩不是可选项;

  7. 循环拓扑(检索↔生成互相喂)是应对复杂多跳问题的方向,自适应检索已经和智能体合流

  8. 评估 RAG 必须分侧:检索侧看 MRR/MAP,生成侧看忠实度——只用整条流水线的准确率会掩盖「查到了但没用上」和「没查到」两种完全不同的病。

9. 原文地图

主题原书章原文位置
知识记忆天花板9 检索增强生成text/09-ch09.txt:260(搜「1000 次」)
闭卷变开卷9 检索增强生成text/09-ch09.txt:276(搜「闭卷」)
AI 搜索产品9 检索增强生成text/09-ch09.txt:297(搜「Perplexity」)
任务四级9 检索增强生成text/09-ch09.txt:380(搜「显性事实查询」)
L2 例9 检索增强生成text/09-ch09.txt:420(搜「法学院」)
L3 胸痛指南例9 检索增强生成text/09-ch09.txt:442(搜「胸痛管理指南」)
检索质量挑战与 HyDE9 检索增强生成text/09-ch09.txt:494(搜「伪文档」)
Modular RAG 三层级9 检索增强生成text/09-ch09.txt:618(搜「三个层级」)
分块权衡9 检索增强生成text/09-ch09.txt:630(搜「片段的大小」)
滑动窗口/语义块9 检索增强生成text/09-ch09.txt:650(搜「滑动窗口」) · text/09-ch09.txt:671(搜「语义块切分」)
小到大9 检索增强生成text/09-ch09.txt:695(搜「Small-to-Big」)
层次化/KG 索引9 检索增强生成text/09-ch09.txt:712(搜「层次化索引」) · text/09-ch09.txt:740(搜「知识图谱索引」)
查询扩展与 Multi-Query9 检索增强生成text/09-ch09.txt:769(搜「查询扩展」) · text/09-ch09.txt:777(搜「Multi-Query」)
HyDE 与反向9 检索增强生成text/09-ch09.txt:817(搜「HyDE」)
Text-to-SQL9 检索增强生成text/09-ch09.txt:837(搜「Text-to-SQL」)
稀疏/稠密/混合9 检索增强生成text/09-ch09.txt:849(搜「稀疏检索」) · text/09-ch09.txt:900(搜「混合检索」)
中间遗忘9 检索增强生成text/09-ch09.txt:944(搜「lost in」)
重排序与 MMR9 检索增强生成text/09-ch09.txt:954(搜「重排序」)
压缩与自信息量9 检索增强生成text/09-ch09.txt:986(搜「LLM-Critique」) · text/09-ch09.txt:997(搜「自信息量」)
复旦生成例9 检索增强生成text/09-ch09.txt:1021(搜「日月光华」)
路由/调度/融合9 检索增强生成text/09-ch09.txt:1067(搜「路由」) · text/09-ch09.txt:1138(搜「Toolformer」) · text/09-ch09.txt:1173(搜「倒数排名融合」)
四种拓扑9 检索增强生成text/09-ch09.txt:1189(搜「线性模式」) · text/09-ch09.txt:1187(搜「循环模式」)
RQ-RAG 三种选择9 检索增强生成text/09-ch09.txt:1494(搜「RQ-RAG」)
RAG-HAT 与 OCP9 检索增强生成text/09-ch09.txt:1642(搜「过于谨慎惩罚」)
JudgeRank 三步9 检索增强生成text/09-ch09.txt:1668(搜「JudgeRank」)
RankRAG9 检索增强生成text/09-ch09.txt:1754(搜「RankRAG」)
评估目标9 检索增强生成text/09-ch09.txt:1806(搜「评估」)

Footnotes

  1. 出处:「9 检索增强生成」第 260 段(text/09-ch09.txt:260,搜「1000 次」)。

  2. 出处:「9 检索增强生成」第 276 段(text/09-ch09.txt:276,搜「闭卷」)。

  3. 出处:「9 检索增强生成」第 297 段(text/09-ch09.txt:297,搜「Perplexity」)。

  4. 出处:「9 检索增强生成」第 380 段(text/09-ch09.txt:380,搜「显性事实查询」)。

  5. 出处:「9 检索增强生成」第 618 段(text/09-ch09.txt:618,搜「三个层级」)。

  6. 出处:「9 检索增强生成」第 630 段(text/09-ch09.txt:630,搜「片段的大小」)、第 650 段(text/09-ch09.txt:650,搜「滑动窗口」)与第 695 段(text/09-ch09.txt:695,搜「Small-to-Big」)。

  7. 出处:「9 检索增强生成」第 712 段(text/09-ch09.txt:712,搜「层次化索引」)与第 740 段(text/09-ch09.txt:740,搜「知识图谱索引」)。

  8. 出处:「9 检索增强生成」第 817 段(text/09-ch09.txt:817,搜「HyDE」)。

  9. 出处:「9 检索增强生成」第 849 段(text/09-ch09.txt:849,搜「稀疏检索」)与第 900 段(text/09-ch09.txt:900,搜「混合检索」)。

  10. 出处:「9 检索增强生成」第 944 段(text/09-ch09.txt:944,搜「lost in」)与第 986 段(text/09-ch09.txt:986,搜「LLM-Critique」)。

  11. 出处:「9 检索增强生成」第 1138 段(text/09-ch09.txt:1138,搜「Toolformer」)。

  12. 出处:「9 检索增强生成」第 1189 段(text/09-ch09.txt:1189,搜「线性模式」)与第 1187 段(text/09-ch09.txt:1187,搜「循环模式」)。

  13. 出处:「9 检索增强生成」第 1642 段(text/09-ch09.txt:1642,搜「过于谨慎惩罚」)、第 1668 段(text/09-ch09.txt:1668,搜「JudgeRank」)与第 1754 段(text/09-ch09.txt:1754,搜「RankRAG」)。

  14. 出处:「9 检索增强生成」第 1806 段(text/09-ch09.txt:1806,搜「评估」)。