Codex CLI 接中转站配置排错

记录新版 Codex CLI(含 ChatGPT 桌面版内置的 Codex,实测 v0.145.0)接第三方中转站时的正确配置与常见坑。

结论:正确配置写法

配置文件在 ~/.codex/config.toml(Windows: C:\Users\你\.codex\config.toml)。

model = "gpt-5.6-sol"          # 换成中转站支持的模型名
model_reasoning_effort = "high"
model_provider = "qnvip"       # 指向下面的 provider 块
experimental_bearer_token = 'sk-xxxxxxxx'   # 中转站的 key,鉴权用
 
[model_providers.qnvip]
name = "qnvip"
base_url = "http://中转站域名/v1"
wire_api = "responses"         # 中转站不支持 responses 就改成 "chat"

核心:base_url 必须放进 [model_providers.xxx] 块里,并用 model_provider 指过去。

三个常见坑(对应 401 报错)

报错示例:

401 Unauthorized: Incorrect API key provided: sk-xxxx...
url: https://api.openai.com/v1/responses
auth error code: invalid_api_key

关键信号:报错里的 url 是 api.openai.com,说明请求根本没走中转站。

1. base_url 裸写在顶层 → 被完全忽略(主因)

新版 Codex 不认顶层的 base_url。没有 [model_providers.xxx] 块 + model_provider 指向它,就用内置 openai provider,硬编码到 api.openai.com。中转站 key 在官方当然无效 → 401。

错误写法(顶层裸写,无效):

base_url = "http://中转站域名/v1"   # ❌ 被忽略
wire_api = "responses"

2. key 末尾多敲了引号

'sk-...4eb5"' 里多出的 " 会污染 key。检查引号是否成对干净。

3. 自定义 provider 不读 auth.json

ChatGPT 桌面版内置的 Codex 里,auth.json 中的 OPENAI_API_KEY 只给内置 openai provider 用。自定义 provider 若写 env_key = "OPENAI_API_KEY",会报 Missing environment variable: OPENAI_API_KEY(因为它读的是真·环境变量,不是 auth.json)。

两个解法:

  • 顶层 experimental_bearer_token(推荐,不依赖环境变量,跨启动方式都稳)
  • 或真的 export OPENAI_API_KEY=sk-xxx,再在 provider 里写 env_key = "OPENAI_API_KEY"(注意桌面版 App 启动时不一定继承 ~/.zshrc 的 export)

验证方法

必须在受信任目录里跑(否则报 “Not inside a trusted directory”):

cd /受信任的项目目录
echo "只回复两个字:成功" | codex exec --skip-git-repo-check

看启动信息里 provider: 是否为你的中转站名、能否正常返回即可。

报错速查

报错原因
401 + url 是 api.openai.combase_url 没进 provider 块 / provider 没生效
401 invalid_api_key(url 是中转站)key 错 / key 带多余字符
Missing environment variable: OPENAI_API_KEY用了 env_key 但环境变量没设,改用 experimental_bearer_token
404 / 路径错误wire_api 设成 responses 但中转站只支持 chat → 改成 "chat";或 base_url/v1 多了/少了
Not inside a trusted directory--skip-git-repo-check 或在已信任目录里跑