逆向分析 Codex CLI,让 GPT-5-Codex-Mini 给我画只鹈鹕
一位开发者成功逆向工程了 OpenAI 的 Codex CLI 工具,以直接访问新发布的 GPT-5-Codex-Mini 模型。该模型最初仅通过命令行工具提供,没有公开的 API。通过利用 Codex 修改其自身的 Rust 源代码,开发者添加了一个新的 codex prompt 命令。在解决模型试图使用工具和访问工作区的默认行为后,他最终实现了直接向模型发送提示的功能。这一过程不仅成功生成了 SVG 图像,还揭示了其私有 API 端点 https://chatgpt.com/backend-api/codex/responses 以及必要的请求结构。
背景:一个无法直接访问的新模型
OpenAI 发布了 GPT-5-Codex-Mini,一个更紧凑、成本更低的编码模型,但初期仅能通过 Codex CLI 工具和 VS Code 扩展使用。由于没有公开的 API,直接访问该模型受到限制。
开发者决定利用一个有趣的“漏洞”:Codex CLI 本身是一个开源项目。他的计划不是直接攻击 API,而是修改这个官方工具,为其增加直接发送提示的功能。
我觉得直接对那个 API 进行逆向工程有点不礼貌。但是……Codex CLI 是一个开源项目。那么,升级它,让它通过现有的 API 机制来运行我自己的提示,怎么样呢?
动手:用 Codex 改造自己
Codex CLI 工具是用 Rust 语言编写的,而开发者本人并不熟悉这门语言。他决定让 Codex 自己来完成大部分工作。
- 第一步:编译项目。 他首先让 Codex 弄清楚如何构建自己的源代码。这不仅验证了环境,也让模型对项目结构有了初步了解。
- 第二步:设计新功能。 他向 Codex 提出了明确的需求,要求添加一个名为
codex prompt的新子命令,并规定了其具体功能,如指定模型、添加系统提示等。
迭代与调试:解决意外行为
最初版本的代码并不成功。当开发者尝试生成一个 SVG 图像时,模型并没有直接输出结果,而是表现出其默认的行为模式——试图检查当前目录并准备执行工具。
这不是我想要的——它似乎在 Codex 的正常模式下运行,其系统提示告诉它要编辑磁盘上的文件。我希望它能响应提示,而不是表现得好像它有一个完整的工作区可供使用。
为了解决这个问题,开发者进行了多次迭代:
- 明确指示: 他向 Codex 强调,新的
prompt命令 不应该执行任何工具,也不应该考虑工作区或沙箱。 - 处理错误: 新的尝试导致了
400 Bad Request错误,这表明 OpenAI 的后端 API 期望接收到特定的“指令”(instructions)。直接移除它们是行不通的。 - 最终方案: 解决方案是保留默认的指令和工作区设置,但同时注入一个轻量级的开发者消息,指示模型“不要运行工具”。这个方法奏效了。
最后,他还让 Codex 添加了一个 --debug 选项,用于查看完整的 JSON 请求和响应,以便更好地理解底层通信。
成果:画一只鹈鹕
修改完成后,开发者用新命令测试了不同模型生成 SVG 图像的能力。
- GPT-5-Codex 和 GPT-5 都生成了可识别的鹈鹕骑自行车的 SVG 图像。
- 而 GPT-5-Codex-Mini 的表现则差强人意,生成的图像效果不佳。
这表明,尽管可以访问 Mini 模型,但其能力与更强大的版本相比存在明显差距。
意外发现:揭示私有 API
通过使用 --debug 选项,这次逆向工程带来了额外的收获,揭示了 Codex CLI 与后端通信的关键细节。
私有 API 端点:
https://chatgpt.com/backend-api/codex/responses关键请求参数:
- 请求中必须包含一个
instructions键,其中含有模型的默认指令。 - 可以通过在用户提示之前发送一个
role="developer"的消息来引导模型的行为,例如指示它不要使用工具。
- 请求中必须包含一个
这个发现清晰地展示了如何构造一个有效的请求来与这个未公开的 API 进行交互。