大型语言模型 (LLM) 彻底改变了我们与信息交互的方式,但它们有一个众所周知的缺陷: 它们的知识是静态的。它们只知道训练时接触过的内容,这意味着它们无法回答关于时事或私有企业数据的问题。
解决这个问题的标准方案是检索增强生成 (Retrieval-Augmented Generation, RAG) 。 在一个 RAG 系统中,当你提出问题时,系统首先会搜索数据库以寻找相关文档 (上下文) ,并将这些文档连同你的查询一起输入给 LLM。理想情况下,LLM 会利用这些上下文生成准确、最新的答案。
但这有一个问题。 检索器并不完美。
当检索系统抓取了不相关、误导性或“干扰性”的文档时会发生什么?在许多情况下,LLM 会盲目信任检索到的上下文,并基于错误信息产生幻觉 (hallucinate) ,给出错误的答案。这种依赖性使得整个系统的强度取决于其最薄弱的环节: 检索器。
在这篇文章中,我们将深入探讨一篇评估 “隐式”检索鲁棒性 (“Implicit” Retrieval Robustness) 的研究论文。研究人员提出了一个根本性的问题: 我们需要复杂的多步骤流程来过滤掉糟糕的上下文吗?还是说我们可以直接训练 LLM,让它本能地忽略不相关的信息?
实现鲁棒性的两种方法
在构建 RAG 系统时,工程师们对于如何处理糟糕的检索结果通常分为两大阵营: 显式 (Explicit) 建模和隐式 (Implicit) 建模。
显式方法
显式方法将相关性视为一个独立的决策步骤。在 LLM 尝试回答问题之前,有一个组件 (可以是单独的模型或特定的提示链) 会分析检索到的上下文并问: “这相关吗?”
- 如果是: 上下文被传递给生成器。
- 如果否: 上下文被丢弃,LLM 依赖其内部训练数据。
虽然这听起来合乎逻辑,但它增加了延迟 (时间) 和复杂性。它还引入了一个新的故障点: 如果相关性判断器出错,下游的答案也会出错。
隐式方法
隐式方法试图更加优雅。它将查询和检索到的上下文 (无论好坏) 以端到端的方式直接输入到 LLM 中。目标是让 LLM 在内部学会如何权衡证据。如果有帮助就使用上下文,如果没有帮助就忽略它。
研究人员在下图中清晰地展示了这种区别:

该研究论文侧重于评估和改进这种隐式模型 。 假设是: 只要训练得当,我们就不需要显式的“裁判”步骤。
定义检索鲁棒性
为了衡量成功与否,我们需要对“鲁棒性”有一个严格的定义。作者将一个具备检索鲁棒性的 LLM 定义为拥有两种独特能力的模型:
- 能力 I (Capability I) : 当上下文是有帮助的 (包含答案) 时,模型必须利用它来提供正确的答案。
- 能力 II (Capability II) : 当上下文是无帮助的 (干扰性的) 时,模型必须忽略它,并回退到依赖其内部的参数化知识。
在数学上,研究人员将理想的概率分布 \(p_{\mathrm{robust}}\) 描述如下:

简单来说,这个方程表明: 如果正确答案 (\(a^*\)) 包含在上下文 (\(c\)) 中,则输出正确答案。否则,表现得像只依赖问题 (\(q\)) 一样,实际上忽略 \(c\)。
实验设置
为了测试这些能力,研究人员建立了一个全面的评估体系,涉及多个模型系列和多样化的数据集。
模型
他们测试了开源模型 (各种尺寸的 Vicuna 和 Llama 2) 与闭源巨头 (GPT-3.5 和 GPT-4) 的对比。这种比较有助于确定鲁棒性是否只是“更聪明”的模型才有的特征,还是可以通过训练赋予较小模型的能力。
数据集
鲁棒性并不是放之四海而皆准的。一个模型可能很擅长忽略糟糕的维基百科文章,但在忽略不相关的产品细节方面却很糟糕。为了解决这个问题,研究使用了 5 个数据集,涵盖通用知识、特定产品信息、多跳推理、科学问题和对话历史。

提示策略
至关重要的是,用于模型的提示包含了一个针对鲁棒性的特定指令:
“The context is retrieved information which may or may not be helpful. When the context is unhelpful, answer it with your own knowledge.” (上下文是检索到的信息,可能有帮助也可能没帮助。当上下文没帮助时,请用你自己的知识回答。)
这给了模型忽略输入的许可,这对于测试能力 II 至关重要。
结果: 模型开箱即用的表现如何?
首先,让我们看看这些模型在没有任何针对此任务的微调下的表现。研究人员只是使用了预训练模型并对其进行提示。
评估涵盖三种情况:
- 无 (None) : 不提供上下文 (测试内部知识) 。
- 黄金 (Gold) : 提供完美的上下文 (测试能力 I) 。
- 干扰 (Distract) : 提供不相关/误导性的上下文 (测试能力 II) 。

零样本测试的关键结论:
- 能力 I (金色柱) : 当提供完美的上下文时,GPT-4 显著优于开源模型 (Vicuna/Llama) 。闭源模型更擅长通过推理文本来提取答案。
- 能力 II (黄色柱) : 当提供干扰上下文时, 所有模型的性能都下降了 。 然而,令人惊讶的是,相对于基线,开源模型在抵抗干扰方面通常与 GPT-4 相当,甚至更好。
- 规模因素: 更大的模型通常能更好地处理干扰。它们具有更好的指令遵循能力,并能“意识到”它们应该忽略糟糕的数据。
这里的结论是,虽然标准 LLM 还可以,但它们远非完美。它们很容易被糟糕的上下文所左右。
“仅使用黄金上下文”微调的危险
在典型的机器学习工作流中,如果你想让你的模型更擅长某项任务 (比如 RAG) ,你会对其进行微调。通常,开发者会创建一个训练数据集,其中每个问题都配对有正确的 (黄金) 上下文。
研究人员测试了这种常见方法。他们仅使用黄金上下文微调模型,然后在黄金上下文和干扰上下文上再次进行测试。

陷阱
在黄金上下文上微调 (粉色线) 极大地提高了能力 I 。 模型变成了从相关文档中提取答案的专家。
然而,这有一个隐性成本。 看看图 3 中的“干扰 (Distraction) ”分数 (黄色柱/线) 。通过仅在完美的例子上训练,模型学到了一种错误的相关性: “上下文永远是正确的。”
它们失去了怀疑态度。当以后在现实世界中遇到糟糕的上下文时,这些微调过的模型比原始的基础模型更有可能被误导。它们为了最大化能力 I (提取) 而牺牲了能力 II (鲁棒性) 。
解决方案: 带“噪声”训练
这是论文的核心贡献。为了解决鲁棒性问题,研究人员建议在微调过程中混合“干扰性” (噪声) 上下文。
他们创建了混合了黄金上下文和干扰上下文比例的训练数据集。这迫使模型学习一个更复杂的函数: 不仅仅是“从上下文中提取”,而是“评估上下文,然后提取或回退”。
噪声会损害在好数据上的表现吗?
工程师们首先担心的可能是,在垃圾数据上训练会让模型在回答正确问题时变差。

如图 4 所示,答案是否。即使训练数据中有 50% 是干扰上下文,模型在给定黄金上下文时回答问题的能力仍然很高 (在像 MuSiQue 这样的一些复杂案例中,甚至有所提高) 。能力 I 和能力 II 并不互斥;模型有足够的能力同时学会这两者。
噪声能提高鲁棒性吗?
这是关键时刻。这种混合训练真的能帮助模型忽略糟糕的数据吗?

如图 5 所示,改进是巨大的。
- 0% 噪声 (标准微调) : 模型在干扰上下文上表现不佳。
- 50% 噪声: 模型有效地“恢复”了其内部知识。它们在干扰上下文上的表现提升到了与“无上下文”时的表现相匹配的水平。
这意味着模型已经成功学会了识别垃圾上下文,丢弃它,并依赖其内部训练——在没有任何外部过滤机制的情况下实现了理想的“隐式鲁棒性”。
表格和详细数据
对于那些对具体数字感兴趣的人,论文提供了跨所有数据集和模型的详细分类。
提示性能 (零样本) :

仅在黄金上下文上微调:

在 50/50 混合上下文上微调:

对比表 4 和表 6 突出了这一论点: 表 4 显示了在黄金上下文上的高分,但在干扰上下文上的分数较低。表 6 保持了高的黄金上下文分数,但显著提高了干扰上下文的分数。
结论与启示
检索增强生成是一个强大的工具,但它往往很脆弱。这项研究为使这些系统更加可靠提供了一条令人信服的前进道路。
主要结论如下:
- 隐式鲁棒性是可能的: 我们不一定需要昂贵、缓慢、显式的流程来判断文档相关性。
- 标准微调是危险的: 专门在“完美”检索数据上训练会制造出过度依赖上下文的轻信模型。
- 噪声是好事: 有意在训练数据中混入不相关的上下文可以起到正则化的作用。它教会了模型辨别能力。通过在训练集中包含适当比例 (例如 50%) 的干扰文档,我们可以两全其美: 模型在有好的数据时使用它,在没有时忽略它。
对于构建 RAG 应用的学生和从业者来说,信息很明确: 不要只是策划一个完美的数据集。 如果你想要一个鲁棒的智能体,你必须教它不相关的信息长什么样,这样它才能学会自信地说: “我要忽略那个,并根据我知道的来回答。”
](https://deep-paper.org/en/paper/2406.18134/images/cover.png)