跳到主要内容

A3.1 上下文 = 工作记忆:装满了怎么办

一间只进不出的房子​

心理学有个经典结论:人的工作记忆同时只能端住七件事左右,多了就往外掉。智能体也有工作记忆,就是上下文窗口——模型每一步「看得见」的全部世界。

麻烦在于,A0 深入层埋过的那颗雷:循环每转一圈,上下文只增不减。 读一个代码文件,3000 token 进来了;跑一次测试,6000 token 的报错日志灌进来了;每次思考和工具调用也各占一截。先算笔账:

  • 读 3 个文件 ≈ 10k token;
  • 跑 2 次测试 ≈ 12k token;
  • 十几步的思考、修改、调用 ≈ 8k token。

一个 32k 的窗口,一个十几步的重构任务就能顶到天花板——长任务撞墙是必然,不是意外。

而且撞墙之前就已经开始付代价了。上篇 8.2 节讲过「标称窗口 ≠ 有效窗口」:窗口塞得越满,模型对中间内容的注意力越差,容易「读了但没看见」;同时每一步的计算都要背着全部历史,又贵又慢。业内管这叫上下文腐烂——还没溢出,先变笨了。

四种活法,亲手跑一遍​

同一个 12 步的重构任务,四种上下文策略,四种结局:

🎮 动手实验
上下文管理器:同一个长任务,四种活法
任务:重构订单模块(12 步)。上下文窗口 32k token(示意)。选一种策略跑完时间线,重点盯着上方的「上下文水位条」——四种策略都试完,你就懂上下文工程了。
什么都不做,任由上下文一路膨胀
上下文水位0 / 32,000 token(0%)
💡 要点:循环每转一圈,上下文只增不减,而窗口是死的——长任务的成败一半取决于上下文管理策略。四条时间线的教训依次是:不管理必死;按时间截断会扔掉要命的信息;压缩是「有损保命」;外置记忆最稳但要纪律。真实智能体(如 2025-2026 年的编码智能体)普遍是 ③+④ 混用:自动压缩兜底,关键信息记笔记。

请四种策略全部跑完(按钮上会打 ✓):

  1. ① 硬扛不管理:水位一路爬升,第 12 步 💥 溢出——前 11 步的工作全部白费;
  2. ② 截断最旧:第 10 步 ✂️ 自动扔掉最早的内容,其中恰好有第 3 步的接口约定「金额一律用分为单位存储」——收尾时模型凭感觉用了「元」,一个金额差 100 倍的 bug 就这么埋进了代码;
  3. ③ 定期压缩:第 9 步触发 🗜️,把 1~7 步压成 1500 token 的摘要,接口约定被写进摘要保住了——任务完成,代价是一次压缩调用和「摘要必丢细节」的隐患;
  4. ④ 外置记忆:第 3 步就主动把约定 📝 写进笔记文件,大文件读后即弃、测试日志只留关键行——全程水位没过半,收尾时读回笔记,最稳的一条时间线。

四种策略的取舍一张表:

策略存活关键信息额外成本一句话
硬扛❌ 溢出—无不是选项
截断最旧✅ 但带病可能被扔无按时间扔,不看重要性
定期压缩✅摘要保留(有损)压缩调用有损保命
外置记忆✅ 最稳笔记永存记/读笔记的调用 + 纪律好记性不如烂笔头

这门「决定什么信息进上下文、以什么形式、留多久」的手艺,2025 年起有了正式名字:上下文工程。业界的共识是:提示工程管「怎么说」,上下文工程管「给模型看什么」——对智能体而言,后者往往更决定成败。

这个实验在哪里不准确?

时间线和数字是教学构造:真实系统的压缩触发阈值、保留窗口、筛选规则远比「过 24k 就压缩 1~7 步」精细,而且会分层处理(系统提示永不压、最近几轮全保留)。另外要诚实:「压缩必丢细节」是原理性的——好的压缩提示词只能减损,不能免损。实验里③「丢的恰好是不再需要的测试日志」是剧本的仁慈,现实不保证这种运气。

小结​

本节要点
  • 上下文是智能体的工作记忆:循环每圈只增不减,长任务撞墙是必然。
  • 溢出之前先「腐烂」:窗口越满,模型越贵越笨——管理要趁早。
  • 四策略:硬扛必死、截断危险、压缩有损保命、外置记忆最稳;真实系统压缩兜底 + 笔记保关键,混着用。
📝 动手自测0/3
1. 智能体的上下文为什么在长任务里「只增不减」?
2. 实验里「截断最旧」策略埋下金额差 100 倍 bug 的根本原因是?
3. 关于「定期压缩」策略,下面哪个说法是对的?

延伸阅读​