Codex 怎么接入中转站?config.toml 的 model_providers 配置、验证和常见报错
一句话:Codex 中转站就是提供 OpenAI Responses 接口的中转站。在用户目录的 ~/.codex/config.toml 里加一个自定义 provider,写上站方的 base_url、存放 Key 的环境变量名,再把 wire_api 设为 "responses",就能让 Codex 走中转。Codex 现在只支持 Responses 协议,只提供 /v1/chat/completions 的站接不上。下面的写法按 openai/codex 当前源码核对(2026-10-28),示例地址统一用 relay.example.com。
接入前确认三件事
第一,站方支持 Responses 接口,也就是 /v1/responses,并且支持流式返回。Codex 源码里 wire_api 只剩 responses 一个取值,旧的 chat 已经移除。
第二,问清楚站方给的模型名。Codex 默认用的模型站方不一定有,配置里要写成站方支持的名字,Pulse 的 GPT 统一实测标准用的是 gpt-6.1-sol。
第三,Key 放进环境变量,不写进配置文件。config.toml 里只写环境变量的名字(env_key),这样配置可以放心备份和分享。
第一步:设置 Key 的环境变量
变量名可以自己定,下面用 RELAY_API_KEY。macOS、Linux 写进 ~/.zshrc 或 ~/.bashrc:
export RELAY_API_KEY=sk-你的中转站KeyWindows 用 PowerShell 设置为用户环境变量,然后重开终端:
[Environment]::SetEnvironmentVariable("RELAY_API_KEY", "sk-你的中转站Key", "User")Codex 读取的是启动它的那个终端里的环境变量,设置完要在新终端里启动。
第二步:用 curl 先测一次 Responses 接口
确认站方的 Responses 接口能用、Key 有效,再去改 Codex 配置:
curl -sS -w '\n%{http_code}\n' https://relay.example.com/v1/responses \
-H "Authorization: Bearer $RELAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-6.1-sol", "input": "ping", "max_output_tokens": 16}'返回 200 和一段带 output 的 JSON 就说明可用。返回 404 多半是站方没有 Responses 接口或路径不对;返回 401 是 Key 不对;返回模型不存在,就换成站方支持的模型名。
第三步:在 ~/.codex/config.toml 里加 provider
配置文件在用户目录:macOS、Linux 是 ~/.codex/config.toml,Windows 是 %USERPROFILE%\.codex\config.toml,没有就新建。写入下面的内容:
model = "gpt-6.1-sol"
model_provider = "relay"
model_reasoning_effort = "high"
[model_providers.relay]
name = "Relay"
base_url = "https://relay.example.com/v1"
env_key = "RELAY_API_KEY"
wire_api = "responses"base_url 要写到 /v1 为止,Codex 会在后面拼上 /responses,这和官方默认地址 https://api.openai.com/v1 的写法一致。provider 的名字(这里是 relay)自己定,但不能用 openai、ollama、lmstudio 这些内置名字。model_reasoning_effort 是思考档,可选 minimal、low、medium、high、xhigh 等,站方分组不支持高档位时会报错,按站方说明调低。
自定义 provider 默认不要求 OpenAI 登录:requires_openai_auth 不写就是 false,Codex 会跳过登录界面,直接从 env_key 指定的环境变量里读 Key。
第四步:启动并确认走的是中转
在新终端里运行 codex,发一句话。能正常回复,再到站方后台的使用记录里看到这次请求,就确认走的是中转。也可以临时把 base_url 改错,Codex 报连接错误,说明配置确实生效了。
需要在多个中转站之间切换时,可以在 config.toml 里定义多个 [model_providers.xxx],再用 [profiles.xxx] 写各自的 model_provider 和 model,启动时用 codex --profile xxx(或 -p xxx)选择。
为什么写在项目里的配置不生效
Codex 也会读取项目目录里的 .codex/config.toml,但出于安全考虑,项目级配置不能决定把凭据发到哪里。源码里明确列出了项目级配置会被忽略的键,其中包括 model_provider、model_providers、openai_base_url 和 profiles,启动时会给出提示。中转站的配置必须写在用户目录的 ~/.codex/config.toml。
这条规则也是一层保护:别人的仓库里即使放了一个指向陌生地址的配置,也不能悄悄把你的 Key 发出去。
另一种写法:openai_base_url
config.toml 还有一个顶层键 openai_base_url,用来改内置 openai provider 的地址。它沿用内置 provider 的 OpenAI 登录流程,首次启动会出现登录界面。接中转站时,用上面的自定义 provider 更直接,Key 的来源也更清楚。
常见报错怎么处理
| 现象 | 原因 | 处理 |
|---|---|---|
| 报错 wire_api = "chat" is no longer supported | 旧教程写的是 chat,当前版本已移除 | 改成 wire_api = "responses";站方没有 Responses 接口就换站 |
| 启动提示项目配置里的键被忽略 | provider 写在了项目的 .codex/config.toml | 移到用户目录 ~/.codex/config.toml |
| 提示缺少环境变量或 401 | 环境变量没设,或 Codex 不是在新终端里启动的 | 确认 echo $RELAY_API_KEY 有值,重开终端再启动 |
| 404 Not Found | base_url 少了或多了 /v1,或站方没有 /v1/responses | 用 curl 按完整地址测一次 |
| 模型不存在 | model 写的名字站方没有 | 改成站方支持的模型名 |
| 思考档参数被拒 | 分组不支持该档位 | 调低 model_reasoning_effort |
| 流式输出中途断开 | 站方或上游不稳定 | 可调 stream_max_retries、stream_idle_timeout_ms;频繁出现就换分组 |
报错原文与字段名来自 openai/codex 源码(2026-10-28),提示文字可能随版本略有不同。
接好之后先自测
Codex 用的 GPT 推理模型有一个常见问题:推理被截断。看返回 usage 里的 reasoning_tokens,同一道难题反复只有 516、1034 这类固定值,就是截断特征,判读方法见《怎么判断掺水、降智、假模型》。也可以用 Pulse 的在线检测按统一标准跑一遍。
另外,Codex 每次请求会自带约 4k token 的默认指令,这部分会按输入计费。Pulse 的实测会识别它,只扣完整性分,不算掺水;如果多出来的输入远超这个量,才需要怀疑站方额外注入了提示词。
安全上,Codex 会读取代码、执行命令,这些内容都会经过中转站。不要在 Codex 能访问的目录里放私钥和生产配置,给中转单独设额度。
我们的数据
Codex 对应 Pulse 的 GPT 分组。下面是 GPT 分组的整体情况:分组数、倍率分布、统一标准实测结论和截断特征命中次数,随每轮采集自动更新。具体站点在站点排名里按 GPT 筛选。
数据截至 2026-10-31 23:16(北京时间),随 Pulse 每轮采集自动更新。
Codex 走 OpenAI Responses 协议,对应 Pulse 的 GPT 分组。下面是 GPT 分组的整体情况,随采集自动更新。
| 项目 | 数值 |
|---|---|
| GPT 分组数(有站方可用率 / 全部) | 2,227 / 5,263 |
| 分组倍率 P10 / 中位数 / P90 | 0.08 / 0.3 / 1 |
| 统一实测标准 | gpt-6.1-sol · 思考档 xhigh |
| 当前分组实测结论 | 通过 309、待复核 48、未通过 66、降智 33、疑似假模型 1、不符合标准 14、其他 1 |
| 分组名可识别的渠道 | Pro 号池 413、Plus 号池 204、Azure 163、官方 API 115、Team/企业 108、Free 号池 7 |
| 近 30 天 GPT 自动实测(次) | 682:通过 320、待复核 49、未通过 179、不符合标准 124、其他 10 |
| reasoning_tokens 命中截断特征(次) | 63 |
| 每次请求固定多出约 4k 输入(Codex 默认指令,次) | 195 |
倍率为站方显示的分组倍率,不含充值汇率;结论按分组计,一个站可能有多个分组。
| 近 7 天可用率 | ≥99% | 95%–99% | 80%–95% | <80% |
|---|---|---|---|---|
| GPT 分组占比 | 21.4% | 31.8% | 25.0% | 21.9% |
样本 768 个有 7 天读数的 GPT 分组;7 天与 30 天都达标的 256 个。
常见问题
Codex 中转站是什么?
就是提供 OpenAI Responses 接口(/v1/responses)的 AI 中转站。在 config.toml 里把 provider 的 base_url 指向它,Codex 的请求就会走中转。
wire_api 写 chat 还是 responses?
只能写 responses。当前版本的 Codex 已经移除了 chat,写 chat 会直接报错。
为什么配置写在项目里不生效?
项目级 .codex/config.toml 不能设置 model_provider、model_providers、openai_base_url 等决定请求去向的键,必须写在用户目录 ~/.codex/config.toml。
Key 能直接写进 config.toml 吗?
不建议。用 env_key 指定环境变量名,Key 放在环境变量里,配置文件就不含密钥。
国内怎么用 Codex?
可以接提供 Responses 接口的中转站;中转站替你持有上游账号,断供与条款风险由站方承担、会影响你的余额,先小额试用并检测。