~/yomxxx/posts/2026-10-18-retrieved-but-not-read-rag-evidence-failure-paper.mdx
Paper

$ cat Retrieved but Not Read:为什么你的 RAG 检索到了证据,答案还是过时的

-- 5 min read ·

搜索增强大模型有一个让人哭笑不得的失败模式:检索器明明把正确的证据摆在了上下文里,模型的回答却还是来自它的旧记忆。用户看到的是「带引用的过时答案」,引用本身甚至可能是编的。10 月 15 日提交的 arXiv 2610.21731(Retrieved but Not Read: Understanding Why Search-Augmented LLMs Fail to Use Available Evidence,Owen Walters、Lihu Chen、Francesca Toni)把这个问题做了一次罕见的系统解剖:不仅量化了失败率,还用逐层可解释性方法定位了失败发生的深度。这篇是本周 paper 栏目里工程含金量最高的一篇,值得精读。

实验设计:用时间做天然的对照组

核心巧妙之处在实验材料。作者构造了一组时序事实——在模型训练截止之后值发生了变化的事实,典型如足球转会、职位变动。这类事实有一个理想性质:闭卷回答必然过时。因此只要答案对了,就一定是用了检索证据;答案错了,就说明证据没有被有效使用。这比在普通问答集上加噪声干净得多。

评估覆盖两条口径:一个是部署状态下的专有模型 Luna(带原生网页搜索),另一个是六个开源权重配置在受控检索下的表现——检索结果由实验者固定,排除搜索质量这个混杂变量。任务包括开放问答、claim 校验和 fact-sheet 检查三类,代码与数据全部开源。

发现一:只读摘要、不打开页面,是系统性行为

第一个数字就很扎眼:各模型 2.6% 到 76% 的搜索回合只读了搜索结果摘要,一个页面都没打开就直接作答。部署中的 Luna 是 53.6%;受控检索下分化剧烈——qwen3-8b 高达 76%,gemma-4-31b 达 64.6%,而 gpt-oss-120b 只有 2.6%。同样拿到 23 条搜索结果(Luna 的平均值),不同模型的行为像不同的用户:有的条条点开,有的只扫一眼标题。

这个行为直接关联答案质量。按阅读深度合并七个配置的数据:

阅读深度过时答案率不忠实引用率
仅看摘要6.4%6.4%
打开页面但未引用1.7%1.6%
打开并引用页面1.3%2.3%

体育领域把差距拉到最大:开源模型仅看摘要时过时率 20.2%,打开并引用后只有 2.1%——十倍的差距。更危险的关联是:在带引用的开放问题上,答案过时时 81.8% 的引用是不忠实的;答案正确时这个比例只有 0.9%。也就是说,过时与编造引用倾向于一起出现——「带引用」根本不等于「有据可查」,仅看摘要的回答,引用大概率是模型对摘要内容的再加工甚至幻觉。

发现二:证据影响了内部预测,但没有赢下最后一层

真正把这篇论文抬到一个新高度的是第四节的机制分析。作者用 logit lens 与 J-lens 逐层读三个开源模型的内部表示,观察「球员现在效力哪家俱乐部」这个预测在 35 层网络中的演化。

在失败案例中观察到一个清晰的**「交叉超越」**现象:检索到的正确俱乐部(新值)在模型上层率先取得预测优势,但在最后几层被过时俱乐部(旧值)反超,最终输出旧答案。量化看,在上层三分之一的层里,页面证据对新值仍然是正向促进的(Δnew 大于零,p 值不超过 0.04),但对旧值的抑制严重不足——gemma-4-31b 甚至完全没有表现出对旧值的抑制。成功案例则相反:比如 qwen3-8b 在第 35 层附近,新值得到 +15.59 的提升、旧值被压下 −5.96,净差距拉开 21.55。

这个发现改写了问题定义。此前业界默认的假设是「证据没进上下文深处」或「注意力没分配到证据上」,所以补丁方向是重排序、上下文位置优化。而论文的证据链指向另一个结论:证据被读到了,也在内部表示里占了先手,但在生成前的最后阶段输给了参数记忆里的旧知识。这是「抑制失败」而不是「读取失败」。

发现三:失败模式跨模型共享

论文还回答了一个实用问题:一个模型上发现的失败,会出现在另一个模型上吗?把 Luna 部署中观察到的九种失败类型放到受控检索下复测,其中七种显著相关,odds ratio 从 1.84 到 6.46——比如 fact-sheet 直接盖章通过(OR 为 6.46)、不忠实引用(5.23)、漏掉过时信息行(4.85)。阴性对照的 OR 是 1.05,证明这不是普遍相关的假象。

工程含义很直接:你在一个模型上做的 RAG 失败分析,大概率可以迁移到别的模型。为某个模型写的红队用例、监控规则,换成开源模型继续有效。这对做评估基础设施的团队是个好消息——失败模式是模型家族的共性,不是个体的怪癖。

三个可以立刻落地的干预

论文最后给了几个干预实验,其中最实用的是附录 H 与 K:

  1. 把页面正文直接放进 prompt,别只给摘要。在 50 个体育事实的对照里,需要模型自己在搜索菜单里找页面时,gemma-4-31b 失败 14 次;把页面内容直接放进 prompt 后失败归零。gpt-oss-20b 从 11 次降到 1 次。qwen3-8b 只从 16 降到 8,说明干预效果也有模型差异,但方向一致。

  2. 打开页面后让模型重述完整任务再作答。这个几乎零成本的技巧在 fact-sheet 任务上挽回了 157 个失败中的 41 个(26.1%),部分配置上挽回率高达 57.1%。原理大概是对齐了「任务目标」与「当前证据」的注意力,防止模型在长上下文里忘了自己在验证什么。

  3. 把「打开过页面」当引用质检条件。仅看摘要的回答,引用不忠实风险是打开引用回答的三到五倍。在 agent 的管道里加一条规则:引用的 URL 必须出现在实际打开过的页面列表里,否则触发重新检索或降级提示。

局限与边界

作者自己列的局限很诚实:专有模型只测了 Luna 一个;失败率数据被体育领域主导(这也是时序事实最容易构造的领域);分层分析是相关性观察而非因果验证,没有做 activation patching;受控检索无法完全还原真实搜索引擎的噪声分布。另外要注意,2.6% 到 76% 的巨大方差意味着「你的模型会不会犯这个错」高度依赖具体模型——评估要用自己的模型跑,别照搬论文数字。

一句话总结这篇论文的价值:它把 RAG 失败从「检索质量问题」重新定义为「知识与证据的竞争问题」,并给出了第一个关于竞争发生在哪一层的直接观测。对所有做搜索增强产品的人,这是本月必读。

Frequently asked questions

这篇论文研究的问题和普通 RAG 评估有何不同?
大多数 RAG 基准测「检索得准不准」,这篇测「检索到了之后用不用」。作者专门构造了训练截止之后值发生变化的事实(如球员转会、职位变动),这样闭卷回答必然过时,任何正确答案都只能来自检索证据——等于给了实验一个天然的对照组,能把「证据可得」与「证据被用」干净地分开。
只看摘要不打开页面,比例真有这么高吗?
确实惊人。部署状态下的专有模型 Luna 有 53.6% 的搜索回合只读摘要;受控检索下开源模型分化极大,qwen3-8b 高达 76%,gemma-4-31b 为 64.6%,而 gpt-oss-120b 只有 2.6%。也就是说,「直接引用搜索结果摘要而不进源页面」不是个别模型的坏习惯,而是一类系统性行为,只是程度差异巨大。
logit lens 分析发现了什么机制?
失败案例中存在「交叉超越」现象:用 logit lens 逐层观察内部表示,检索到的正确俱乐部在模型上层先取得预测优势,但在最后几层被过时俱乐部反超。量化来看,页面证据在上层三分之一仍然正向促进新值,但对旧值的抑制严重不足——问题不是证据没被读到,而是旧知识没被压下去。
对做 RAG 系统的工程师,最直接的行动是什么?
三个可以立刻做的干预:一是不要只把搜索摘要喂给模型,强制把源页面正文放进 prompt,论文里这一招把 gemma-4-31b 的失败从 14/50 降到 0/50;二是每打开一个页面后让模型重述完整任务再作答,零成本挽回 26.1% 的失败;三是把「打开过页面」作为引用合法性的校验条件,只看摘要的回答引用可信度明显更低。
论文有哪些局限需要留意?
四点:专有模型只研究了 Luna 一个,结论对其他闭源模型的适用性未验证;失败率数据被体育领域主导,其他领域的过时率分布可能不同;分层分析只覆盖转会类事实,且是相关性观察而非因果验证(没做 activation patching);受控检索与真实部署的搜索质量有差距。工程落地时应先在自己的领域数据上复测。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.