Codex 越聊越笨?上下文压缩、丢失与恢复的排查方法
[!NOTE]
/compact会压缩当前对话上下文;当会话接近上下文限制时,Codex 也可能自动进行压缩。压缩的目标是保留继续工作所需的信息,不是删除仓库文件,但摘要不可能保证保留每一处细节。本文不推测模型内部算法,而是用可观察证据区分“内容被压缩”“文件没有保存”“工作目录改变”和“原始要求本来就不清楚”。命令与产品行为核验于 2026-08-07。
“Codex 刚才还记得,为什么聊久了突然答非所问?”
这类问题很容易被一句“上下文太长了”带过。
但真正排错时,至少有四种完全不同的情况:
- 细节在上下文压缩中没有进入摘要。
- 关键决定只存在于聊天,没有写入项目。
- 会话工作目录、分支或文件状态已经变化。
- 多个要求互相冲突,代理选择了错误优先级。
如果把它们都叫作“失忆”,修复动作就会很随机。
有人不停重复全部历史,反而更快把新上下文填满。
有人开一个新聊天,却没带上任何状态文件。
还有人以为/compact会删除磁盘内容,紧张地复制整个项目。
更可靠的方法,是把会话拆成三层:
- 当前模型可见的活动上下文。
- 用户界面中的对话记录。
- 仓库和外部系统中的持久状态。
这篇文章会建立一套压缩前检查、压缩后恢复和异