检索增强生成(RAG)
先从受控知识源检索证据,再让模型依据证据生成并保留来源。
学习目标
- 能说明检索增强生成(RAG)解决什么问题,以及何时适用。
- 能解释为什么“检索不到仍强行回答”是误区。
学习前需要掌握
背景与问题
语言模型的参数不能自动跟随每份公司文档或最新制度更新。直接提问时,模型可能依靠训练中形成的关联给出流畅答案,但答案未必来自当前允许使用的资料。
RAG 把“先找到与问题有关的资料”加入生成流程,适用于知识经常更新、需要引用依据或不希望把所有资料写进模型参数的场景。它解决的是信息接入问题,不会自动保证最终推理正确。
概念定义
检索增强生成通常先把用户问题转换为检索请求,从外部知识库找出相关片段,再把这些片段与问题一起交给生成模型组织回答。
检索可以使用关键词、向量相似度或混合方法,也可以加入重排;不必把 RAG 等同于某一种向量数据库。检索到的内容是待判断的资料,不能天然被视为真实、最新或适用。
直观理解
可以把 RAG 想成一次允许查资料的问答。找到的页码决定答题者能看到哪些证据,但找到一段相似文字,并不等于它回答了当前问题。
尤其要分清“没有找到证据”和“证据证明不成立”。例如知识库中没检索到退款条款,不能据此回答“任何情况都不退款”;此时更合理的是说明资料不足。
小案例:先核对适用条件,再回答退款问题
下面是自造的小型知识库,用来练习证据判断,不代表任何真实公司的制度。
| 片段 | 内容 | 对问题的作用 |
|---|---|---|
| A:当前条款 | 标准服务在购买后 7 天内且未使用时,可申请全额退款 | 提供时间与使用状态两个条件 |
| B:例外条款 | 定制服务不适用上述退款条款 | 可能改变结论,不能因文本较短而忽略 |
| C:旧版条款 | 旧版曾允许 14 天内申请,已失效 | 文字相关,但不应作为当前规则 |
用户问:“10 天前买的定制服务能全额退款吗?”仅检索 A 就可能漏掉服务类型;检索到 C 又可能使用过期门槛。基于 A、B,只能说明它不满足这里列出的标准退款条件;如果用户还问“能否协商其他补偿”,当前资料没有答案,应明确说明需要补充规则。
一个可检查的回答应指出适用条款、说明缺少的信息,并避免把引用本身当成真实性证明。
核心原理
资料入库先要保留来源、版本与适用范围。分块过小可能把条件与结论拆开,分块过大又可能带入无关信息;需要根据真实问题检查召回的片段是否完整。
检索阶段应关注证据覆盖,而不只是文本相似度。一个问题可能同时需要金额门槛、例外条件和生效日期,只召回其中一个条件不足以支持完整结论。
生成阶段要区分引用与推断。引用应能定位到支持该结论的原始内容;没有来源支持的推断,应明确标注或保留不确定性,而不是给每句话随意附上一个链接。
评估时应拆开定位失败:资料里是否存在答案,检索是否找到它,生成是否忠实使用它,最终回答是否满足问题。检索正确但生成误读、生成流畅但资料过期,都需要不同的修复方法。
理解与实践步骤
- 确认资料的授权范围、版本、更新时间及文档标识。
- 按语义单元切分文档,保留条款、标题与来源的关联。
- 根据问题检索候选片段,必要时重排并补齐相邻条件。
- 检查候选资料是否冲突、过期或缺少回答所需的条件。
- 让生成模型基于可用证据组织回答,给出能核对的引用。
- 用有标准答案和证据位置的问题集分别检查检索覆盖与回答忠实性。
实际应用
- 知识库问答
- 文档助手
常见错误
- 认为加了向量库就不会产生无依据回答,或只看相似度分数就认定资料适用。
- 丢掉生效日期、权限范围或例外条件,只把正文片段送入模型。
- 资料没有答案时仍强行生成确定结论,把“未检索到”误当成“不存在”。
- 把外部资料中的操作要求当成系统指令,或检索出用户没有权限阅读的内容。
安全风险与信任边界
检索片段可能过期、被污染或来自不应向当前用户开放的文档,索引与检索阶段都要保持数据范围。引用链接只证明指向了资料,不证明资料支持生成结论;文档中的诱导文本也应作为内容而非执行指令。
性能与失败模式
分别评价检索是否找到相关证据与生成是否忠实使用证据,并检查不可回答问题。召回数量、重排和长上下文会增加延迟与费用,索引更新也有维护成本;更多片段可能引入冲突和噪声,不能直接保证答案更准确。
推荐学习资料
参考库不会生成虚假资源或无效外部链接。