OpenAI Codex的Agent Loop:一次反直觉的工程选择

昨晚熬夜看OpenAI工程师Michael Bolin的文章,看完被那个反直觉的工程选择震惊了。不是模型能力有多强,而是他们故意不用优化接口这个事。

现在用Claude Code或者其他AI编程工具,很容易觉得它们就是个会写代码的聊天机器人。但Codex的定位完全不同。

你想改项目里的bug,让Codex看看登录为啥失败。它不会只给建议,而是真的去看项目结构、执行命令、读文件内容、跑测试、看报错,然后根据这些真实结果决定下一步。整个过程就像有人在你的电脑上操作,直到问题解决。

这就是agent loop

Codex的Agent Loop循环

Codex不是单个模型,是一整套系统。CLI工具、云服务、VS Code插件,都共享同一个核心执行框架。

你发指令,Codex先拼个详细的prompt,里面有你的话、工作目录、shell类型、工具列表、项目文档。然后调用模型,模型判断是直接回复还是调用工具。

如果需要调用工具,就在你本地执行ls、cat、npm test这些命令。执行完把输出塞回上下文,再调模型。

反复循环,直到模型说不需要调用工具了,给你最终反馈。

一次简单任务可能包含几十次模型调用。这个agent loop机制才是Codex的核心竞争力。

多轮Agent Loop循环

Responses API有个previous_response_id参数,可以优化上下文传输,避免每次都重新发完整对话,减少JSON平方级膨胀。

Codex故意不用。

我当时愣住为啥要跟自己过不去。人家给的理由听完直接服气。

请求完全无状态,每个请求独立不依赖服务端状态。支持Zero Data Retention(零数据保留),服务端完全不存用户对话数据。

所以OpenAI就算服务器被黑、被法院传唤,你的代码对话他们也弄不到。

为了安全性和合规性,Codex宁愿牺牲性能也不去用那个看似显而易见的优化。

那性能怎么办?重点都在prompt caching(提示缓存)上。

文章提到他们踩过的坑。MCP工具顺序不一样,全部缓存miss。中途改sandbox配置,缓存失效。切换工作目录时必须追加新message,不能改旧prompt,否则缓存也废。

这些细节咱们平时写代码也常遇到。

还有个conversation compaction(对话压缩)。

上下文快到窗口上限时,Codex自动触发压缩。不是简单摘要,而是通过Responses API返回带加密状态的压缩表示。

用户看不到完整对话,但模型记得之前内容。就像人的大脑,你不一定记得每顿饭吃了啥,但肯定记得自己喜不喜欢吃辣。

压缩和快照机制是这样工作的:

第一次推理的快照

第一次调用模型时,Codex构建prompt并处理推理结果。

工具调用后的快照

执行完工具调用后,结果塞回上下文,进行下一轮推理。

最终完成的快照

模型决定不再调用工具时,给最终答案,整个循环结束。

Codex CLI在GitHub上完全开源。

现在很多AI开发者在逆向工程Claude Code这类闭源工具。OpenAI直接公开内部实现,还写文章讲工程细节,这波确实良心。

HackerNews上有人说,OpenAI在上下文压缩这块确实是做得最好的,比Claude Code强。

看完文章的感受:AI编程工具的竞争已经从谁的模型更强,进入了谁的工程更好。模型能力是基础,真正决定用户体验的是这些看不见的工程细节。agent loop设计、工具调用管理、上下文压缩和缓存,这些才是关键。

OpenAI公开Codex内部机制,也是在向行业展示如何正确做软件代理的样板。

GitHub仓库是openai/codex。


如果你觉得这篇文章有点意思,或者学到了东西,点个赞,转发给朋友,让他也了解一下Codex的这些黑科技。关注我,下次OpenAI再爆啥料,我第一时间给你讲。

下期见。