适用场景:Windows 版 Codex Desktop / Codex CLI,想通过第三方 OpenAI 兼容中转平台调用模型。
一、先理解原理:整条链路只有三层
绝大多数配置失败,都是因为没搞清楚下面这张图:
config.toml —— env_key = "API_KEY" ↓ Windows 环境变量 —— API_KEY = sk-xxxxxxxx ↓ Codex 发出请求 —— Authorization: Bearer sk-xxxxxxxx ↓ 第三方平台 /v1/responses也就是说:config.toml里存的是"变量名",不是 Key 本身;Key 存在 Windows 环境变量里。
记住这一点,后面 90% 的坑都不会踩。
二、准备工作
需要准备:
- Windows 版 Codex Desktop
- 第三方中转平台账号 + 可用的 API Key
- 平台的 Base URL
- 平台支持的模型名称(必须和平台模型列表里的 ID 完全一致)
- 平台必须支持 OpenAI Responses API
本文示例:
- Base URL:
https://linoapi.com.cn/v1 - 模型:
gpt-5.6-sol
关于最后一条要重点说明。Codex 使用第三方 Provider 时,发出的请求是:
POST /v1/responses所以平台必须实现/v1/responses,只有/v1/chat/completions是不够的。很多便宜的中转站只做了 chat/completions,选平台前一定要先确认这一点。
三、找到 Codex 配置文件
Windows 下配置文件位于:
C:\Users\你的用户名\.codex\config.toml快速打开方法:按Win + R,输入%USERPROFILE%\.codex,回车,找到config.toml。
如果你用过 Codex Desktop,这个文件通常已经存在。
四、修改 config.toml
假设原来是:
model = "gpt-5.5" model_reasoning_effort = "high"改为:
model_provider = "lino" model = "gpt-5.6-sol" model_reasoning_effort = "high"并新增 Provider 定义:
[model_providers.lino] name = "Lino API" base_url = "https://linoapi.com.cn/v1" env_key = "LINO_API_KEY" wire_api = "responses" requires_openai_auth = false原有的[desktop]、[plugins.xxx]、[mcp_servers.xxx]等配置全部保留,不要删除。你只需要增加model_provider一行和[model_providers.lino]一段。
一份简化后的完整示例:
sandbox_mode = "workspace-write" model_provider = "lino" model = "gpt-5.6-sol" model_reasoning_effort = "high" [model_providers.lino] name = "Lino API" base_url = "https://linoapi.com.cn/v1" env_key = "LINO_API_KEY" wire_api = "responses" requires_openai_auth = false [windows] sandbox = "unelevated" [desktop] sansFontSize = 24 codeFontSize = 24 usePointerCursors = false⚠️ 最容易犯的错:env_key 不是 API Key
# ❌ 错误:直接把 Key 写进去 env_key = "sk-xxxxxxxxxxxxxxxx" # ✅ 正确:这里写环境变量的"名字" env_key = "LINO_API_KEY"这样做除了是 Codex 的规范,也比明文写 Key 安全得多。
五、把 API Key 写入 Windows 环境变量
打开 PowerShell:
setx LINO_API_KEY "你的API_KEY"成功会提示:
SUCCESS: Specified value was saved.注意:setx只对新开的进程生效,当前这个 PowerShell 窗口读不到。请关闭它,重新开一个 PowerShell 再继续。
验证时不建议直接echo $env:LINO_API_KEY(会把 Key 明文打印出来)。更稳妥的写法:
if ([string]::IsNullOrWhiteSpace($env:LINO_API_KEY)) { Write-Host "未读取到 API Key" } else { Write-Host "API Key 已读取,长度:" $env:LINO_API_KEY.Length }输出类似API Key 已读取,长度: 51,说明环境变量已生效。
六、启动 Codex 前先测试 /v1/responses
强烈建议先用 PowerShell 直接打一次接口,这样能把"平台问题"和"Codex 配置问题"区分开。
在新开的 PowerShell 里:
$headers = @{ "Authorization" = "Bearer $env:LINO_API_KEY" "Content-Type" = "application/json" } $body = @{ model = "gpt-5.6-sol" input = "Reply exactly OK" } | ConvertTo-Json $response = Invoke-RestMethod ` -Uri "https://linoapi.com.cn/v1/responses" ` -Method POST ` -Headers $headers ` -Body $body查看返回:
$response正常会看到:
id : resp_xxxxxxxxx object : response model : gpt-5.6-sol status : completed error :只要status : completed且error为空,说明 API Key、模型名、中转平台、Responses API、鉴权这五项全部正常。
如果只想看模型回复的正文:
$response.output[0].content[0].text会输出:
OK七、正式启动 Codex Desktop
- 保存
config.toml - 完全退出Codex Desktop(确认后台进程已关闭,光点右上角叉可能没退干净)
- 重新启动 Codex Desktop
- 新建对话,输入"只回复:测试成功"
能正常返回,说明配置完成。此时的请求链路是:
Codex Desktop → 自定义 Model Provider → https://linoapi.com.cn/v1/responses → gpt-5.6-sol八、常见报错排查表
| 报错现象 | 原因 | 解决办法 |
|---|---|---|
| 无效的令牌 / 401 | 环境变量没读到,或env_key填成了 Key 本身 | 用第五节的脚本检查变量;确认env_key = "LINO_API_KEY" |
| 404 / Cannot POST /v1/responses | 平台只实现了/chat/completions | 换支持 Responses API 的平台 |
| model not found | 模型名与平台模型 ID 不一致 | 去平台模型列表查真实 ID,如gpt-5.6-terra,完全照抄 |
| 改完配置没生效 | Codex 没有完全退出 | 结束后台进程后重启 |
第一条要补充一句:执行setx之后如果没有重开 PowerShell / 重启 Codex,变量是读不到的,这是最高频的原因。
九、后续维护
只换 API Key:完全不用改config.toml。因为env_key = "LINO_API_KEY"没变,只需:
setx LINO_API_KEY "新的API_KEY"然后彻底退出并重启 Codex,它会自动读取新 Key。
更换中转平台:新增一段 Provider 即可。
model_provider = "example" model = "gpt-5.6-sol" [model_providers.example] name = "Example API" base_url = "https://api.example.com/v1" env_key = "EXAMPLE_API_KEY" wire_api = "responses" requires_openai_auth = false配套执行setx EXAMPLE_API_KEY "新的API_KEY",重启 Codex。
同时保留多个平台:旧配置不用删,多个[model_providers.xxx]可以共存,各自setx一个 Key。想切换时只改model_provider = "lino"这一行;如果两个平台模型名相同,那就真的只需要改这一行。
十、流程速查
① 获取 API Key → ② 确认 Base URL → ③ 确认模型 ID → ④ 确认支持 /v1/responses ↓ ⑤ 改 config.toml → ⑥ env_key 指向环境变量名 → ⑦ setx 保存 Key ↓ ⑧ 新开 PowerShell → ⑨ Invoke-RestMethod 测试 → ⑩ 完全退出 Codex → ⑪ 重启 → ⑫ 使用结语
整个配置本质上只有三层:config.toml→ Windows 环境变量里的 Key → 第三方平台的/v1/responses。
真正容易出错的只有三个地方:
- 把 API Key 本身误填进
env_key setx之后没有重启 PowerShell / Codex- 中转平台只有
/chat/completions,没有/responses
这三点处理好,配置过程并不复杂。