Context rot 与长上下文衰减

LLM 与 Prompt 基础进阶10讲解 1

注意力权重在全序列上归一化,序列越长单个位置分到的权重越被稀释,再叠加位置偏置与干扰项,模型就「越长越笨」。失败形态不只是记不住,还有指令漂移、早期约束失效、在噪声里选错证据;判断系统开始腐烂要靠可观测信号,不是等用户投诉。

也叫:context rot · 上下文腐烂 · 长上下文衰减 · lost in the middle · 注意力稀释

原理拆解出自 T1-3

各家曲线陡缓不同,没有一条是平的
衰减不是某个 bug,是三条统计性质叠加出来的:稀释、竞争、样本稀疏

  1. 有效召回接近 1.0那一页单独给 800 token,答得完全正确
  2. 开始往下掉注意力权重在全序列上被摊薄
  3. 干扰项开始抢语义相近但无关的内容混了进来
  4. 曲线最陡的一段15 万 token 全塞,第 137 页答错
上下文短 · 召回稳接近窗口上限 · 召回塌
有效召回率接近 1.0持续下滑
注意力权重集中在全序列上被稀释
干扰项每多塞一段就多一个
训练分布稠密长序列样本本来就稀疏

四种失败形态,比「记不住」精确得多:污染(一次幻觉进了上下文,此后每轮都被当作事实,会自我强化)、干扰(历史太长后复读做过的动作,原地打转)、混淆(工具与检索太多,无关内容把信号挤掉)、冲突(系统提示词说简洁、技能文档说详尽,模型得先花力气仲裁)。

四个基本操作按代价从低到高:写出去(存到窗口之外的记忆)→ 挑进来(这一轮只放这一轮要的)→ 压缩(额外调用 + 信息损耗 + 前缀重写)→ 隔离(子代理各用各的窗口,代价最高)。不要跳级 —— 一遇上下文问题就上多 Agent 隔离,是最常见的错。

别把「窗口装得下」当成「可以装」。大海捞针满分也不等于没问题 —— 真该跑的是位置敏感性测试(关键信息放开头、中间、末尾比准确率)和长度对照测试(800 token vs 15 万 token 同题跑)。

为什么会衰减? 几条统计性质叠加,不是某个 bug:

  1. 注意力权重是在全序列上归一化分配的。序列越长,单个位置能分到的权重越被稀释;
  2. 干扰项竞争。长上下文里必然混进大量语义相近但无关的内容,它们和正确内容抢注意力——这也是为什么「多塞一点也没坏处」是错的:多塞的每一段都是潜在干扰项;
  3. 长序列样本在训练分布里本来就稀疏,超长位置上的泛化天然更弱。
原文示意
有效召回率
   │
1.0┤●●●●●●
   │       ●●●●
   │            ●●●●
   │                 ●●●●●
   │                       ●●●●●●●
   └────────────────────────────────────► 上下文长度
     短        中          长        接近窗口上限

  各家模型的曲线陡缓不同,但没有哪条是平的。
  「窗口能装下」和「装进去还管用」是两回事。

四种失败形态(比「记不住」精确得多,面试里很好用)

形态 表现 危险之处
污染 一次幻觉或一个错误的工具返回进了上下文,此后每一轮都被当作事实 会自我强化——模型基于错误结论继续推导,越走越远
干扰 历史太长后,模型开始复读历史里做过的动作,而不是根据当前状态决策 表现为「原地打转」,最终答案却看起来正常
混淆 工具太多、检索结果太多,无关内容把信号挤掉 选错工具、引用错文档,且看起来有理有据
冲突 不同来源的指令互相矛盾(系统提示词说简洁、技能文档说详尽) 模型要先花力气仲裁,既慢又飘。官方在自家转录里就观察到过这类冲突

注意第四种:它把「上下文工程」和「提示词治理」连了起来——指令写得越多越严,冲突面越大。这正是官方为新一代模型删掉 80% 以上系统提示词、且编码评测无可测损失的直接背景。

四个基本操作(以及它们的代价排序)

写出去 (write)   把状态存到窗口之外的记忆 / 笔记里      代价:低,需要一套读写约定
挑进来 (select)  这一轮只放这一轮需要的                代价:低,需要检索或选择逻辑
压缩   (compress) 历史必然增长,到点做摘要式压缩        代价:中,额外调用 + 信息损耗 + 前缀重写
隔离   (isolate) 子代理各用各的窗口,互不污染          代价:高,引入交接损耗与编排复杂度

按代价从低到高上,不要跳级。 最常见的错误是一遇到上下文问题就上多 Agent 隔离——那是选择和压缩都做完之后才轮到的手段。

以上节选自T1-3 上下文工程与 context rot:把窗口当注意力预算来花,读全文能看到前后语境。

考这个知识点的题1

会连带问到9