如何处理 Lost in the Middle 问题?
未标记
考查重点:证据位置效应与上下文筛选。先确认中间证据未被截断,再移动同一证据作对照;去无关内容、重排和提取关键证据后检查答案是否改善
本题目录
参考答案
核心回答
Lost in the Middle指模型在部分长上下文任务中,对中间位置相关信息的利用不如开头或结尾稳定。先确认答案证据确实进入了模型输入,再通过移动同一证据的位置做对照,区分位置敏感、检索遗漏、截断和生成误读。
处理上先重排、去重和裁掉无关材料,保留完整条件与来源;再调整证据组织、先提取相关原文,必要时分解问题并按需补查。增加窗口或把所有材料堆进去,不一定提高正确率。该现象的程度依赖模型、任务和长度,不能当作所有模型必然相同的定律。
怎样确认是这个问题
固定问题、证据内容、干扰文档和生成配置,只把关键证据放在开头、中间和末尾,重复运行比较答案及引用。还可在不同总长度下做同样测试,检查效果是否随位置变化。
如果各位置都找不到,先看证据是否完整、格式是否破坏或任务本身太难;如果只在检索输入阶段就没证据,应修召回。日志里存在某个片段,也不代表它没被后续压缩或token截断,需要核对最终发给模型的内容。
上下文如何改进
按查询相关性选择互补证据,合并重复片段,减少相似但条件不符的材料。重要证据可优先呈现,但同一说明的前提、结论和例外应放在一起;跨片段依赖不能因只留下关键词而断掉。
为片段加来源、标题、版本和稳定ID,要求关键结论对应证据。长文任务可以先定位并摘出相关原句,再据此回答;压缩应保留数字、否定和适用条件,生成摘要仍要能回查原文。
具体提示位置按模型验证。例如将长材料放在前面、问题置于后面,与“在证据区内优先摆放相关片段”属于不同安排;不能把任何一种位置口诀当成通用修复。
材料确实很多怎么办
把多部分问题分解为子问题,各自检索与提取证据,再综合结果;对遗漏项定向补查。保留实体和版本绑定,防止子问题结果来自不同对象或失效制度。简单问题不必默认多轮调用,先比较额外成本是否换来可靠改善。
怎样验证没有换一种错误
同时看答案正确、证据覆盖、引用准确、条件保留、延迟和费用。将同一证据随机换位,加入相似版本和否定条件,检查方案是否只对固定模板有效。位置改善却丢了例外或引用来源,不算完整修复。
常见追问
把重要材料在两头各放一次就够吗? 可以作为实验方案,但会增加重复、预算和冲突处理成本;先减少噪声并检查任务本身所需证据,不能保证重复摆放就解决问题。
参考资料
- 国内:JavaGuide:RAG基础与长上下文:依据长上下文成本与噪声的分析,说明正文中材料能放入窗口不等于模型能稳定使用证据。
- 国内:JavaGuide:RAG优化与上下文组装:查询相关抽取、去重和证据排序说明如何减少无关材料,同时保留条件、例外和引用。
- 国内:zero2Agent:重排后的片段与截断:借鉴固定条件比较候选数量与回答质量的方法,说明正文中需要联合评估证据覆盖、噪声和成本。
- 国外:Liu等:Lost in the Middle:控制证据位置的实验说明如何识别位置敏感性,并提醒结论与所测模型、任务和长度有关。
- 国外:Anthropic:Long context prompting:依据文档来源标签与先提取原文的建议,组织正文中长材料问答的证据定位和引用回查。


