最近看到 论坛上有网友反馈,Codex 跑任务时一直重复压缩上下文,压缩一次又继续压缩,甚至一晚上都停不下来。更奇怪的是,日志里一直提示准备修改,却迟迟没有真正开始干活。本文整理
|
最近看到 论坛上有网友反馈,Codex 跑任务时一直重复压缩上下文,压缩一次又继续压缩,甚至一晚上都停不下来。更奇怪的是,日志里一直提示准备修改,却迟迟没有真正开始干活。本文整理这个问题的排查思路,以及网友后来发现的几个关键原因,遇到 Codex 疯狂压缩的可以参考。
一、Codex为什么会一直压缩?
这个问题最近在使用 Codex 跑长任务的时候比较容易遇到。 论坛上有网友发帖:
最开始的表现非常典型。 任务启动以后,看起来 Codex 一直在工作,但是过了一晚上回来,发现任务还停留在最开始的阶段。 仔细观察日志会发现: Codex不断读取日志 → 分析 → 说准备开始修改 → 再读取日志 → 再压缩上下文 → 继续分析。 真正的代码修改反而没有进行多少。 更加奇怪的是,网友发现并不是上下文真的已经大到无法处理,因为有几次甚至不到 20K 就触发了压缩。 所以这个问题不能简单归结为: “上下文太长了,所以正常压缩。” 二、最开始大家怀疑是上下文太多帖子里第一批回复基本都认为,问题可能出在上下文空间。 有网友直接表示:
这个判断其实并不是完全没有道理。 Codex 做长任务时,会不断累积:
这些内容最终都会进入上下文。 当上下文接近模型允许的范围以后,就需要进行压缩。 正常情况下流程应该是: 上下文变长 → 触发压缩 → 压缩历史信息 → 继续任务。 但出现问题以后,可能变成: 压缩 → 上下文依旧过多 → 再压缩 → 还是不满足 → 再压缩。 最终就形成了所谓的“压缩循环”。 三、但这个案例比较奇怪:不到20K就压缩后来楼主补充了更加关键的信息。 他发现多次触发压缩时,实际上并没有达到 20K。 也就是说:
这就比较值得注意了。 如果上下文只有十几 K 就开始不断压缩,那么单纯解释成“上下文太大”显然说不通。 这时候排查方向就应该从: “到底用了多少上下文?” 转向: “Codex到底根据什么条件判断需要压缩?” 四、先检查 AGENTS.md后来楼主总结了第一个排查方向:
这个问题很多人容易忽略。 AGENTS.md 本身就是 Codex 执行任务时非常重要的上下文来源。 如果里面塞了大量:
那么每次进入任务都会携带大量额外上下文。 尤其是项目根目录和子目录存在多个 AGENTS.md 时,需要特别检查实际生效的规则范围。 建议直接搜索项目:
然后检查:
如果只是一些简单项目规范,没有必要写成几十 KB 的文档。 五、检查上下文窗口是不是异常第二个排查方向是:
这里其实非常重要。 不要只看 Codex 当前显示的上下文占用,还要关注: 模型实际允许的上下文窗口是多少。 因为不同模型、不同客户端版本、不同配置方式,最终使用的上下文空间可能并不完全一样。 特别是一些第三方模型配置或者自定义模型目录,很容易出现: 客户端认为模型拥有一个上下文窗口,实际模型并没有这么大的上下文能力。 这种情况下就可能出现各种奇怪行为。 例如:
所以遇到异常压缩时,建议首先确认:
这些参数是不是互相匹配。 六、还有一个容易被忽略的问题:提示词楼主后来还提到第三点:
这里非常值得注意。 有些人为了让 Coding Agent 更认真,会在 AGENTS.md 里面加入非常强的思考要求。 比如:
这些规则看起来没有问题。 但是如果写得过度,就可能产生一个副作用: 模型越来越喜欢“分析”,而不是“执行”。 最终就容易出现:
这也是为什么有时候你会看到 Codex 明明一直有输出,但代码就是没怎么变化。 七、真正值得注意:中转模型可能才是问题来源到了 9 月 15 日,这个帖子又出现了一个非常关键的后续回复。 有网友表示:
这里出现了一个非常重要的关键词: model_catalog_json 如果你使用的是自定义模型配置,或者通过第三方接口接入模型,那么 Codex 对模型能力的判断,很可能依赖模型目录中的配置。 简单理解就是:
如果模型目录中的参数和实际模型能力不一致,就可能产生非常奇怪的行为。 特别是: 客户端认为模型拥有很大的上下文,但实际接口并没有对应能力。 这种情况下,“压缩循环”就值得重点怀疑。 八、为什么订阅正常,中转却疯狂压缩?这个现象尤其有参考价值。 网友反馈:
这说明问题未必出在 Codex 本身。 更准确地说,应该把问题拆成三层:
如果原生订阅正常,而更换接口后出现疯狂压缩,那么就要重点检查:
尤其是自定义模型配置中的上下文参数。 所以不要看到 Codex 压缩循环,就直接认定: “Codex 出 bug 了。” 也有可能是模型配置与实际接口能力不一致。 九、还有一种解决思路:把压缩阈值调小帖子最后又出现了一个比较实用的经验:
这里的 258 建议大家不要机械照抄。 因为不同版本、不同配置界面的参数含义可能不同。 更值得参考的是这个思路: 不要把压缩阈值设置得过激进,也不要让上下文一直膨胀到极限。 对于经常运行长任务的人,可以尝试调整压缩相关参数,让 Codex 在更合适的时机进行上下文整理。 但需要注意: 压缩太早也不一定是好事。 因为压缩会丢失一部分历史上下文,如果你的任务本来就很依赖前面的详细过程,压缩太频繁反而可能导致模型不断重新理解项目。 所以这类参数最好根据自己的任务类型进行测试。 十、Codex疯狂压缩,可以按照这个顺序排查我比较建议按照下面这个顺序排。 1、先看是不是AGENTS.md太大搜索:
重点检查有没有:
2、检查上下文窗口重点确认:
不要只看客户端显示的数字。 3、检查有没有“过度思考”提示尤其检查:
有没有大量要求:
这些提示如果堆叠过多,很容易让 Agent 在真正修改代码之前消耗大量上下文。 4、检查model_catalog_json如果你的 Codex 使用了自定义模型配置,这个地方非常值得看。
尤其是: 客户端认为的模型能力,和实际接口返回的模型能力,是不是一致。 5、对比不同模型接口如果你发现:
或者:
那么问题范围就已经缩小很多了。 这时候优先检查配置和接口兼容性,而不是继续折腾项目代码。 十一、我认为这个问题最关键的地方这个帖子最有价值的一点,其实不是“把压缩调成多少”。 而是它暴露了一个现象: Codex出现异常压缩时,不一定意味着上下文真的太大。 尤其是出现下面这些情况:
这时候就应该怀疑: 模型配置、上下文参数、Agent规则以及接口兼容性。 不要只盯着“上下文太长”这一条。 十二、最后总结如果你的 Codex 也经常出现:
可以先按照下面的思路排查:
目前从这个帖子里的反馈来看,“模型配置与实际接口能力不一致”是一个值得重点关注的方向。 尤其是使用自定义模型配置时,不要只看模型名字对不对,最好把上下文窗口、能力声明以及实际接口行为一起检查。 对于长时间运行的 Codex 任务来说,稳定的上下文管理比单纯追求更大的上下文窗口更重要。 |
2026-07-02
2026-06-24
2026-06-01
2026-06-27
2026-06-02