- RAG 在回答前检索外部资料,并把相关片段加入本次上下文;它不会把资料永久写进模型。
- 基本流程是资料准备、文档切分、检索与重排、上下文组装、答案生成。
- RAG 的错误可能来自链路中的任一阶段;最终回答流畅,不代表证据正确或完整。
- 检查 RAG 回答时,重点看来源、时效、引用、适用条件和证据边界。
公司内部的 AI 回答:“因公前往机场的打车费用通常可以报销。”这句话可能符合常识,却没有说明它是否看过公司的报销手册、使用哪个版本,也没有交代金额和票据条件。
**RAG(Retrieval-Augmented Generation,检索增强生成)**解决的是这类问题:先从外部资料中寻找相关内容,再把资料和问题一起交给模型生成答案。
| 没有 RAG | 使用 RAG |
|---|---|
| 主要依赖模型已有知识和当前对话 | 回答前增加一次外部资料检索 |
| 难以确认答案依据 | 可以附上来源供人核对 |
| 无法自动知道私有或新资料 | 可以读取有权限访问的当前资料 |
RAG 改变的是本次输入,不是模型参数。它可以提供证据,但不能保证资料一定正确、检索一定命中或模型一定读对。
一、RAG 的定义
RAG 由三个动作组成:
| 组成 | 作用 |
|---|---|
| Retrieval,检索 | 从资料库中寻找候选证据 |
| Augmented,增强 | 把证据加入当前上下文 |
| Generation,生成 | 模型依据问题和证据组织答案 |
2020 年的论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 将预训练模型中的参数化知识与外部的非参数化记忆结合,用于知识密集型任务。今天的 RAG 实现形式很多,但核心仍是:先找资料,再带着资料生成。
下面的教学模拟只改变一个变量:回答前是否提供公司制度。
同一个问题
资料与回答
通常情况下,因公前往机场的打车费用可以报销。
听起来合理,但没有核对你所在公司的最新规则。
可以报销。若单程超过 200 元,还需附上行程说明。
答案中的两个判断,都能在当前资料中找到依据。
二、RAG 的流程
| 阶段 | 输入 | 输出 | 主要风险 |
|---|---|---|---|
| 资料准备 | 原始文件 | 可用文档 | 过期、缺失、权限错误 |
| 文档切分 | 长文档 | 文本片段 | 完整规则被拆断 |
| 检索与重排 | 用户问题、片段库 | 候选证据 | 正确片段未命中 |
| 上下文组装 | 候选证据、问题 | 模型输入 | 噪声、冲突、版本混杂 |
| 答案生成 | 组装后的上下文 | 答案与引用 | 误读或超出证据 |
RAG FLOW
RAG 流程
资料准备
知识库首先要收集、清洗并更新资料。重复文件、旧版本和错误权限会直接进入后续链路,因此“找到一段文字”不等于“找到可信证据”。
文档通常还会保留附加信息:文件名、版本、日期、页码、适用部门、原文链接和访问权限。这些 Metadata(元数据) 可用于过滤、引用和权限控制。
文档切分
长文档通常会拆成较小的 Chunk(文本片段)。问题到来时,系统只检索少量相关片段,而不是每次都把整份文档交给模型。
CHUNKING LAB
文档切分
市内交通按实际费用报销。
机场往返交通可以报销。
单程超过 200 元需附行程说明。
酒店需选择协议价房型。
早餐已含在房费中时不得重复申领。
机场往返交通可以报销。
单程超过 200 元
需附行程说明。
市内交通按实际费用报销。
机场往返交通可以报销。
机场往返交通可以报销。
单程超过 200 元需附行程说明。
切分需要在“聚焦”和“完整”之间取舍:
| 片段 | 优点 | 风险 |
|---|---|---|
| 较大 | 保留完整上下文 | 混入更多无关内容 |
| 较小 | 主题更集中 | 条件与结论可能分离 |
| 保留重叠或按结构切分 | 减少规则被截断 | 增加重复内容 |
例如,“机场往返交通可以报销”和“单程超过 200 元需附行程说明”应尽量留在同一片段。长上下文容量也不等于信息会被稳定使用; Lost in the Middle 显示,相关信息在长上下文中的位置可能显著影响表现。
进阶:索引与向量可选阅读
系统会为片段建立便于查询的索引。关键词索引记录词语出现的位置;向量索引保存片段的 Embedding(向量表示),用一组数字表示语义特征。
向量数据库只是保存和查询向量的一种实现方式,不是 RAG 的定义,也不是每套系统都必须单独部署的产品。
检索与重排
用户可能问“去机场的网约车钱能报吗”,制度写的却是“机场往返交通可以报销”。检索需要同时处理字面匹配和语义相近。
RETRIEVAL LAB
关键词与语义检索
关键词匹配
语义向量匹配
关键词匹配
语义向量匹配
| 方法 | 擅长的内容 | 典型限制 |
|---|---|---|
| 关键词检索 | 编号、人名、专有名词、精确措辞 | 不同说法可能匹配不到 |
| 语义检索 | 意思接近、用词不同的内容 | 可能召回主题相似但不支持答案的片段 |
| 混合检索 | 综合两类结果 | 仍需排序和过滤 |
语义检索通常把问题和片段转成向量,再比较相似度。经典的 Dense Passage Retrieval 使用双编码器分别表示问题与段落。
检索一般返回前 K 个候选,即 Top K。K 太小可能漏证据,K 太大则会带入噪声。第一轮快速召回后,系统还可以进行 Reranking(重排),更仔细地比较问题与候选片段。
检索分数只表示匹配程度,不代表内容正确,也不代表片段足以支持答案。
上下文组装
系统把候选证据、用户问题和回答规则组合成新的提示:
任务:只根据参考资料回答;资料不足时说明无法确认。
参考资料:
[2026 版差旅手册,第 4.2 节]
机场往返交通可以报销。单程超过 200 元需附行程说明。
问题:打车去机场可以报销吗?
输出:先给结论,再说明条件并标注来源。
CONTEXT LAB
上下文组装
上下文中的资料会直接影响回答。旧版规则、无关片段和互相冲突的证据,都可能被模型一并使用。
外部网页、邮件和上传文件中还可能包含“忽略前面的要求”等指令。资料应被当作待分析内容,不能自动升级为系统命令;敏感场景还需要来源控制、最小权限和输出限制。
答案生成
生成阶段的目标不是让文字更肯定,而是让结论与证据一致。一个可检查的答案应包含:
- 直接回应问题;
- 写出适用条件;
- 标注支持结论的来源;
- 资料冲突或不足时明确说明。
引用的价值在于建立核对路径。有链接不等于有证据;原文必须真正支持对应结论。
三、错误来源
RAG 可以减少一部分无依据回答,但不是事实保证器。错误应沿流程定位:
| 层级 | 常见问题 | 修复起点 |
|---|---|---|
| 资料 | 文件错误、过期或缺失 | 更新资料与版本管理 |
| 切分 | 标题、条件和正文分离 | 调整边界、重叠和结构解析 |
| 检索 | 正确片段没有进入候选集 | 查询改写、混合检索、过滤 |
| 上下文 | 噪声过多或版本冲突 | 筛选、去重、排序 |
| 生成 | 模型误读或补充无依据内容 | 回答规则、引用和验证 |
FAILURE LAB
错误定位
引用资料后仍然得到旧答案
资料存在,但系统仍然说不知道
正确条款已经找到,回答依然混乱
引用正确,答案却多出无依据的主张
如果正确片段从未被找到,继续润色回答提示通常无效;如果证据已经完整进入上下文,答案却超出资料,才应重点检查生成阶段。
进阶:检索评测与生成评测可选阅读
检索评测检查正确证据是否进入前 K 个结果、排序是否合理、不同问法能否找到同一规则。
生成评测检查答案是否回应问题、事实是否有证据支持、引用是否对应、证据不足时是否明确保留不确定性。
两组评测分开,才能判断问题来自检索还是生成。
四、方案比较
RAG、长上下文、联网搜索和微调解决的问题不同:
| 方法 | 主要作用 | 适合场景 | 不等于 |
|---|---|---|---|
| RAG | 从资料库筛选证据后生成 | 大量、变化频繁、需要引用的资料 | 保证答案正确 |
| 长上下文 | 一次放入更多内容 | 文件较少、需要整体阅读 | 模型能稳定利用每个位置 |
| 联网搜索 | 获取当前公开网页 | 新闻、价格、公开信息 | 搜索结果天然可信 |
| 微调 | 调整模型的稳定行为 | 固定风格、格式或任务模式 | 便捷更新事实资料 |
这些方法可以组合。例如,联网搜索可以成为 RAG 的资料来源;RAG 检索后仍可使用较长上下文;微调后的模型也可以继续调用 RAG。
五、可靠性检查
普通使用者不必了解系统实现,也可以检查五项:
- 来源:是否来自官方文件、原始论文或当事机构;
- 时效:日期和版本是否仍然有效;
- 引用:原文是否真的支持对应结论;
- 范围:地区、部门、金额和时间条件是否匹配;
- 边界:资料不足或冲突时,答案是否明确说明。
也可以在提问中直接加入:
只依据提供的资料回答,并为关键结论标注来源。
资料冲突时列出冲突;资料不足时说明还缺什么。
这不能修复资料库或检索器,但能让最终回答更容易核对。
整条证据路径可以压缩为:
用户问题 → 候选证据 → 当前上下文 → 有引用的回答 → 人工核对
理解 RAG 的重点不是记住“向量数据库”,而是知道答案依据了什么资料,以及证据在哪一步可能丢失、过期或被误读。