先甩一个我一开始不信的结果:同一道题、同一段检索回来的材料,只把给模型的指令从「你可以用自己的知识」换成「以文档为准」,误导率就往上走——三个 QA 集平均涨 10.9 到 13.5 个百分点。
两周前挂出来的 RAG-Stress(arXiv 2610.11183,Zhou 他们)测的。15 个系统,API 的、开源的、还有 RL 训出来的搜索 agent,TriviaQA-RC / HotpotQA / SearchQA 三个集,另外补了中英文的 MedQA。数字先放这儿,我更想说的是它把我哪张图打穿了。
我以前画 RAG,画的是这样:
问题 ──► 检索 ──► 拼进 prompt ──► 模型 ──► 回答
▲
"以文档为准"
最后那半句,我一直当成一个防幻觉的开关。拧上去,模型就老实了,不敢瞎编。
RAG-Stress 干的事就是把这个开关拧到两头,看模型往哪边抖。它把 source-priority 拆成两种指令策略:一种让文档说了算,一种允许模型拿自己的先验知识顶一顶。然后两种策略交叉三种位置——答案片段放在证据文本的开头、中间、末尾。
结果方向跟我预想的相反。文档优先那一档,误导率反而高。
这里得先讲清楚它怎么量,不然这个结论站不住。
它不给全题库算误导率。它先跑一遍无检索,把「这模型本来就能答对」的那部分题挑出来,只在这部分题上做实验:
全题库
├─ 无检索就答错 ──► 出局,不进分母(本来就不会,带不带偏没意义)
└─ 无检索就答对 ──► 塞一段改过的证据 ──► 答错了?记一笔
那段证据只动了一个断言——把原来支持正确答案的一句,改成支持某个指定的错误答案,其余原样。问题不动,参考答案不动。所以它量的是纯粹的「被带跑」,不掺「本来就不会」。
这个切分我觉得是整篇最漂亮的地方,比结论本身还值得借鉴。你拿全题库算准确率,模型答错你根本分不清是它不会还是它被材料骗了。切两半,这笔账才算得清。
它也报了 clean accuracy,全覆盖的那个传统指标。那个数一直是好看的——好看就对了,好看说明不了任何问题。
然后是位置。
末尾最容易被带跑,开头其次,中间最稳。三种位置跨模型平均下来是这个序。
我第一反应是「不对吧」,流行说法不是中间最容易被忽略吗。等等等等,先别急——这俩说的不是一回事。中间被忽略,说的是「模型用不上中间那段内容」;这里量的是「模型跟不跟中间那段内容」。用不上和不跟,中间可能恰好因为读得不用力,反而没那么容易被说服。
这是猜的。这一段我也还没完全画明白,先放这儿,等我想通了再补。论文自己也说了,单个模型不是个个都按这个序,是平均下来这个序。别拿它当定律用。
回到那句指令。
有害覆盖上升,有益纠正没跟着上升。这是另一组配对审计给的——500 道题、两个 checkpoint。你把文档的权重调上去,模型「把对的改成错的」变多了,「把错的改成对的」没变多。
这条比那 10.9 个百分点更狠。前面那条你还能自我安慰「至少它更听话了」,这条直接告诉你,听话这件事在两个方向上是不同步的。
那「以文档为准」到底在干什么?它不提升可靠性,它是在挪一个偏置项 ✨——让模型把「跟我读到的对上」排在「我本来觉得对」前面。材料干净的时候这个偏置是好事,材料被污染一丁点,它就是放大器。
最要命的是这坑不是谁的疏忽。RAG 整个叙事就是「别让它瞎编,去查」,写 prompt 的人几乎不会犹豫就把这句加上。它是这个范式的默认值,所以十五个系统一个没跑掉。RL 训出来的搜索 agent 也在里面,这点我没想到——它们本来就是被训成多轮检索、跟着证据走的,按理说该对材料更挑剔,结果一样中招。
所以那篇论文那句「证据依从度和事实可靠性该分开」才是我真正想画的:
证据依从度 ──► 它有没有跟着你给的资料走
事实可靠性 ──► 它答的对不对
这是两根轴,不是一根。RAG 的评测常年只量第二根。
你量准确率,量不出「它是自己想对的,还是抄对的」。可一旦上线,出问题的时候你要的恰恰是这一层——这段回答是模型自己的判断,还是它把检索回来那句有问题的材料原样咽下去了?
比喻收一下。我把 source-priority 指令比成「开关」,这个比喻漏风:开关是两档,拧到哪档就是哪档。它更像偏置,你往上调,两个方向一起动,只不过一个动得比另一个快得多。抓「它会改变模型对证据的服从程度」这个大方向,开关够用了;但你要真去改那句 prompt,就得知道它不是在切换模式,是在挪一条看不见的线。
自检留一个,能动手的那种:
翻你手上那个 RAG 的评测集,能不能切出「不检索就能答对」的那一半?切不出来,说明你到现在只量过准确率,没量过误导率。
这两个数上线之后会分得很开。
下期想画开哪个,你说了算。我这儿压着两个念头:中间位置为什么最稳,还有那个「有益纠正」为什么怎么调都调不动。
