可交互 AI

RAG:让大模型先找资料,再回答

2026年9月09日 约 3,000 字 约 10 分钟阅读

公司内部的 AI 回答:“因公前往机场的打车费用通常可以报销。”读起来很顺,但报销人下一步仍会卡住:它看的是哪一版手册?单程超过 200 元怎么办?电子发票是不是必需?

如果系统没有在回答前把这些条款找出来,模型只能凭已有知识和当前对话补全一句看似合理的话。RAG(Retrieval-Augmented Generation,检索增强生成) 就在这里加入一条资料路径:

先从外部资料中找出相关段落,再把段落和问题一起交给模型。模型根据拿到的资料段落和用户的问题,再组织语言来生成回答来回复给用户。

对比维度没有 RAG使用 RAG
知识与对话延续主要依赖模型已有知识和当前对话回答前增加一次外部资料检索
答案可信度难以确认答案依据可以附上来源供人核对
资料时效性无法自动知道私有或新资料可以读取有权限访问的当前资料

RAG 改变的是本次输入,不是模型参数。手册没有被永久写进模型;这一次回答结束后,模型也不会因此自动记住它。资料是否最新、关键段落是否被找到、模型是否读全条件,仍要逐步检查。

一、资料怎样进入一次回答

“检索增强生成”这个名称对应三个连续动作:

组成作用
Retrieval,检索从资料库中寻找候选证据
Augmented,增强把证据加入当前上下文
Generation,生成模型依据问题和证据组织答案

2020 年的论文 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 用“参数化知识”和外部的“非参数化记忆”描述这种组合。今天的实现可以不同,但这条路径不变:先找资料,再带着资料生成。

先切换下面两种回答方式。问题不变,变化的只有模型这一轮能看到的资料。

同一个问题

资料与回答

虚构公司示例
这一轮能看到的内容用户:打车去机场可以报销吗?
已有问题模型内部学到的语言与知识生成回答
回答
通常情况下,因公前往机场的打车费用可以报销。

听起来合理,但没有核对你所在公司的最新规则。

这一轮能看到的内容2026 版差旅手册:机场往返交通可以报销;单程超过 200 元需附行程说明。
已有问题找到相关条款问题与条款一起交给模型
回答
可以报销。若单程超过 200 元,还需附上行程说明。

答案中的两个判断,都能在当前资料中找到依据。

RAG 改变的不是模型参数。它改变的是模型生成这次回答时,眼前有哪些资料。

二、从手册到答案

阶段输入输出主要风险
资料准备原始文件可用文档过期、缺失、权限错误
文档切分长文档文本片段完整规则被拆断
检索与重排用户问题、片段库候选证据正确片段未命中
上下文组装候选证据、问题模型输入噪声、冲突、版本混杂
答案生成组装后的上下文答案与引用误读或超出证据

RAG FLOW

RAG 流程

点击任一步
01
这一阶段在做什么把可信资料整理成可查询的知识库
进入报销手册、产品文档、会议纪要
出来一组可处理的文档
最容易出问题的地方资料过期时,后面做得再好也会答错。
02
这一阶段在做什么把长文档拆成大小合适的小段
进入一份 80 页的差旅手册
出来带标题与页码的文本片段
最容易出问题的地方切得不合适,关键条件可能被分开。
03
这一阶段在做什么用问题从知识库中找候选片段
进入打车去机场可以报销吗?
出来最相关的几段条款
最容易出问题的地方没找到正确片段,模型就看不到关键证据。
04
这一阶段在做什么把问题、规则和候选片段放在一起
进入问题 + 三段条款 + 回答要求
出来本轮模型的完整上下文
最容易出问题的地方塞入太多无关内容,会增加干扰。
05
这一阶段在做什么模型根据眼前证据组织回答
进入已经组装好的上下文
出来答案、依据与必要的不确定性
最容易出问题的地方模型仍可能误读资料或写出资料没有支持的结论。

资料准备

系统先把差旅手册、票据规范等文件放入知识库。同一条规则若同时留下 2024 版和 2026 版,后面的检索可能把旧条款也找出来;一份没同步的手册,则从一开始就不在候选范围内。资料进入链路的这一刻,已经决定了模型之后有没有机会看到正确证据。

每份文件还应带着文件名、版本、日期、页码、适用部门、原文链接和访问权限等 Metadata(元数据)。检索时,系统可以据此排除失效版本或无权访问的文件;回答后,人也能顺着页码回到原文。

文档切分

一本 80 页的手册不能每次原封不动塞进模型。系统会把它拆成较小的 Chunk(文本片段);问题到来时,只取少量可能相关的片段。切分决定了“可以报销”和“超过 200 元需附行程说明”会不会还挨在一起。

CHUNKING LAB

文档切分

切换切分方式
第 4 章:交通与住宿

市内交通按实际费用报销。

机场往返交通可以报销。

单程超过 200 元需附行程说明。

酒店需选择协议价房型。

早餐已含在房费中时不得重复申领。

当问题是“机场打车超过 200 元怎么办?”条件没有断开,但这一块混入了许多与问题无关的规定。
片段 A

机场往返交通可以报销。

片段 B

单程超过 200 元

片段 C

需附行程说明。

当问题是“机场打车超过 200 元怎么办?”候选片段容易失去彼此关系,“超过 200 元”的条件可能单独出现。
片段 A

市内交通按实际费用报销。

机场往返交通可以报销。

片段 B

机场往返交通可以报销。

单程超过 200 元需附行程说明。

当问题是“机场打车超过 200 元怎么办?”关键句在边界处被保留,问题和附加条件更有机会一起被找回。

切分需要在“聚焦”和“完整”之间取舍:

片段优点风险
较大保留完整上下文混入更多无关内容
较小主题更集中条件与结论可能分离
保留重叠或按结构切分减少规则被截断增加重复内容

例如,“机场往返交通可以报销”和“单程超过 200 元需附行程说明”应尽量留在同一片段。否则系统可能只找回前半句,模型看见了结论,却错过了条件。即使上下文窗口很长,资料的位置也会影响模型能否稳定使用它; Lost in the Middle 展示了这种位置差异。

进阶:索引与向量可选阅读

系统会为片段建立便于查询的索引。关键词索引记录词语出现的位置;向量索引保存片段的 Embedding(向量表示),用一组数字表示语义特征。

向量数据库只是保存和查询向量的一种实现方式,不是 RAG 的定义,也不是每套系统都必须单独部署的产品。

检索与重排

用户输入“去机场的网约车钱能报吗”,资料里写的却是“机场往返交通可以报销”。系统需要把这两种说法拉到一起,同时又不能把所有提到“交通”的段落都当成证据。

RETRIEVAL LAB

关键词与语义检索

分数仅用于示意
用户问题机场 打车 报销
关键词匹配
1机场往返交通可以报销96
2出租车发票提交规范82
3差旅期间酒店标准28
语义向量匹配
1机场往返交通可以报销94
2乘坐网约车前往航站楼的费用规则88
3差旅期间酒店标准31
实际系统常把两种方法结合,再对候选结果重新排序。分数只能表示匹配程度,不等于内容一定正确。
用户问题去赶飞机的网约车钱,公司给报吗?
关键词匹配
1出租车发票提交规范48
2机场往返交通可以报销34
3差旅期间酒店标准17
语义向量匹配
1乘坐网约车前往航站楼的费用规则93
2机场往返交通可以报销86
3出租车发票提交规范62
实际系统常把两种方法结合,再对候选结果重新排序。分数只能表示匹配程度,不等于内容一定正确。
方法擅长的内容典型限制
关键词检索编号、人名、专有名词、精确措辞不同说法可能匹配不到
语义检索意思接近、用词不同的内容可能召回主题相似但不支持答案的片段
混合检索综合两类结果仍需排序和过滤

语义检索通常先把问题和每个片段转成向量,再比较它们的距离:问句里的“赶飞机的网约车”会更靠近“机场往返交通”,而不是“酒店住宿”。经典的 Dense Passage Retrieval 使用双编码器分别表示问题与段落。

检索一般返回前 K 个候选,即 Top K。K 太小可能漏证据,K 太大则会带入噪声。第一轮快速召回后,系统还可以进行 Reranking(重排),更仔细地比较问题与候选片段。

检索分数只表示“这段话像不像在回应问题”,不表示规则仍有效,也不表示它已经包含所有条件。

上下文组装

候选片段被找回后,系统把它们、用户问题和回答规则排进同一份新提示。此时,模型终于能在生成前看到报销条款:

任务:只根据参考资料回答;资料不足时说明无法确认。

参考资料:
[2026 版差旅手册,第 4.2 节]
机场往返交通可以报销。单程超过 200 元需附行程说明。

问题:打车去机场可以报销吗?
输出:先给结论,再说明条件并标注来源。

CONTEXT LAB

上下文组装

虚构公司 · 教学模拟
用户问题保持不变 打车去机场可以报销吗?
选择放入本轮上下文的资料

每次勾选都会重新组装右侧内容。

模型这一轮能看到的参考资料
更合理的回答

这里没有调用真实模型。回答由预设规则生成,只用来展示资料的缺失、冲突和噪声怎样改变可回答程度。

勾选下方不同资料,观察模型眼前的纸堆怎样变化。当前规则、旧版规则和无关资料一旦被一起放入,回答就必须先处理冲突和噪声,不能假装只看见最方便的一段。

外部网页、邮件和上传文件中还可能包含“忽略前面的要求”等指令。资料应被当作待分析内容,不能自动升级为系统命令;敏感场景还需要来源控制、最小权限和输出限制。

答案生成

模型现在根据眼前的资料组织句子。它应该先回答“可以”,再把“超过 200 元”和“电子发票”带出来;如果资料缺少票据要求,就把这部分留成未知。生成阶段要做的不是把话说得更肯定,而是让每个判断能回到一段证据。

  • 直接回应问题;
  • 写出适用条件;
  • 标注支持结论的来源;
  • 资料冲突或不足时明确说明。

引用把这条路留给读者:答案中的一句话,能回到哪一页、哪一版文件。有链接不等于有证据;原文必须真正支持对应结论。

三、答案在哪一步失去依据

这条链路上,每一站都可能把答案带偏。不要只看最后一句话是否流畅;从它引用的段落开始,逆着链路回看错误最初出现的位置:

层级常见问题修复起点
资料文件错误、过期或缺失更新资料与版本管理
切分标题、条件和正文分离调整边界、重叠和结构解析
检索正确片段没有进入候选集查询改写、混合检索、过滤
上下文噪声过多或版本冲突筛选、去重、排序
生成模型误读或补充无依据内容回答规则、引用和验证

FAILURE LAB

错误定位

选择症状
引用资料后仍然得到旧答案
现场知识库里仍是 2024 版手册,2026 版尚未同步。
诊断信号召回结果相关,但日期或版本不对。
先检查先修资料更新与版本过滤,不要先改 Prompt。
资料存在,但系统仍然说不知道
现场用户说“赶飞机的网约车”,文档只写“机场往返交通”。
诊断信号正确片段没有进入候选结果。
先检查检查问题改写、关键词与语义检索组合,以及切分边界。
正确条款已经找到,回答依然混乱
现场正确条款和九段相似但无关的旧规定一起进入上下文。
诊断信号答案混用了不同版本或不同适用范围。
先检查减少候选数量,增加重排和版本、部门等过滤条件。
引用正确,答案却多出无依据的主张
现场资料只说明“可以报销”,模型自行补充“无需经理审批”。
诊断信号答案中有无法对应到来源的主张。
先检查要求逐项引用,缺少依据时明确说无法确认,并检查答案与证据的一致性。
RAG 不是一个开关,而是一条链路。错误可能来自资料、切分、召回、组装或生成中的任一步。

正确片段从未进入候选集时,继续润色回答提示不会让模型凭空看见它;证据已经完整摆在上下文里,答案却补充了资料没有的结论,才应把注意力放到生成规则和验证上。

进阶:检索评测与生成评测可选阅读

检索评测检查正确证据是否进入前 K 个结果、排序是否合理、不同问法能否找到同一规则。

生成评测检查答案是否回应问题、事实是否有证据支持、引用是否对应、证据不足时是否明确保留不确定性。

两组评测分开,才能判断问题来自检索还是生成。

四、不同的资料路径

RAG、长上下文、联网搜索和微调解决的问题不同:

方法主要作用适合场景不等于
RAG从资料库筛选证据后生成大量、变化频繁、需要引用的资料保证答案正确
长上下文一次放入更多内容文件较少、需要整体阅读模型能稳定利用每个位置
联网搜索获取当前公开网页新闻、价格、公开信息搜索结果天然可信
微调调整模型的稳定行为固定风格、格式或任务模式便捷更新事实资料

它们可以接在一起:联网搜索可以先带回公开网页,RAG 再从中筛选片段;RAG 找到片段后,仍可放进较长上下文;微调后的模型也可以继续走这条资料路径。

五、沿证据路径核对

不需要知道系统用了哪种向量数据库,也能沿着回答往回检查五件事:

  1. 来源:是否来自官方文件、原始论文或当事机构;
  2. 时效:日期和版本是否仍然有效;
  3. 引用:原文是否真的支持对应结论;
  4. 范围:地区、部门、金额和时间条件是否匹配;
  5. 边界:资料不足或冲突时,答案是否明确说明。

也可以在提问中直接加入:

只依据提供的资料回答,并为关键结论标注来源。
资料冲突时列出冲突;资料不足时说明还缺什么。

这不能把遗漏的资料补进知识库,也不能让没被召回的条款突然出现;但它会要求模型把不知道的地方露出来,让最终答案更容易核对。

整条证据路径可以压缩为:

用户问题 → 候选证据 → 当前上下文 → 有引用的回答 → 人工核对

这就是 RAG 中一份报销手册的旅程:先被准备和切分,再被问题找回,随后进入这一次上下文,最后变成带引用的回答。重点不是记住“向量数据库”,而是能指出答案依据了什么资料,以及证据在哪一步丢失、过期或被误读。