完整的流式实现
Codex 一个任务可能跑几分钟、几十轮工具调用。流式必须稳定推送到 response.completed,中途断开就是整段任务白跑,还照样扣费。
Responses API 原生支持 · 国内节点直连 · 按量计费
不用改 Codex 本身,不用挂代理,不用外币卡。在 ~/.codex/config.toml 里加一个
model_providers 段落,把 base_url 指向中转站、wire_api 设为
responses,重启后 codex 直接开工。
GPT-5.6 SolGPT-5.6 TerraGPT-5.6 Luna# 兼容 Codex CLI · 桌面端 · IDE 扩展 · 支付宝微信充值
# 模型与推理强度model = "gpt-5.6-sol"model_provider = "relay"model_reasoning_effort = "high"disable_response_storage = true# 中转站 provider[model_providers.relay]name = "Codex 中转站"base_url = "https://你的中转站域名/v1"env_key = "RELAY_API_KEY"wire_api = "responses" # 关键:不能写 chat
接收 Codex 的请求,转发给上游,再把响应原样送回。对客户端完全透明——不改代码、不装插件、不用登录 ChatGPT 账号,它只认 base_url。
Codex 默认把请求发往 OpenAI 官方接口,用 ChatGPT 账号登录态或 API Key 鉴权。 国内用户会连撞三堵墙:网络不通、没有外币卡付不了款、订阅额度跑满就得等重置。
中转站把这三堵墙一次拆掉:在国内可直连的节点上接住请求,用自己的上游渠道去调 OpenAI, 再把结果返回。你要做的只有一件事——在 config.toml 里换个 provider。
服务定位:普通 API 中转站比的是「模型多不多、单价低不低」; Codex中转站必须额外满足三个硬条件——原生支持 Responses API、 流式能完整跑到 response.completed、推理强度参数被正确透传。少一条,Codex 要么接不上,要么长任务必断。
这是 Codex 和其他编程 Agent 最大的不同。新版 Codex 已切换到 Responses API,老的 wire_api = "chat" 写法被弃用,只做 chat 兼容的中转站接不上。
| 对比项 | wire_api = "responses" |
wire_api = "chat" |
|---|---|---|
| 接口路径 | /v1/responses |
/v1/chat/completions |
| 新版 Codex 支持 | 原生 | 已弃用 |
| 推理过程 | 可携带 reasoning 内容,支持强度分档 | 无原生推理字段 |
| 流式结束事件 | response.completed |
[DONE] |
| 接不上时的表现 | — | 404 或 stream disconnected before completion |
一句判定:如果一家中转站的文档里只写 /v1/chat/completions、
对 /v1/responses 只字不提,那它就不是 Codex 中转站,
无论价格多低都不用再看。
Codex 一个任务可能跑几分钟、几十轮工具调用。流式必须稳定推送到 response.completed,中途断开就是整段任务白跑,还照样扣费。
model_reasoning_effort 从 minimal 到 xhigh 五档,必须原样传到上游。被中转站悄悄降档,表现就是「设了 high 却像 low 一样敷衍」。
读文件、改代码、跑命令全靠 tool calling。上下文窗口被缩、工具调用被砍,Codex 会表现为「读不全文件、改一半就停」。
Codex 每轮都重复携带项目上下文。缓存输入的费率通常只有普通输入的十分之一,后台能不能看到这项明细,直接决定你能不能算清成本。
GPT-5.6 是一个模型家族,不同入口开放的成员不同。下列为 Codex 场景常用的型号与定位,实际可用列表以平台模型页为准。
| 模型 | 定位 | 输入 | 缓存输入 | 输出 |
|---|---|---|---|---|
| GPT-5.6 Sol | 旗舰推理,复杂重构与跨文件设计 | 125 | 12.5 | 750 |
| GPT-5.6 Terra | 主力档位,日常编码与工程任务 | 以平台模型页实时费率为准 | ||
| GPT-5.6 Luna | 轻量档位,批量简单改动、脚本任务 | 5 | 0.5 | 30 |
| GPT-5.5 | 上一代通用型号,兼容性好 | 以平台模型页实时费率为准 | ||
| GPT-5.3-Codex-Spark | 研究预览型号,可用性受套餐限制 | 以平台模型页实时费率为准 | ||
选型建议:日常改代码用主力档位性价比最高;复杂重构、架构设计再切旗舰档; 批量的格式化、重命名这类机械改动用轻量档,成本能差出一个数量级。 缓存输入的费率约为普通输入的十分之一——把项目上下文稳定下来复用,是最直接的省钱手段。
Codex 能用「账号登录」也能用「API Key」,但它们是两套完全独立的计费。中转站走的是 API 这条线。
| 方式 | 怎么计费 | 额度用完 | 国内支付 | 适合谁 |
|---|---|---|---|---|
| ChatGPT 订阅 Plus / Pro / Business |
月付固定,含额度;与网页、App 共用 | 可购买 Credits 续用 | 需外币卡 | 同时重度使用 ChatGPT 网页端的人 |
| 官方 API Key | 按实际消耗 token 单独计费 | 充值即可,无墙 | 需外币卡 | 有外币卡、要求零渠道风险的企业 |
| Codex中转站 | 按 token 计费,折算成人民币结算 | 充值即可,无墙 | 支付宝/微信 | 国内个人开发者与中小团队 |
一个常被忽略的点:买了 ChatGPT Plus 或 Pro,不会给 API 账户附送任何余额。 很多人以为订阅了就能在 Codex 里随便用 API,结果配置好第三方 provider 后一头雾水—— 这是两条完全独立的通道。中转站按 token 计费,跟订阅额度没有任何关系。
关键只有两个文件:config.toml 定义 provider,.env 存放密钥。密钥不要直接写进 config.toml。
先运行一次 codex 让它生成配置目录,然后完全退出。配置文件位置:macOS / Linux 在 ~/.codex/config.toml,Windows 在 C:\Users\<用户名>\.codex\config.toml。把下面的内容写到文件顶部。
# ===== 模型与推理强度 =====model = "gpt-5.6-sol" # 模型名以中转站模型列表为准model_provider = "relay" # 对应下方段落名model_reasoning_effort = "high" # minimal/low/medium/high/xhighdisable_response_storage = true # 第三方 provider 建议开启# ===== 中转站 provider =====[model_providers.relay]name = "Codex 中转站"base_url = "https://你的中转站域名/v1" # 多数中转站写到 /v1 结尾env_key = "RELAY_API_KEY" # 只写变量名,不写密钥本身wire_api = "responses" # 关键:新版必须是 responses
在同一个 .codex 目录下新建 .env,变量名必须和 config.toml 里的 env_key 完全一致——这两处不一致是 401 报错的头号原因。
# 变量名要和 config.toml 里的 env_key 一模一样RELAY_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
完全退出 Codex 后重新启动,确认它走的是你配的 provider。也可以先用 curl 直接打接口,绕开 Codex 判断是链路问题还是配置问题。
# 直接打 Responses 接口,确认中转站通路curl "https://你的中转站域名/v1/responses" \ -H "Authorization: Bearer $RELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5.6-sol","input":"ping"}'# 通了就启动 Codex$ codex
三个高频坑:① 别把网站面板地址当接口地址;
② 别先配永久环境变量——配错了残留下来极难排查,先用 .env 验证;
③ 之前用 ChatGPT 账号登录过的,记得清掉 auth.json 的残留登录态,否则会和第三方密钥打架。
看到报错先别怀疑 Codex 本身——九成以上的问题出在 env_key 对不上、base_url 拼错、wire_api 写成了 chat 这三处。
| 现象 | 最可能的原因 | 怎么修 |
|---|---|---|
| 401 Unauthorized | env_key 与 .env 变量名不一致 | 逐字符核对两处变量名;确认 .env 在 .codex 目录下而不是项目目录 |
| 401 且曾登录过 ChatGPT | auth.json 残留登录态冲突 |
清掉旧的登录态与第三方配置残留,重新只保留一套 provider 配置 |
| 401 密钥发错了地方 | base_url 仍指向 OpenAI 官方 | 确认 model_provider 指向的是你新增的段落名,不是默认 provider |
| 404 Not Found | base_url 路径拼错 | 多数中转站写到 /v1 结尾即可,Codex 自己拼 /responses;别多加斜杠或路径 |
| 404 且 wire_api 是 responses | 该中转站根本不提供 Responses 接口 | 换支持 Responses 协议的中转站,这个改配置解决不了 |
| stream disconnected before completion |
流式在 response.completed 前断开 |
先用短任务对照测试;短任务正常而长任务必断=中转站流式实现或超时有问题 |
| 配了却没生效 | Codex 没有完全退出 / 旧环境变量残留 | 彻底关闭进程再启动;检查系统里有没有同名环境变量覆盖了 .env |
| 设了 high 却像敷衍 | 推理强度参数未被透传 | 对比 minimal 与 xhigh 的耗时和输出长度,无明显差异说明被中转站吃掉了 |
| 429 或频繁重试 | 并发/速率被限,或上游限流 | 降低并发、换分组;若是号池渠道通常只能等或换站 |
排查三板斧:① 用 curl 直接打 /v1/responses,先确定是链路问题还是 Codex 配置问题;
② 把 config.toml 精简到只剩一个 provider,排除多套配置互相覆盖;
③ 短任务与长任务分别跑一遍,区分「接不上」和「跑不完」这两类完全不同的故障。
价格只占六分之一。对 Codex 来说,协议支持和流式稳定性的权重远高于标价——接不上或跑不完,再便宜也是零。
| 指标 | 为什么重要 | 怎么验证 |
|---|---|---|
| 1. Responses 协议 | 不支持就根本接不上,这是一票否决项 | 用 curl 直接打 /v1/responses,能返回才算数 |
| 2. 流式稳定性 | 长任务中途断开=整段白跑,还照样扣费 | 跑一个需要几分钟、几十轮工具调用的真实任务 |
| 3. 模型真实性 | 付旗舰档的钱拿轻量档的答案是最贵的坑 | 用有标准答案的高难度题固定测试,与官方输出对比正确率 |
| 4. 推理强度透传 | 被悄悄降档,等于花高档位的钱买低档位的效果 | 同一任务分别用 minimal 和 xhigh 跑,看耗时与输出深度差异 |
| 5. 计费透明度 | 看不到缓存输入明细就算不清真实成本 | 后台用量日志能否分列输入、缓存输入、输出三项 token |
| 6. 平台可持续性 | 月抛站跑路,余额基本要不回来 | 看运营时长、公告更新频率、社群活跃度;小额滚动充值 |
/v1/chat/completions,对 Responses 只字不提/v1/responses,确认协议真的支持数据安全提醒:Codex 会把你的源码发给上游,技术上中转方都能看到。 个人项目、开源项目、学习用途没问题;公司核心代码、密钥文件、客户数据建议走官方直连。 另外无论用哪家,都别让 Codex 读取含密码、私钥、证书的文件。
接入前后最常被问到的八个问题。
不用改任何代码。中转站是一个接收 Codex 请求、转发给上游、再把响应原样返回的中间服务,对客户端完全透明。你只需要在 ~/.codex/config.toml 里加一个 [model_providers.xxx] 段落,把 base_url 指向中转站、wire_api 设为 responses,Codex 就会把请求发过去。
不行。新版 Codex 已经切换到 Responses API,老的 wire_api = "chat" 写法被弃用。如果中转站只提供 /v1/chat/completions 而没有 /v1/responses,你会看到 404,或者更隐蔽的 stream disconnected before completion 流式中断。
所以挑 Codex 中转站的第一条硬指标就是原生支持 Responses 协议——这是一票否决项,价格再低也没用。
按这三条顺序查:第一,config.toml 里 env_key 指定的变量名,和 .env 文件里写的变量名是否完全一致——这是最常见的原因,差一个字符就读不到密钥。第二,之前用 ChatGPT 账号登录过的话,auth.json 残留的登录态会和第三方密钥冲突,清掉再试。第三,确认 model_provider 指向的是你新增的段落名,别让密钥被发到 OpenAI 官方接口去了。
基本都是 base_url 路径问题。多数中转站要求写到 /v1 结尾,Codex 会自己拼 /responses;你要是多写了路径或者结尾多了斜杠,就会拼成错误地址。另一种常见情况是把中转站的网站面板地址当成了接口地址。
还有一种:wire_api 设成了 responses,但这家中转站压根不提供 Responses 接口——这种改配置解决不了,只能换站。
这是 Codex 特有的流式中断,意思是连接在收到 response.completed 事件之前就断了。诊断方法很简单:短任务和长任务各跑一次。如果短任务正常、长任务必断,基本可以判定是中转站的流式实现不完整或响应超时设得太短,这属于服务端问题,换站是最快的解法。
这是两套完全独立的账。ChatGPT Plus / Pro / Business 的订阅额度可以在网页、App 和 Codex 之间共用,用完之后可以买 Credits 继续;而 API Key 是按 Codex 实际消耗的 token 单独计费的,买订阅不会给 API 账户附送任何余额。
如果你订阅额度够用、也能正常访问,那不需要中转站。如果经常跑满额度被打断、或者国内网络与支付不方便,中转站按 token 付费、没有额度墙,是更顺手的选择。
常见档位是 minimal、low、medium、high、xhigh。档位越高模型思考越充分,消耗的推理 token 越多、耗时越长。
实用建议:日常改代码 medium 通常够用;复杂重构、跨文件架构设计上 high 或 xhigh;批量格式化、重命名这类机械改动用 low 甚至 minimal,成本能差出一个数量级。顺便这也是验证中转站有没有透传参数的好办法——两个极端档位跑同一任务,耗时和输出深度应该有明显差异。
要分级看待。Codex 会把它打开的文件内容发给上游,技术上中转方都能看到。个人项目、开源项目、学习用途,用口碑好的中转站问题不大;但公司核心代码、密钥文件、客户数据这类内容,建议走官方直连或云厂商渠道。另外无论用哪家,都不要让 Codex 读取含有密码、私钥、证书的文件。