Skip to content

06 · 上下文用完了怎么办 ​

症状先说 ​

聊到第四十轮,你会发现它开始:忘了你半小时前定的约定、 把已经改好的地方又改回去、反复读同一个文件。

这不是模型变笨了,是上下文里塞满了噪音。官方文档里有两个词说得挺准:

  • 上下文污染:有用信息被杂乱的中间输出淹没。
  • 上下文腐化:随着聊天被相关性低的细节填满,性能逐渐下降。

探索记录、测试日志、堆栈跟踪、命令输出——这些中间产物一旦全留在主线程里, 真正要紧的需求和约束就被挤到角落了。

三条出路 ​

一、压缩 ​

Codex 会在历史记录逼近阈值时自动压缩,把前面的对话浓缩成摘要。相关配置项:

配置项作用
model_context_window当前模型可用的上下文窗口 Token 数
model_auto_compact_token_limit触发自动压缩的 Token 阈值(不设就用模型默认值)
model_auto_compact_token_limit_scope阈值按什么算:total(完整当前上下文,默认)或 body_after_prefix(只算压缩窗口前缀之后的增长量)

压缩不是免费的:它把细节换成了摘要,之前那些「你说过不要动 X」的具体约定 有可能在这一步被抹平。所以更好的做法是别等它压缩。

二、开新会话 ​

最简单也最被低估的一招。一个任务干完就开新的,别在一个会话里连着做三件不相关的事。

关键约定写在 AGENTS.md 里,开新会话不用重讲—— 这也是上一篇为什么值得先做。

需要接着之前那次干:

bash
codex resume

三、拆给子智能体 ​

要读的东西实在太多的时候,别让主线程去读。让它派子智能体去读, 只把结论带回来。这是官方明确推荐的用法:

子智能体工作流将容易产生干扰信息的工作移出主线程。

主智能体守住需求、决策和最终输出;子智能体去探索、跑测试、翻日志, 返回摘要而不是原始输出。

在 CLI 里直接要求就行:

text
用并行子智能体审查这个分支:一个看安全风险,一个看测试缺口,一个看可维护性。
三个都跑完之后,按类别汇总发现,带上文件引用。

运行期间用 /agent 查看和切换各个智能体线程。

代价是 Token:每个子智能体独立用模型和工具,所以子智能体工作流比同等的单智能体运行更费。 另外先用在探索、测试、分流、总结这类以读为主的任务上; 多个智能体同时改代码容易冲突,协调开销也大。

详细用法见 进阶 03 · 子智能体与并行。

一个实用的顺序 ​

上下文吃紧的时候按这个顺序想:

  1. 这段对话还有必要继续吗? 任务换了就开新会话。
  2. 那些日志和探索结果,主线程真的需要吗? 不需要就拆给子智能体。
  3. 约定是不是每次都在重讲? 写进 AGENTS.md。
  4. 确实是一个长任务? 再去调压缩阈值。

大部分人卡在第 4 步调参数,其实问题在第 1 步。

下一步 ​

快速上手到这儿就完了。接着可以:

相关官方文档 ​

非官方社区教程 · 「官方文档」区为 learn.chatgpt.com 中文原文镜像 · 以官方页面为准