迷失在中间
位置注意力的影响。
迷失在中间 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。
中间丢失效应
在长上下文模型中,检索准确率会随位置呈现一条U形曲线:上下文开头和结尾的事实能够被很好地召回,而中间的事实召回效果最差。这就是“中间丢失”效应。
- 这是注意力机制和训练方式的特性,并非随机现象。
- 即使答案明确存在于上下文中,这种现象仍然存在。
位置并非中性因素;您必须围绕它进行设计,因为它会影响可靠性。
中间位置为何更差
中间位置会受到多种因素的共同影响:位置偏差偏向较新的令牌和最前面的令牌,训练数据过度呈现“答案位于开头或结尾”的模式,而内部大量相互竞争的干扰项也会稀释对任何单个事实的注意力。
您无法消除模型中的这种偏差,但可以停止与它对抗。
将关键内容放在边缘
首要且最可靠的缓解措施是:将模型必须使用的内容放在边界处。任务指令和价值最高的证据应放在顶部和底部附近,而不是埋在中心。
- 以任务和关键事实开头。
- 在最末尾重复核心指令(“任务提醒:……”)。
context = (
TASK_INSTRUCTION +
KEY_EVIDENCE +
bulk_supporting_material +
TASK_REMINDER # restate at the tail
)按相关性排序放置
当您可以控制检索分块的顺序时,不要直接按照检索得分从前到后排列。请交错排列,使最相关的分块位于两端,让相关性最低的分块填充中间位置——有意利用这条U形曲线。
这种“边缘加载”可以挽回很大一部分中间位置损失。
def edge_load(chunks):
# chunks sorted by relevance desc
head, tail = [], []
for i, c in enumerate(chunks):
(head if i % 2 == 0 else tail).append(c)
return head + list(reversed(tail))缩小干草堆
解决中间位置损失最廉价的方法,就是减少中间内容。积极进行预筛选——在组装前删除无关分块——可以缩小事实容易丢失的内部区域,并将注意力集中到重要内容上。
一个1.5万令牌的聚焦提示词几乎没有易受影响的中间区域;一个60万令牌的提示词则大部分都是中间区域。
路标与索引
请为模型提供一张地图。顶部的目录加上清晰的分节锚点,可以让模型导航到相关区域,而不是依赖原始的位置召回。
- 为分节编号,并在问题中引用这些编号。
- 添加明确的锚点,例如模型可以搜索的 SECTION 7: PRICING。
结构可以部分弥补位置可靠性。
# Top of prompt
# INDEX: [S1 Overview] [S2 Risks] [S3 Pricing] [S4 Appendix]
# Question: 'Using S3 only, what is the renewal fee?'回答前强制扫描
提示模型在回答之前列出相关材料出现的位置。先定位证据这一行为可以抵消模型跳过中间区域的倾向。
“先列出每个提到续费的分节及其锚点,然后再回答。”这种明确的扫描会显现出直接提问可能遗漏的中间内容。
ask = (
'Step 1: list all anchors mentioning the topic. '
'Step 2: quote the relevant line from each. '
'Step 3: answer using only those quotes.'
)重新提问并重新定位
如果关键事实落在盲区中且召回不稳定,请将该事实移到边缘后重新发起调用。对于包含多个事实的任务,您可以运行多轮处理,轮换哪些事实占据强位置,然后协调各轮结果。
当单一布局不可靠时,轮换位置是一种实用的稳健性技巧。
分块合并以实现 coverage
对于穷举式任务(“找出所有违规项”),单次巨大的处理会遗漏中间位置的项目。请拆分为彼此重叠且足够小的窗口,使每个窗口都没有薄弱的中间区域,分别运行各个窗口,然后合并并去重结果。
- 重叠可以防止遗漏边界内容。
- 合并步骤会协调重复项和冲突。
Coverage 任务更适合多次小规模处理,而不是一次巨大处理。
def coverage(doc, win, overlap):
out = []
for w in windows(doc, win, overlap):
out += extract(w)
return dedupe(out)测量您自己的U形曲线
这种效应的严重程度会因模型和提示词形状而异。请对其进行刻画:在从浅到深的不同位置插入一个金丝雀标记,并绘制召回率曲线。使用这条曲线为该模型决定安全的上下文长度和边缘加载策略。
请根据测量得到的行为进行工程设计,而不要依赖传闻。
depths = [0.0, 0.25, 0.5, 0.75, 1.0]
recall = {d: probe_canary_at(d) for d in depths}
# Expect a dip around 0.5位置稳健性实践指南
要克服中间丢失效应,请缩小干草堆,对最相关的内容进行边缘加载,在末尾重述任务,添加索引并强制执行“回答前先定位”扫描,在重新提问时轮换位置,并使用分块合并来实现穷尽 coverage。最重要的是,测量您所用模型的曲线,并据此进行设计。
快速检查
您有一个必须使用的事实,以及大量用于支持它的上下文,并且已经注意到模型有时会忽略这个事实。
回顾:位置注意力效应
长上下文召回呈U形:边缘可靠,中间不可靠。请通过缩小干草堆、对最相关的分块进行边缘加载、在末尾重述任务、添加索引并强制执行“回答前先定位”扫描、在重新提问时轮换位置,以及使用分块合并完成穷尽 coverage 来应对这一问题。请测量模型的实际曲线,并据此设计内容位置,而不要相信均匀的召回能力。
用 AI 导师学习 AI Prompt Engineering — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 53
- 课程
- 199
常见问题解答
「迷失在中间」课时是免费的吗?
是的 — 「迷失在中间」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。
「迷失在中间」这节课中我会学到什么?
位置注意力的影响。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Prompt Engineering 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「迷失在中间」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Prompt Engineering 课中编写并运行代码吗?
能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。