一份长报告已经完整塞进模型的上下文窗口,回答却漏掉其中一段。这种情况不能只用“没读到”解释。文字可以被模型接收,重要信息仍可能没有被稳定地用上。研究者把这类现象叫作中间丢失。

2024 年发表在 TACL 的《Lost in the Middle》做了两类受控实验。一类是多文档问答,另一类是键值检索。研究者改变相关资料在输入里的位置,再比较回答表现。多个模型在资料靠近开头或结尾时表现较好,资料移到中间后明显变差,明确支持长上下文的模型也出现了这个问题。

输入长度和利用能力是两件事

上下文窗口标出模型一次能接收的容量。它并不保证每个位置的信息都有相同机会影响答案。后续的 ACL 研究把中间丢失与位置注意偏差联系起来。实验里的注意分布呈 U 形,开头和结尾得到的注意更多,即使中间内容更相关也会受影响。

这个发现不该被扩大成“长上下文都没用”。不同模型、任务和提示组织会得到不同结果。研究所用的多文档问答与键值检索可以控制位置,企业文档却常有只有多个事实配合才能答对的问题。光报一个最大 Token 数,看不出这些差别。

更早一项 EMNLP 研究也问过相近的问题。研究对象能接收最多 8K Token,超过前 2K 的远程内容却只改善了少数 Token 的预测,句子级预测任务没有因此受益。那项研究与今天的模型代际不同,不能直接拿来评价当前产品。它留下的测试思路仍有用。容量增长以后,要重新问模型究竟在哪些问题上使用了新增内容。

验收时要故意挪动资料

最直接的测法是把同一个已知答案的段落分别放在开头、中间和结尾,其他内容保持不变。如果只测一个位置,一次正确很可能只是摆放位置比较有利。上下文长度也要分档测,因为一万 Token 正常不能证明十万 Token 仍然稳定。

检索增强系统还可以减少一次送入的无关内容。先找出几段候选,再让模型回答,通常比把整个文件夹一股脑塞进去更容易排查。候选顺序仍要变换。只把最相关段永远放在最前面,会掩盖模型对后续材料的忽略。

多事实问题要再加一组测试。把答案需要的两三段资料分开放置,有时都在前半段,有时一段在中间,一段在末尾。最后逐项核对回答、引用和计算。模型可能找到了其中一段,却用遗漏的另一段补出一个顺口结论。

这类测试不需要先造大基准。挑十个公司里常问、答案已经核准的问题,给每题准备三种位置版本,就能看出当前模型和提示是否明显偏向两头。换模型或改检索顺序以后,继续用同一组题复测,位置变化带来的差距会比一次演示更诚实。

我会把“装得下”当作接口能力,把“找得到并用对”当作业务验收。两项分开记录,才不会在一个很大的窗口数字后面过早放心。

参考资料