年份与会议
2023 · TACL
研究长上下文模型对不同位置证据的利用能力,指出“上下文很长”并不等于“中间信息会被有效使用”。
年份与会议
2023 · TACL
作者
Nelson F. Liu、Kevin Lin、John Hewitt
主题
长上下文
阅读时长
约 1 分钟
收录时间
2023/07/06
长上下文模型发布时,最容易被宣传的一项能力就是“支持 32k、100k 甚至更长的上下文”。但对真实系统来说,真正关键的问题不是窗口上限,而是:
当关键信息被放进很长的上下文里,模型真的会把它找出来并正确利用吗?
《Lost in the Middle》给出的答案很尖锐:不一定。模型对上下文位置存在明显偏好,尤其容易利用开头和结尾的信息,而对中间位置的证据表现更差。这也是为什么很多 RAG 系统明明“召回到了正确文档”,最终回答依然不稳定。
这篇论文的实验思路非常干净。作者并没有让任务本身变复杂,而是尽量控制变量,只改变“答案相关证据放在上下文的哪个位置”。
他们主要考察了两类任务:
在这个框架下,研究者可以比较:
这种实验设计非常有力量,因为它直接把“长上下文能力”拆成了一个更具体的问题:位置鲁棒性。
论文最出名的发现,就是模型性能随证据位置变化呈现出接近 U 形的趋势:
这意味着模型并不是平均地“扫描”整段上下文,而是对边界区域存在偏好。换句话说,上下文窗口的扩大,只是让模型“能看到更多 token”,并不自动意味着模型“会公平地利用每个位置的信息”。
这点对产品特别重要。很多团队会误以为只要把检索结果全塞给模型,命中率自然会上升;论文提醒我们,长上下文本身也会引入新的排序问题。
论文主要是做现象刻画,但从机制上可以这样理解:
即便模型使用了现代位置编码,也不代表所有位置都同样容易被利用。训练数据中,很多任务天然更依赖开头指令和最近上下文,模型会形成偏置。
上下文越长,模型需要在越多 token 之间分配注意力。若没有额外机制帮助聚焦,中段信息更容易被噪声淹没。
现实系统中,我们往往把任务说明放在最前面,把当前问题放在最后面。这样一来,中间的检索材料天然处于“最不显眼”的位置,模型更容易忽略它们。
这篇论文对 RAG 设计几乎是必读,因为它揭示了一个常见误区:召回成功 != 使用成功。
如果你在做检索增强生成,可以直接得到几条实践建议:
如果把这篇论文和实际工程结合起来,可以把 RAG 管线理解为三层问题:
很多线上问题,其实卡在第二层,而不是第一层。
即使你不用 RAG,这篇论文对提示词设计也有帮助。几个常见策略包括:
这也是为什么很多高质量 agent 或长文档工作流会拆成多步,而不是一次把所有上下文扔进去直接问。
虽然结论很有冲击力,但也要注意它的适用范围:
因此,这篇论文更像一个告警器:它提醒我们不要把上下文长度当作能力本身,而要继续验证模型是否真正具备位置鲁棒性。
如果你是工程师,可以把这篇论文读成一个检查清单:
如果你是研究者,这篇论文则是一个很好的起点,去思考更深层的问题:如何设计对位置更鲁棒的架构、训练目标与评测基准。
沿着相近主题继续阅读,加深对方法边界与实践场景的理解。
把知识问答、代码能力、对话质量和 LLM-as-a-Judge 放到同一张图里,帮助读者理解“模型更强”到底应该怎样被验证。
从经典 RAG 论文出发,梳理检索、重排序、上下文组装到生成的完整链路,解释为什么“把文档塞进模型”远远不够。
从“模型为什么需要顺序感”讲到绝对位置、相对位置与 RoPE,建立长上下文位置建模的统一直觉。
从工具 schema 设计、调用循环、失败处理到评测闭环,建立一套可落地的 Agent 与工具调用实践框架。