再见,感谢所有上下文
本文探讨了大型语言模型中的“U形”上下文丢失问题:模型倾向于忽略上下文中间的信息。作者介绍了相关研究,并提出了五种实用技术来应对该问题,包括精选上下文、将关键信息置于边缘、使用短会话等。
大型语言模型(LLM)在处理长上下文时存在一个被称为“U形”的显著问题:模型对上下文开头和结尾的信息利用最好,而对中间部分的信息则容易忽视。这一现象最初由斯坦福大学的研究人员Nelson Liu及其团队在论文《Lost in the Middle: How Language Models Use Long Contexts》中系统阐述,后续研究进一步表明,U形问题并非个别模型的缺陷,而是Transformer架构的内在特性,甚至存在于随机初始化的模型中。
本文作者在开发开源代码质量工程技能Quality Playbook时亲身遇到了这一问题。在执行缺陷报告生成阶段时,尽管所需的指令和数据都明确存在于上下文中,模型却生成了空白模板文件,而不是填充完整信息的报告。经过分析,作者意识到这正是U形问题的典型表现:相关信息正好位于上下文的中间位置。
研究显示,U形问题的根源在于Transformer结构中的两种偏差:首要偏差(primacy bias)使模型倾向于关注上下文开头,而新近偏差(recency bias)则使模型关注末尾。这两种力的平衡导致中间区域的信息被削弱。2025年和2026年的论文进一步从数学上证明了U形是Transformer的几何属性,因此通过更多数据或微调来消除它的可能性很低。
尽管更大的上下文窗口(如百万token级别)在一定程度上提升了单点检索能力(如“大海捞针”测试),但并未使长上下文智能体工作变得可靠。实际上,更大的窗口意味着更大的中间盲区。因此,开发者需要主动管理U形问题。
作者总结出五种实用技术:
- 精选而不积累(Curate, don't accumulate):定期清空上下文,仅重新加载关键信息。在Quality Playbook的发布准备中,作者通过编写上下文简报(context brief),并每次在新会话中从头读取简报,显著改善了模型表现。
- 将关键信息置于边缘(Position critical information at the edges):利用U形特性,将最重要的指令或数据放在上下文开头或最新位置。例如,在Claude Code中使用--append-system-prompt将简报作为系统提示,保证模型始终关注。
- 短会话优于长会话(Short sessions over long ones):运行多个短会话,每个会话从磁盘重新读取相关信息,而非依赖累积的上下文。
- 外部化重要信息(Externalize important information):将关键内容写入文件,而非仅保留在上下文窗口中,以便后续会话引用。
- 验证代理输出(Verify agent output):将模型声称知道的内容与实际磁盘文件进行比对,确保一致性。
总之,U形上下文问题并非暂时性bug,而是LLM架构的固有特征。通过上述技术,开发者可以在当前已发布的模型中有效缓解这一问题,并确保智能体工作更加可靠。