跳转至

P1-13.3 通向 RAG(retrieval-augmented generation)的流程

Section ID: P1-13.3 Version: v2026.07.20

在 P1-13.1 中,我们看了把文本(text)表示成向量(vector)的嵌入(embedding)。在 P1-13.2 中,我们看了如何通过相似度搜索(similarity search)找到与问题向量(query vector)接近的文档向量(document vector)。

现在要进入下一个问题:怎样把检索到的文档候选接到 LLM 的回答里? RAG(retrieval-augmented generation) 就是回答这个问题的代表性结构。

RAG 是一种先检索(retrieval)外部资料,再把检索到的内容一起放进生成(generation)输入中以形成回答的结构。

这里最重要的提醒是:RAG 不是“保证正确答案的装置”。它只是为 LLM 增加可参考的上下文(context)。如果检索结果本身有误或不足,回答也会跟着变得不稳。

Part 1 会在这里建立 RAG(retrieval-augmented generation)检索(retrieval)增强(augmentation)生成(generation)parametric memorynon-parametric memory来源追踪(provenance) 的基本区分。13.1 介绍了嵌入,13.2 介绍了相似度搜索,而这里要把这两步连接成 对 LLM 输入上下文的增强。实现细节与服务架构会在后续小节和第 14 章再展开。

这里从概念层面看 RAG 的整体流程。向量数据库(vector database)、索引(index)、近似最近邻(approximate nearest neighbor, ANN)、基于图(graph)的搜索结构会在 P1-13.4 处理。

RAG检索增强生成parametric memoryprovenance 属于不同阶段与不同类型的“记忆资源”。先把它们的作用区分如下:

术语 极简含义 本节中的作用
RAG 把检索结果接到生成输入中的结构 第 13 章的连接阶段
检索 寻找相关文档候选的阶段 准备外部资料
增强 把检索到的文档加入输入上下文的阶段 组成 LLM 的参考资料
生成 依据增强后的输入形成回答的阶段 产出最终响应
parametric memory 存在于模型参数中的内部知识 理解模型单独作答时依赖的内部知识
non-parametric memory 像外部文档库一样可检索的资料 RAG 额外接入的外部知识
provenance 追踪参考了哪些来源的信息 与依据审查相连的要素

这里先把 RAG 是检索与生成的连接外部文档是模型之外的依据来源追踪是额外的检查要素 作为基准线。

P1-14 会继续看 RAG 在实际 AI 服务架构、工具使用(tool use)、agent 结构里放在什么位置。P1-13.3 只专注于:搜索结果是如何被放入 LLM 输入的。

这里也不会把 RAG 介绍成 消除幻觉的装置。重点是明确:RAG 是 把依据候选接进输入 的结构,而验证责任依然存在。

主题 本节要看的问题
检索(retrieval) 要取回哪些外部资料?
增强(augmentation) 取回的资料如何加入输入上下文?
生成(generation) LLM 会基于增强后的输入生成什么?
局限(limit) 为什么 RAG 不能自动保证事实核查?

把检索结果连接到生成上下文的基准

  • 把 RAG(retrieval-augmented generation)理解为结合检索与生成的结构。
  • 说明检索结果会作为 LLM 输入上下文(context)的一部分进入生成过程。
  • 直觉地区分模型内部知识(parametric memory)与外部检索资料(non-parametric memory)。
  • 理解 RAG 可以帮助改善最新性(recency)、依据性(evidence)、来源追踪(provenance),但不能自动保证它们。
  • 为进入 P1-14 的 AI 服务结构做准备。

三个基准

这里不会先讲 RAG 框架怎么使用,而是专注于理解为什么要把检索放在生成之前。阅读本节时,可以用下面三个基准来把握。

基准 为什么重要 本节所需的理解水平
RAG 是连接检索与生成的结构 这能显示“模型独自回答”和“检索增强回答”的差异。 只要理解成它会先找文档,再依据文档来回答即可。
外部文档可以补充参数之外的最新依据 这能区分模型记忆与文档依据。 只要理解成模型可能不知道的新资料,可以从文档里取回来即可。
即使用了 RAG,结果仍需审查 这能防止误解成“接上搜索就自动准确”。 只要理解成系统可能检错文档、也可能解读错误,因此仍需验证即可。

RAG 是先检索再生成

把 RAG 简化到最基本时,可以理解为下面的流程:

用户问题
-> 生成问题嵌入
-> 在文档库中检索相关候选
-> 把检索到的文档片段加入提示词上下文
-> LLM 生成回答

例如,假设用户提问:

提示词为什么不能保证事实性?

搜索系统可以找出与这个问题接近的文档片段。

检索候选 作用
P1-12.3 提示词的限制与评估 提供事实性、依据性与评估标准
P1-10.3 生成结果的质量与风险 说明幻觉与缺少依据的风险
P1-13.2 相似度搜索的直觉 提供“搜索结果只是候选”的视角

然后,系统可以把这些片段一起放进 LLM 输入。

问题:
提示词为什么不能保证事实性?

参考资料:
- P1-12.3 的相关段落
- P1-10.3 的相关段落
- P1-13.2 的相关段落

指示:
请依据参考资料作答。

LLM 会据此生成回答。此时,回答就不再只是依赖模型内部知识,而是参考了外部检索资料的生成结果。

检索是在接入外部记忆

RAG 论文提出的问题意识是:预训练模型会把知识压缩进参数(parameter)里,但这种知识并不容易被精确访问,也不容易快速更新。RAG 因此被描述为把外部的非参数记忆(non-parametric memory)接到模型上。

这里可以先这样理解:

区分 直觉
模型内部知识(parametric memory) 模型在训练过程中压缩进参数里的知识
外部检索资料(non-parametric memory) 文档库、数据库、搜索索引等可以后来增删修改的资料

模型内部知识使用很快,但它不会自动知道最新文档、特定组织资料、个人记录,或训练后新增的内容。

相对地,外部检索资料是可以修改的。添加或更新文档后,检索对象也会随之变化。因此,RAG 可以帮助处理下面这些问题:

问题 RAG 可以帮助的地方
最新性(recency) 可以把最新文档加入检索目标
依据性(evidence) 可以提供回答时引用的参考段落
来源追踪(provenance) 可以记录回答参考了哪些文档
领域知识(domain knowledge) 可以接入特定组织、项目或书稿资料

但“可以帮助”不等于“能够保证”。如果检索到的资料有误、不贴题,或者 LLM 误读了资料,回答仍然会出错。

RAG 不会取代提示词

RAG 不是用来取消提示词(prompt)的结构。更准确地说,它是帮助系统提前准备好要放进提示词里的上下文(context)。

要素 作用
提示词(prompt) 给 LLM 任务指示、格式与约束
检索(retrieval) 找出外部资料候选
增强(augmentation) 把检索资料加入输入上下文
生成(generation) LLM 基于增强后的输入生成回答

如果只用提示词,往往需要人手动准备参考资料。使用 RAG 时,系统可以先自动找到相关资料,再把结果接进提示词上下文。

只用提示词:
人手动整理问题与参考资料。

使用 RAG:
系统先检索与问题相关的资料,再把它们加入输入上下文。

因此,RAG 并不是 prompt engineering 的反面。更准确地说,RAG 是一种更系统地准备提示词上下文的方法。

RAG 的质量会在多个阶段出现波动

RAG 不是一个一次完成的魔法功能。它更像一条由多个阶段连接起来的管线(pipeline)。

文档准备
-> 切块(chunking)
-> 生成嵌入
-> 检索
-> 重排或过滤
-> 组装提示词
-> 生成回答
-> 标示来源与审查

每个阶段都可能出问题。

阶段 可能出现的问题
文档准备 旧文档、错误文档、重复文档可能混在一起
切块(chunking) 必要上下文可能被拆散到多个片段
嵌入(embedding) 问题与文档可能没有被放进合适的意义空间
检索(retrieval) 无关候选可能排在前面
提示词组装 资料过多会让重点变模糊
生成(generation) LLM 可能掺入资料外内容或总结失真
来源标示 显示出的来源可能与真正的回答依据不一致

因此,设计 RAG 系统时,更合理的看法不是“加上检索就安全了”,而是“检索、输入组装、生成与审查必须一起设计”。

RAG 不是事实核查装置

初次接触 RAG 时,最需要小心的误解是:

误解:
只要使用 RAG,LLM 的幻觉就会消失。

更安全的说明:
RAG 会给 LLM 提供外部资料,
让它更有可能生成有依据的回答,
但不会自动消除检索错误与生成错误。

例如,下面这些情况都可能发生:

情况 结果
检索到了错误文档 LLM 可能依据错误材料回答
没有检索到相关文档 LLM 可能转而依赖常识或猜测
只检索到文档的一部分 回答可能缺少完整上下文
检索到彼此冲突的资料 仍需要判断哪份来源更可信
给出了来源标示 来源标示本身并不保证回答正确

这个视角也和学习型文档的写作原则相连。AI 生成的说明只是草稿,事实性主张仍需要依据审查。RAG 可以帮助找到依据候选,但最终判断仍然需要检验过程。

用一个小例子看 RAG 流程

假设我们把一组学习文档作为搜索目标。

问题:
嵌入是意义本身吗?

在检索阶段,下面这些片段可能成为候选:

候选 原因
P1-13.1 嵌入不是意义本身 与问题直接对应
P1-13.2 接近的向量并不总是好答案 与搜索局限相连
P1-11.1 统计语言模型与嵌入 与历史背景相连

RAG 的输入大致可以被组装成这样:

问题:
嵌入是意义本身吗?

参考资料:
[从 P1-13.1 检索出的段落]
[从 P1-13.2 检索出的段落]

回答指示:
请依据参考资料,用入门者能理解的方式说明。
不要对资料中没有的内容做武断断言。

好的回答至少应该包含下面这些视角:

嵌入不是意义本身,而是学习得到的向量表示。
搜索结果只是相关候选,而不是答案判定。
如有需要,仍应回到来源段落再次核对。

这个例子能帮助说明:RAG 不是“替你把答案发现出来”的装置,而是“把回答所需的依据候选接进 LLM 输入”的装置。

检查清单

  • 能把 RAG(retrieval-augmented generation)解释为结合检索与生成的结构。
  • 能区分检索(retrieval)、增强(augmentation)、生成(generation)各自的作用。
  • 能直觉地区分模型内部知识(parametric memory)与外部检索资料(non-parametric memory)。
  • 能说明 RAG 不会取代提示词(prompt),而是在为上下文(context)做准备。
  • 能说明 RAG 可以帮助改善最新性(recency)、依据性(evidence)、来源追踪(provenance)。
  • 能说明 RAG 不会自动保证事实核查,也不会自动消除幻觉。
  • 能说明 RAG 的质量会受文档准备、切块、检索、提示词组装与生成阶段影响。
  • 能把 RAG 不解释成“消除幻觉功能”,而是拆成 检索增强生成审查 四个环节来说明。
  • 能说明即使接上检索,审查责任仍然存在。