Context rot 与长上下文衰减
注意力权重在全序列上归一化,序列越长单个位置分到的权重越被稀释,再叠加位置偏置与干扰项,模型就「越长越笨」。失败形态不只是记不住,还有指令漂移、早期约束失效、在噪声里选错证据;判断系统开始腐烂要靠可观测信号,不是等用户投诉。
也叫:context rot · 上下文腐烂 · 长上下文衰减 · lost in the middle · 注意力稀释
先学上下文工程
原理拆解出自 T1-3
衰减不是某个 bug,是三条统计性质叠加出来的:稀释、竞争、样本稀疏
- 有效召回接近 1.0那一页单独给 800 token,答得完全正确
- 开始往下掉注意力权重在全序列上被摊薄
- 干扰项开始抢语义相近但无关的内容混了进来
- 曲线最陡的一段15 万 token 全塞,第 137 页答错
上下文短 · 召回稳接近窗口上限 · 召回塌
四种失败形态,比「记不住」精确得多:污染(一次幻觉进了上下文,此后每轮都被当作事实,会自我强化)、干扰(历史太长后复读做过的动作,原地打转)、混淆(工具与检索太多,无关内容把信号挤掉)、冲突(系统提示词说简洁、技能文档说详尽,模型得先花力气仲裁)。
四个基本操作按代价从低到高:写出去(存到窗口之外的记忆)→ 挑进来(这一轮只放这一轮要的)→ 压缩(额外调用 + 信息损耗 + 前缀重写)→ 隔离(子代理各用各的窗口,代价最高)。不要跳级 —— 一遇上下文问题就上多 Agent 隔离,是最常见的错。
别把「窗口装得下」当成「可以装」。大海捞针满分也不等于没问题 —— 真该跑的是位置敏感性测试(关键信息放开头、中间、末尾比准确率)和长度对照测试(800 token vs 15 万 token 同题跑)。
为什么会衰减? 几条统计性质叠加,不是某个 bug:
- 注意力权重是在全序列上归一化分配的。序列越长,单个位置能分到的权重越被稀释;
- 干扰项竞争。长上下文里必然混进大量语义相近但无关的内容,它们和正确内容抢注意力——这也是为什么「多塞一点也没坏处」是错的:多塞的每一段都是潜在干扰项;
- 长序列样本在训练分布里本来就稀疏,超长位置上的泛化天然更弱。
有效召回率
│
1.0┤●●●●●●
│ ●●●●
│ ●●●●
│ ●●●●●
│ ●●●●●●●
└────────────────────────────────────► 上下文长度
短 中 长 接近窗口上限
各家模型的曲线陡缓不同,但没有哪条是平的。
「窗口能装下」和「装进去还管用」是两回事。四种失败形态(比「记不住」精确得多,面试里很好用)
| 形态 | 表现 | 危险之处 |
|---|---|---|
| 污染 | 一次幻觉或一个错误的工具返回进了上下文,此后每一轮都被当作事实 | 会自我强化——模型基于错误结论继续推导,越走越远 |
| 干扰 | 历史太长后,模型开始复读历史里做过的动作,而不是根据当前状态决策 | 表现为「原地打转」,最终答案却看起来正常 |
| 混淆 | 工具太多、检索结果太多,无关内容把信号挤掉 | 选错工具、引用错文档,且看起来有理有据 |
| 冲突 | 不同来源的指令互相矛盾(系统提示词说简洁、技能文档说详尽) | 模型要先花力气仲裁,既慢又飘。官方在自家转录里就观察到过这类冲突 |
注意第四种:它把「上下文工程」和「提示词治理」连了起来——指令写得越多越严,冲突面越大。这正是官方为新一代模型删掉 80% 以上系统提示词、且编码评测无可测损失的直接背景。
四个基本操作(以及它们的代价排序)
写出去 (write) 把状态存到窗口之外的记忆 / 笔记里 代价:低,需要一套读写约定
挑进来 (select) 这一轮只放这一轮需要的 代价:低,需要检索或选择逻辑
压缩 (compress) 历史必然增长,到点做摘要式压缩 代价:中,额外调用 + 信息损耗 + 前缀重写
隔离 (isolate) 子代理各用各的窗口,互不污染 代价:高,引入交接损耗与编排复杂度
按代价从低到高上,不要跳级。 最常见的错误是一遇到上下文问题就上多 Agent 隔离——那是选择和压缩都做完之后才轮到的手段。
以上节选自T1-3 上下文工程与 context rot:把窗口当注意力预算来花,读全文能看到前后语境。
考这个知识点的题1 道
会连带问到9 道
- Q1-01Token 是什么?为什么说上下文窗口是大模型应用的第一约束?
- Q1-11什么是上下文工程?它和提示词工程是什么关系?
- Q1-13多轮历史越来越长你怎么压缩?compaction 时什么必须保真?
- Q2-02有了百万级长上下文,为什么还要 RAG?「RAG 已死」你怎么看?
- Q3-05并行工具调用什么时候用?工具结果太长塞爆上下文怎么办?
- Q3-13上下文快满了:滑动窗口 / 摘要压缩 / 重要性过滤怎么选?压缩丢了关键决定怎么办?
- Q6-03KV Cache 是什么?为什么长上下文推理显存爆炸?
- Q7-01你平时怎么用 AI 写代码?讲一个省了一天的例子和一个翻车的例子
- Q8-04设计一个合同审查助手:长文档、条款比对、风险标注