交流群即将上线
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 · 子智能体与并行。
一个实用的顺序
上下文吃紧的时候按这个顺序想:
- 这段对话还有必要继续吗? 任务换了就开新会话。
- 那些日志和探索结果,主线程真的需要吗? 不需要就拆给子智能体。
- 约定是不是每次都在重讲? 写进
AGENTS.md。 - 确实是一个长任务? 再去调压缩阈值。
大部分人卡在第 4 步调参数,其实问题在第 1 步。
下一步
快速上手到这儿就完了。接着可以:
- 想让它接上公司的工具 → 进阶 02 · 用 MCP 接上你的工具
- 手上有具体的活 → 实战案例
- 想查某个配置项 → 官方文档镜像