AI Prompt Engineering · 课时

迷失在中间

位置注意力的影响。

第 2 / 4 课13 个步骤

迷失在中间 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 百万 Token 上下文窗口
  2. 迷失在中间
  3. 组织超大型提示
  4. 缓存长前缀
← 返回 AI Prompt Engineering