1. 先分清认证方式:ChatGPT 登录和 API Key 到底差在哪
Codex 里同时存在两条完全独立的鉴权路径,很多人把它们混在一起看,结果一看到"GPT-5.4 退出 Codex"的提醒就开始慌。我先把这两条路径拆开讲清楚,你对照自己的情况判断该改哪一处。
ChatGPT 账号登录这条路径,走的是 OAuth 授权。你在终端执行codex后选择用 ChatGPT 账号登录,浏览器会拉起授权页面,登录成功后 Codex 拿到的是一个会话凭证,这个凭证绑定的是你的 ChatGPT 订阅权益。模型能不能用、用哪个模型,由 ChatGPT 侧的订阅策略决定。官方公告里说的"GPT-5.4 和 GPT-5.4 mini 将在 2026 年 8 月 31 日退出 Codex",限定的就是这条路径。
API Key 这条路径,走的是标准的 Bearer Token 鉴权。你在~/.codex/config.toml里配置model_provider,通过env_key读取环境变量里的 Key,请求直接打到你自己指定的 Base URL。这条路径下,模型是否可用取决于服务端实际开放的模型列表,跟 ChatGPT 订阅侧的模型调整没有直接关系。
两条路径的差异可以这样对照:
| 维度 | ChatGPT 登录 | API Key |
|---|---|---|
| 鉴权方式 | OAuth 会话凭证 | Bearer Token |
| 凭证存储 | ~/.codex/auth.json | 环境变量 +config.toml |
| 模型来源 | ChatGPT 订阅侧策略 | 服务端/v1/models返回 |
| 受 GPT-5.4 退出影响 | 是 | 否(取决于服务端) |
| 切换模型方式 | 会话内选择或--model | 改config.toml的model字段 |
关键点在于:auth.json里存的是 ChatGPT 登录态,而 API Key 路径根本不读这个文件。如果你用的是 API Key,删auth.json不会解决任何问题,反而可能把登录态搞乱。反过来,如果你用的是 ChatGPT 登录,改config.toml里的model_provider也不会生效,因为登录态路径不走自定义 provider。
我见过最常见的误操作是:看到 GPT-5.4 要退出,直接把config.toml里的模型名改成gpt-5.6-terra,但自己其实是 ChatGPT 登录用户,改完发现模型选择器里还是旧的。原因就是 ChatGPT 登录路径的模型选择不完全由config.toml决定,会话内的模型选择优先级更高。
所以第一步不是改配置,而是确认自己走的是哪条路径。判断方法很简单:打开~/.codex/auth.json,如果里面有 ChatGPT 相关的 token 字段,说明你至少登录过 ChatGPT 路径;再看config.toml里有没有model_provider和model_providers段,如果有且env_key指向的环境变量已设置,说明你在用 API Key 路径。两条路径可以同时存在,Codex 会根据当前会话的配置决定用哪条。
对于使用 Terra/Luna 模型的开发者来说,这次调整的核心影响是:ChatGPT 登录用户必须在 8 月 31 日前把 GPT-5.4 切到 Terra、GPT-5.4 mini 切到 Luna;API Key 用户则要确认自己服务端的模型列表里有没有这两个新模型 ID,有的话改config.toml即可,没有的话需要等服务端开放或换服务。
2. TaoToken 前置:Base URL 和 Key 怎么准备
如果你决定走 API Key 路径来接入 Terra/Luna,需要先准备好两样东西:Base URL 和 API Key。这里以 TaoToken 为例说明配置方式,你可以对照自己的服务端调整。
TaoToken 的 API 地址是https://taotoken.net/api,这个地址作为 Base URL 使用。注意不要写成完整的/responses地址,Codex 客户端会自己拼接路径。如果你写成https://taotoken.net/api/responses,最终请求可能变成/api/responses/responses,直接 404。
API Key 需要到控制台创建。访问https://taotoken.net/console登录后,在 API Keys 页面生成一个新的 Key。生成后立即复制保存,页面刷新后就不再完整显示。这个 Key 就是后面env_key要读取的值。
模型 ID 方面,Terra 和 Luna 对应的 ID 需要以服务端/v1/models实际返回为准。不同服务端的命名可能有差异,有的用gpt-5.6-terra,有的可能用别名。不要根据展示名称猜测,先查列表再填配置。
准备好之后,你的配置结构应该是这样:Base URL 填https://taotoken.net/api,Key 通过环境变量传入,模型 ID 从/v1/models返回里选。这三样凑齐,才能进入下一步写配置。
如果你还想在配置前先验证模型对话是否正常,可以访问https://taotoken.net/models查看可用模型列表,或者直接用模型对话页面测试 Terra/Luna 的响应。这一步能帮你确认服务端确实开放了这两个模型,避免配置写完才发现模型不存在。
对于长期做编码和 Agent 任务的开发者,如果不想每次手动管理 Key 和模型切换,可以了解 Coding Plan 方案,它把模型接入和额度管理打包在一起,适合需要稳定跑 Codex 的场景。具体可以看https://taotoken.net/coding-plan。
需要提醒的是,API Key 不要明文写进config.toml。正确做法是config.toml里写env_key = "TAOTOKEN_API_KEY",然后在终端里export TAOTOKEN_API_KEY="你的Key"。这样配置文件可以安全地提交到版本库或分享给团队,Key 本身不泄露。
3. 可复制配置:auth.json 与 config.toml 怎么写
这一节给出完整的可复制配置片段。先说明auth.json和config.toml的分工:auth.json存 ChatGPT 登录态,API Key 路径不读它;config.toml存模型和 provider 配置,两条路径都会读,但 API Key 路径读的是model_providers段。
如果你是从 ChatGPT 登录路径迁移,先检查~/.codex/auth.json。这个文件通常长这样:
{ "OPENAI_API_KEY": null, "tokens": { "id_token": "eyJ...", "access_token": "eyJ...", "refresh_token": "rt_...", "account_id": "acc_..." }, "last_refresh": "2026-08-20T10:00:00Z" }如果你决定继续用 ChatGPT 登录,不需要动auth.json,只需要在config.toml里改模型名。但要注意,ChatGPT 登录路径下model_provider不应该指向自定义 provider,否则会走 API Key 鉴权。
如果你决定切到 API Key 路径,auth.json可以保留不动(它不影响 API Key 路径),重点改config.toml。用户级配置文件位置:
- macOS/Linux:
~/.codex/config.toml - Windows:
%USERPROFILE%\.codex\config.toml
完整配置如下:
model = "gpt-5.6-terra" model_provider = "taotoken" model_reasoning_effort = "medium" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"如果你原来用的是 GPT-5.4 mini 做轻量任务,把model改成gpt-5.6-luna,model_reasoning_effort可以降到low:
model = "gpt-5.6-luna" model_provider = "taotoken" model_reasoning_effort = "low" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "responses"设置环境变量。macOS/Linux:
export TAOTOKEN_API_KEY="你的Key"PowerShell:
$env:TAOTOKEN_API_KEY="你的Key"然后从同一个终端启动 Codex:
codex这里有两个容易出错的细节。第一,base_url填https://taotoken.net/api,不要带/responses后缀,Codex 会自己拼。第二,model_provider和model_providers必须写在用户级配置里,项目目录下的.codex/config.toml不能覆盖这两个字段。如果你在项目里也放了config.toml,它只能覆盖model和model_reasoning_effort这类字段,provider 配置以用户级为准。
如果你用的是 Codex 的 OAuth 登录但想临时切到 API Key,可以在启动时指定 profile,或者直接改用户级config.toml的model_provider。切换后 Codex 会优先读model_providers段,不再走auth.json里的登录态。
4. 验证请求:确认 Terra/Luna 真的生效
配置写完不代表生效,必须发请求验证。验证分三步:查模型列表、测非流式响应、测流式响应。三步都过,才能确认 Codex 里能正常用。
第一步,查模型列表。设置好环境变量后执行:
export API_BASE="https://taotoken.net/api" export API_KEY="你的Key" curl -sS "$API_BASE/models" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json"返回的 JSON 里找gpt-5.6-terra和gpt-5.6-luna。如果返回 401,说明 Key 无效或没带上;如果返回的列表里没有这两个 ID,说明服务端还没开放,需要换模型或等服务端更新。注意模型 ID 以接口实际返回为准,不要根据展示名称猜。
第二步,测非流式 Responses API。Codex 自定义 provider 用的是 Responses API,不是 Chat Completions,所以必须测/responses端点:
export MODEL="gpt-5.6-terra" curl -i --max-time 60 \ -X POST "$API_BASE/responses" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ --data "{\"model\":\"$MODEL\",\"input\":\"Reply with exactly OK\"}"成功的标志:HTTP 状态码 200,返回 JSON 而不是 HTML,响应体里有response对象结构,没有unknown model或model not found错误。如果返回的是网站首页 HTML,说明 Base URL 配错了,请求没打到 API 层。
第三步,测流式响应。Codex 的 Agent 任务依赖 SSE 流式返回,这一步必须单独验证:
curl -N -i --max-time 120 \ -X POST "$API_BASE/responses" \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: text/event-stream" \ --data "{\"model\":\"$MODEL\",\"input\":\"Reply with exactly OK\",\"stream\":true}"成功的标志:返回Content-Type: text/event-stream,事件流正常结束,最后有完成事件。如果只返回第一段文本就断开,Codex 里会出现stream disconnected before completion或response.failed event received。这种情况通常是服务端 SSE 支持不完整或中间有缓冲,不是模型本身的问题。
三步都通过后,回到 Codex 里跑一个真实任务验证。启动codex,输入一个简单的代码问题,看是否正常返回。如果 Codex 里报错但 curl 正常,检查config.toml的wire_api是否设为responses,以及env_key指向的环境变量是否在当前终端已设置。
验证 Terra 和 Luna 时,可以对比同一个任务的响应。Terra 在mediumeffort 下适合日常开发,Luna 在loweffort 下适合轻量任务。如果 Luna 返回质量不够,把 effort 提到medium再试,但要注意 Token 消耗会上升。
5. 常见报错排查:401、404、stream disconnected 怎么解
迁移过程中最容易撞上四类报错,我按实际遇到的频率排一下,每个给出排查顺序。
401 Unauthorized。这个报错说明鉴权没通过。先确认env_key指向的环境变量在当前终端已设置,用echo $TAOTOKEN_API_KEY检查。如果为空,说明环境变量没导出,或者 Codex 不是从设置变量的终端启动的。VS Code、终端、桌面应用可能继承不同的环境变量,设置后要彻底退出旧进程再重开。如果环境变量有值但仍 401,检查 Key 是否过期或被撤销,到控制台重新生成一个。
404 Not Found。这个通常是路径拼接错误。检查base_url是否写成了https://taotoken.net/api/responses,正确写法是https://taotoken.net/api。Codex 会自己拼/responses,你多写一层就变成/api/responses/responses。另外确认服务端真的支持 Responses API,有些服务只支持/v1/chat/completions,那 Codex 的wire_api = "responses"就会 404,需要换支持 Responses API 的服务端。
Model not found。模型 ID 不存在或账号没权限。先查/v1/models确认 ID 拼写,再核对控制台权限分组。有些服务端用别名映射,展示名和实际 ID 不一样,必须以接口返回为准。如果列表里有但调用报 not found,可能是账号分组没开通这个模型,需要联系服务端确认。
stream disconnected before completion。流式调用中途断开。先确认 curl 流式测试是否正常,如果 curl 也断,说明服务端 SSE 支持有问题或中间有缓冲。如果 curl 正常但 Codex 断,检查是否有代理层缓冲了 SSE 事件。另外长时间 Agent 任务对空闲超时敏感,可以调大--max-time或检查服务端的超时设置。不要一看到流中断就换模型,协议不兼容时换任何模型都会重复失败。
还有一个容易忽略的报错是Missing environment variable。这个说明env_key指向的变量没设置。检查config.toml里env_key = "TAOTOKEN_API_KEY"和终端里export TAOTOKEN_API_KEY=...是否一致,大小写敏感。设置后从同一个终端启动 Codex,不要用已经打开的旧终端。
排查顺序建议:先 curl 验证接口层,再检查config.toml,最后看 Codex 日志。接口层通了再查配置,配置对了再查客户端,这样能快速定位问题在哪一层。
6. 迁移检查清单与后续接入
8 月 31 日前,按这个清单逐项确认:
确认自己走的是 ChatGPT 登录还是 API Key 路径。ChatGPT 登录用户把 GPT-5.4 切到 Terra、GPT-5.4 mini 切到 Luna;API Key 用户先查/v1/models确认 Terra/Luna 可用。
搜索脚本、CI/CD、自动化任务、Agent 配置里硬编码的旧模型名。这些地方经常被忽略,改完config.toml但脚本里还写着gpt-5.4,跑起来还是旧模型。
API Key 用户验证非流式和流式/responses都正常。只测非流式不够,Codex 的 Agent 任务依赖流式。
把第三方 provider 写进用户级~/.codex/config.toml,不要写在项目目录。model_provider和model_providers字段项目级配置覆盖不了。
用env_key读取密钥,不要把真实 Key 明文写进配置文件。配置文件可以提交到版本库,Key 通过环境变量注入。
用真实项目任务对比迁移前后的质量、延迟和 Token 消耗。Terra 和 Luna 的 effort 设置可以调,找到适合自己任务的平衡点。
保留可快速切回的旧配置备份,但备份里不要包含明文 Key。
如果你还没接入 API Key 路径,需要先创建 Key。访问https://taotoken.net/api-keys生成,然后按第 3 节的配置写入config.toml。接入文档在https://taotoken.net/doc,里面有 Responses API 的详细说明和示例。
对于 Claude Code 用户,如果想用 Anthropic 兼容的方式接入,可以参考https://taotoken.net/claudecode-anthropic的配置说明。Codex 和 Claude Code 的配置结构不同,不要混用。
迁移完成后,建议跑一个真实的小任务做回归测试。比如让 Codex 改一个函数、加一段注释、跑一次测试。确认 Terra 在mediumeffort 下的响应质量和原来 GPT-5.4 相当,Luna 在loweffort 下能满足轻量任务需求。如果质量有差距,先调 effort 再考虑换模型。
最后提醒一点:GPT-5.4 退出 Codex 限定的是 ChatGPT 登录侧,不是所有 API Key 工作流同时失效。先分清认证方式,再验证接口能力,比盲目换模型、换 Key 或重装 Codex 更有效。