接入教程

Codex 配置中转 API:CLI、VS Code、桌面 App 与换回官方配置

Codex CLI、VS Code 插件和桌面 App 共用用户级 config.toml。新增一个 Provider、把 Key 放进环境变量,就能接 Responses 兼容的中转 API;不用时恢复备份、重新登录官方账号即可换回。

Codex CLI 从用户级 config toml、自定义环境变量密钥到 Responses wire API 验证和官方配置回滚的四步 Provider 边界
Codex CLI 自定义 Provider 依次写入用户级 config.toml、从环境变量取密钥、选择 Responses wire_api,并保留官方配置回滚路径。

Codex 配置中转 API要同时配好五样东西:Provider、API 根、Key 来源、模型 ID 和 Responses 协议。任何一项不对,都会表现为 401、404、unsupported parameter 或流式中断。

先把 CLI 跑通,VS Code 插件和桌面 App 只需要读到同一个环境变量。中转站必须提供 /v1/responses;只有 Chat Completions 的接口不能直接给 Codex 用。

直接复制:Codex CLI 配置中转 API

三步:备份原配置并设置 Key,在 config.toml 里加一个 Provider,再发一条探针。GPTZZZ 的 OpenAI 兼容 Base URL 是 https://gptzzz.ai/v1,Codex 会自己请求 /v1/responses。

第 1 步:备份并设置 Key(本次终端有效)。macOS / Linux:

mkdir -p ~/.codex
if [ ! -f ~/.codex/config.toml.bak ]; then
  if [ -f ~/.codex/config.toml ]; then
    cp ~/.codex/config.toml ~/.codex/config.toml.bak
  else
    touch ~/.codex/config.toml.bak
  fi
fi
export GPTZZZ_API_KEY="YOUR_GPTZZZ_API_KEY"

Windows PowerShell:

New-Item -ItemType Directory -Force "$HOME\.codex" | Out-Null
if (-not (Test-Path "$HOME\.codex\config.toml.bak")) {
  if (Test-Path "$HOME\.codex\config.toml") {
    Copy-Item "$HOME\.codex\config.toml" "$HOME\.codex\config.toml.bak"
  } else {
    New-Item -ItemType File "$HOME\.codex\config.toml.bak" | Out-Null
  }
}
$env:GPTZZZ_API_KEY = "YOUR_GPTZZZ_API_KEY"

已有 config.toml.bak 时不会覆盖,新开终端重跑这一步也安全。原来没有 config.toml 时会生成一个空备份;恢复后文件为空,model_provider 回到默认的官方 openai。

第 2 步:编辑用户级配置。用编辑器打开 ~/.codex/config.toml(例如 nano ~/.codex/config.toml;Windows 用 notepad "$HOME\.codex\config.toml"),合并下面的内容:

# 顶层键要写在第一个 [表] 之前
model = "gpt-6-sol"
model_provider = "gptzzz"

[model_providers.gptzzz]
name = "GPTZZZ"
base_url = "https://gptzzz.ai/v1"
env_key = "GPTZZZ_API_KEY"
wire_api = "responses"

文件里已经有 model 或 model_provider 时,直接改那一行,不要再写第二遍。写在 [model_providers.gptzzz] 下面的键会被当成这个表的字段,Codex 不会把它当顶层设置读。

第 3 步:发探针。codex exec 默认要求在 Git 仓库里运行;在空目录里做纯文本探针时加 --skip-git-repo-check:

mkdir -p /tmp/codex-probe && cd /tmp/codex-probe
codex exec --skip-git-repo-check --json "Reply with exactly: CODEX_OK"

Windows PowerShell:

New-Item -ItemType Directory -Force "$env:TEMP\codex-probe" | Out-Null
Set-Location "$env:TEMP\codex-probe"
codex exec --skip-git-repo-check --json "Reply with exactly: CODEX_OK"

JSONL 里应依次出现 thread.started、turn.started、文本为 CODEX_OK 的 item.completed 和 turn.completed。缺最后的 turn 事件,不算成功。临时换模型加 --model gpt-5.5;进入交互界面后用 /status 看当前模型和 Provider。

在 GPTZZZ 上用 Codex:模型、分组与价格

下表列出 GPTZZZ 模型价格页里常用于 Codex 的 GPT 模型,单元格是“输入 / 输出”价格,单位元 / 百万 Token,已乘分组倍率。一个 API Key 只属于一个分组,只能调用该分组里的模型;在控制台 /keys 页面创建 Key 时选分组。opai puls、opai pro、pro200-500不降智 在价格页标为“GPT 订阅号池”,GPT官key 标为“官方 Key”。

模型 ID(链接到价格详情)opai puls(0.05x)opai pro(0.1x)pro200-500不降智(0.25x)GPT官key(0.54x)
gpt-6.1-sol 价格——¥0.50 / ¥2.50—
gpt-6-astra 价格¥0.50 / ¥2.50¥1.00 / ¥5.00¥2.50 / ¥12.50¥67.85 / ¥339.23
gpt-6-sol 价格¥0.10 / ¥0.50¥0.20 / ¥1.00¥0.50 / ¥2.50¥13.57 / ¥67.85
gpt-6-luna 价格¥0.0050 / ¥0.025¥0.01 / ¥0.05¥0.025 / ¥0.13¥0.68 / ¥3.39
gpt-5.6-sol 价格¥0.25 / ¥1.50¥0.50 / ¥3.00¥1.25 / ¥7.50¥3.12 / ¥15.60
gpt-5.6-terra 价格¥0.10 / ¥0.60¥0.20 / ¥1.20¥0.50 / ¥3.00¥1.56 / ¥9.37
gpt-5.6-luna 价格¥0.01 / ¥0.06¥0.02 / ¥0.12¥0.05 / ¥0.30¥0.63 / ¥3.75
gpt-5.5 价格¥0.25 / ¥1.50¥0.50 / ¥3.00¥1.25 / ¥7.50¥3.91 / ¥23.40
gpt-5.3-codex-spark 价格¥0.088 / ¥0.70¥0.18 / ¥1.40——
codex-auto-review 价格¥0.01 / ¥0.06¥0.02 / ¥0.12¥0.05 / ¥0.30—

“—”表示该分组不含这个模型。表中除 gpt-5.3-codex-spark 外,其余 ID 都在 Codex 0.162.0 的内置模型目录里;codex-auto-review 在价格页注明为 Codex 内部使用的审核模型。价格以 GPTZZZ 模型价格页和控制台实时显示为准。

config.toml 放哪里、Provider 字段怎么填

项目正确位置/值常见错误
用户配置$CODEX_HOME/config.toml,默认 ~/.codex/config.toml;Windows 为 %USERPROFILE%\.codex\config.toml写进项目 .codex/config.toml,Provider 字段被忽略
顶层键model、model_provider 写在第一个 [表] 之前写在 Provider 表下面,变成表内字段
Provider ID自定义,如 gptzzz使用保留 ID openai、ollama、lmstudio
base_urlAPI 根 https://gptzzz.ai/v1写成 …/v1/responses,路径重复导致 404/405
env_key环境变量名 GPTZZZ_API_KEY直接填 Key,或启动 Codex 的进程没有这个变量
wire_apiresponses网关只有 Chat Completions

Codex CLI API Key 配置:env_key 只写变量名,真实 Key 留在环境变量里。Codex CLI API URL:base_url 只填 API 根,由 Codex 追加 /responses。CODEX_HOME 改过的话,目录必须已经存在。

只想改内置 OpenAI Provider 的地址时,官方另有顶层 openai_base_url;不要声明 [model_providers.openai]。中转站自己的 Key 用独立 Provider 加 env_key,不要设置 requires_openai_auth = true,否则 Codex 会忽略 env_key。想确认哪一层配置生效,在 CLI 里运行 /debug-config。

Windows / macOS 设置环境变量

Codex 只从启动它的进程环境里读 env_key 指定的变量。export 和 $env: 只对当前终端有效;要让新终端、VS Code 和桌面 App 都读到,就写成持久变量,再重开终端或应用。

macOS(从 10.15 起默认 shell 是 zsh):

echo 'export GPTZZZ_API_KEY="YOUR_GPTZZZ_API_KEY"' >> ~/.zshrc
source ~/.zshrc
echo "${GPTZZZ_API_KEY:0:6}"

最后一行只显示 Key 的前 6 位,用来确认变量已加载。Linux(bash):

echo 'export GPTZZZ_API_KEY="YOUR_GPTZZZ_API_KEY"' >> ~/.bashrc
source ~/.bashrc
echo "${GPTZZZ_API_KEY:0:6}"

Windows PowerShell,写入当前用户的环境变量(二选一):

# 方式一:写入 HKEY_CURRENT_USER\Environment
[Environment]::SetEnvironmentVariable("GPTZZZ_API_KEY", "YOUR_GPTZZZ_API_KEY", "User")

# 方式二:setx(只对之后新开的窗口生效,值超过 1024 个字符会被截断)
setx GPTZZZ_API_KEY "YOUR_GPTZZZ_API_KEY"

关掉当前 PowerShell,新开一个窗口检查:

$env:GPTZZZ_API_KEY.Substring(0, 6)

macOS 上从 Dock 或启动台打开的 App,不一定读得到只写在 ~/.zshrc 里的变量。给桌面 App 用时,再执行一次 launchctl setenv,它只对之后由 launchd 启动的进程生效:

launchctl setenv GPTZZZ_API_KEY "YOUR_GPTZZZ_API_KEY"

注意:launchctl setenv 不是永久设置,注销或重启后就失效。每次登录后、打开 App 之前要重新执行一次;已经开着的 App 读不到新值,要按 ⌘Q 完全退出再打开。

Key 不要写进 config.toml、仓库、截图或工单。在 Windows 上让 VS Code 插件跑在 WSL 里时,按 Linux 处理:配置放在 WSL 里的 ~/.codex/config.toml,环境变量也要在 WSL 里设置。

VS Code 里的 Codex 插件怎么用中转

能用,不用另写一份配置。插件的“Codex 设置”(模型、推理强度、权限、沙箱、MCP)就是从 config.toml 读的,和 CLI 共用;编辑器自己的 chatgpt.* 设置只管界面行为,不写进 config.toml。

  1. 在扩展市场安装 OpenAI 的 Codex 扩展(扩展 ID openai.chatgpt)。Cursor、Windsurf 等兼容 VS Code 的编辑器装的是同一个扩展。
  2. 按上文写好 ~/.codex/config.toml,并把 GPTZZZ_API_KEY 设成持久环境变量。
  3. 完全退出编辑器再打开:macOS 按 ⌘Q,Windows / Linux 关掉所有窗口。VS Code 第一个实例的环境变量继承自启动它的父进程,之后开的窗口沿用这个实例的环境,只关窗口不会刷新。
  4. 打开 Codex 侧栏;找不到图标时,在命令面板运行 Codex: Open Codex Sidebar。点侧栏齿轮 → Codex Settings → Open config.toml,确认打开的就是刚才改的那份文件。
  5. 发一句 Reply with exactly: CODEX_OK 验证;要换模型,在输入框用 /model。

Windows 上打开了 chatgpt.runCodexInWindowsSubsystemForLinux(让 Codex 跑在 WSL 里)时,插件读的是 WSL 里的配置,见上一节最后一段。

Codex 桌面 App 怎么用中转

OpenAI 现在的桌面端是 ChatGPT 桌面 App,在里面切到 Codex 使用。官方网关文档写明:macOS 版读同一份 ~/.codex/config.toml,Windows 版读 %USERPROFILE%\.codex\config.toml,保存后要重启 App。

  1. 按“直接复制”一节写好 config.toml。
  2. 让 App 进程拿到 GPTZZZ_API_KEY:Windows 用上文的用户级环境变量;macOS 用 launchctl setenv,它在注销或重启后失效,每次登录后、打开 App 前重新执行。官方提醒,只在终端里设置的变量,从桌面启动的 App 可能读不到。
  3. 彻底退出 App 再打开。macOS 上按 ⌘Q,只关窗口不算。
  4. 新建一个 Codex 对话,先看选中的模型,再发 Reply with exactly: CODEX_OK。

官方设置文档还写明:桌面 App 里的 Codex 继承与 VS Code 插件、CLI 相同的配置;桌面 App 和 VS Code 插件打开同一个项目时,会共享对话和编辑器上下文。

用 CC Switch 切换

CC Switch 是开源(MIT)的桌面工具,支持 Windows、macOS、Linux,可以管理 Codex、Claude Code、Gemini CLI 等工具的供应商,不用手改 TOML。项目 README 写明唯一官网是 ccswitch.io。

  1. 安装:macOS 用 brew install --cask cc-switch;Windows、Linux 从 GitHub Releases 下载安装包。
  2. 首次启动时,它会把现有 Codex 配置导入为名为 default 的供应商,并添加官方供应商 OpenAI Official。第一次改写配置文件前,原文件会备份到 ~/.cc-switch/backups/live-first-write/。
  3. 侧栏选 Codex,点右上角“+”新建自定义供应商,填 https://gptzzz.ai/v1、GPTZZZ Key 和模型 ID(如 gpt-6-sol),然后点“启用”。
  4. 切换后要重启终端或 Codex 才生效。

供应商卡片上的“检测连通”只测地址能不能连上,不发真实请求,验证不了 Key 和模型名,最后仍用上面的探针确认。

用 GPTZZZ 客户端一键配置

不想手改文件,可以用 GPTZZZ 桌面客户端(macOS / Windows)。按 v3.21.0 的更新说明:客户端只开放 Claude Code、Codex、小龙虾、爱马仕、Grok;登录后只写入列表、不再自动切换;原配置可以一键恢复。这个版本还修复了切换供应商后 Codex 对话消失的问题。

用 curl 预检 Responses 请求与响应

启动 Codex 前,直接请求同一个 API 根,能把服务端问题和 CLI 配置问题分开:

export GPTZZZ_BASE_URL="https://gptzzz.ai/v1"
export GPTZZZ_API_KEY="YOUR_GPTZZZ_API_KEY"

curl --fail-with-body -sS -D /tmp/codex-relay-headers.txt \
  "$GPTZZZ_BASE_URL/responses" \
  -H "Authorization: Bearer $GPTZZZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","input":"Reply with exactly: CODEX_OK"}'

Windows PowerShell:

$env:GPTZZZ_BASE_URL = "https://gptzzz.ai/v1"
$body = @{ model = "gpt-6-sol"; input = "Reply with exactly: CODEX_OK" } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "$env:GPTZZZ_BASE_URL/responses" `
  -Headers @{ Authorization = "Bearer $env:GPTZZZ_API_KEY" } `
  -ContentType "application/json" -Body $body

最低验收:HTTP 2xx、object 为 response、status 为 completed、输出文本非空、响应里的模型和 usage 可读,并记下请求 ID。curl 成功仍不能证明 Codex 需要的工具调用和 SSE 全部兼容。

为什么 Chat Completions 不能替代 wire_api

截至 2026-10-09,官方配置参考写明 model_providers.<id>.wire_api 唯一支持值是 responses,省略时也默认 Responses。官方网关兼容要求也写明:Chat Completions 或 Anthropic Messages 接口能用,不代表 Responses 兼容。把聊天文本包装成相似 JSON,撑不起 Codex 的 SSE、工具调用和多轮续接。

能力要验证什么
文本任务response completed 与非空 output_text
SSE事件逐条转发不缓冲,最后有 response.completed 或错误事件
function toolsfunction call 与对应 function_call_output 的 ID 一致,结果回传后有最终回答
reasoning推理档位参数被接受,推理相关事件正常回传
多轮后续轮次带上之前的消息、工具调用和结果仍能继续
代码任务目标 diff、命令退出码与测试结果

Codex CLI 验证指标与可复现实验

  1. 在固定测试仓库运行 codex exec --json 的只读问答;
  2. 执行一次单文件修改并运行固定测试;
  3. 记录首个 JSONL 事件、首个 agent message、turn.completed 和总耗时;
  4. 记录工具成功率、命令退出码、重试次数、最终 diff 与网关 request ID;
  5. 主动取消一次长任务,确认恢复后不会重复执行工具。

官方基线和中转实验用同一 Codex 版本、仓库快照、提示、模型和超时。只比较回答文风或“看起来会改代码”,不能说明兼容。

401、404、参数错误与 SSE 中断排查

现象先查处理
401GPTZZZ_API_KEY 是否在启动 Codex 的进程里;Key 是否完整修好凭据再试,不要反复重试
CLI 正常,VS Code 或桌面 App 报 401编辑器/App 进程有没有读到变量;macOS 是否重启或注销过(launchctl setenv 会失效)设成持久变量;macOS 重新执行 launchctl setenv,再按 ⌘Q 完全退出后重开
404 / 405base_url 是否多写或少写 /v1、是否带了 /responses改成 https://gptzzz.ai/v1
model not found模型 ID 是否在这把 Key 的分组里从模型价格页或控制台复制 ID,必要时换对应分组的 Key
工具、推理档位表现异常模型 ID 是否在当前 Codex 版本的内置模型目录里换成目录里有的 ID,或按官方说明提供 model_catalog_json
400 unsupported parameter网关 Responses 参数或工具 Schema 不完整保留原始响应,缩小探针
改了配置不生效是否写在项目级 .codex/config.toml;顶层键是否写在表后面移到用户级文件顶部,用 /debug-config 确认
流开始后断开SSE 是否被代理缓冲、是否误用 Chat chunk、空闲超时保存最后一个事件,标记为不完整

状态码含义见 GPTZZZ 错误码速查手册。先用 OpenAI API 接入探针验证 Responses;协议变更参考 OpenAI 兼容迁移清单;密钥隔离见 API Key 安全指南;工具与 SSE 用 流式和工具兼容矩阵复验。

用了中转怎么换回官方配置

换回官方就三件事:Codex 不再用自定义 Provider、清掉中转 Key、确认官方登录还在。

  1. 停掉 Codex。退出 CLI、VS Code 插件和桌面 App 里正在跑的任务。
  2. 恢复配置。有备份就复制回去(macOS / Linux:cp ~/.codex/config.toml.bak ~/.codex/config.toml;PowerShell:Copy-Item "$HOME\.codex\config.toml.bak" "$HOME\.codex\config.toml" -Force)。没有备份就删掉 model_provider = "gptzzz" 这一行和整个 [model_providers.gptzzz] 表;model_provider 不写时默认就是官方 openai。model 改成你官方账号能用的模型,不确定就删掉这行,进入 Codex 后用 /model 选。
  3. 清掉中转 Key。macOS / Linux 删掉 ~/.zshrc 或 ~/.bashrc 里的那行 export,再执行 unset GPTZZZ_API_KEY;macOS 设过 launchctl 的执行 launchctl unsetenv GPTZZZ_API_KEY。Windows 见下方命令。
  4. 确认官方登录。运行 codex login status。没有凭据就 codex login,在浏览器里用 ChatGPT 登录。如果你以前用 codex login --with-api-key 登录过中转 Key,先 codex logout(会清掉已保存的 API Key 和 ChatGPT 凭据)再重新登录。VS Code 插件在头像菜单里 Log out,再选 Sign in with ChatGPT;桌面 App 在头像菜单里 Log out,再选 Continue to sign in。
  5. 验证。新开终端运行 codex,用 /status 看模型和 Provider;出问题时 codex doctor 会检查安装、配置和登录状态。
Remove-Item Env:GPTZZZ_API_KEY -ErrorAction SilentlyContinue
[Environment]::SetEnvironmentVariable("GPTZZZ_API_KEY", $null, "User")
codex login status

官方登录缓存放在 ~/.codex/auth.json 或系统凭据库里,CLI 和插件共用。auth.json 里是访问令牌,按密码对待,不要提交或贴进工单。

用 CC Switch 的:切到 OpenAI Official 并重启 Codex。CC Switch 切到第三方时会把 Codex 官方登录暂存起来,切回官方时还原;用 codex login status 确认,显示未登录再运行 codex login。用 GPTZZZ 客户端配置的:在客户端里一键恢复原配置。

如果只想在 CLI 里按需用中转,可以把 [model_providers.gptzzz] 留在 config.toml,把 model_provider = "gptzzz" 和 model 挪到单独的 profile 文件 ~/.codex/gptzzz.config.toml。平时运行 codex 走官方,需要中转时运行 codex --profile gptzzz。profile 靠 CLI 的 --profile 参数选择。

官方资料

常见问题

Codex CLI 的 config.toml 在哪里?

用户级配置在 $CODEX_HOME/config.toml,默认是 macOS/Linux 的 ~/.codex/config.toml、Windows 的 %USERPROFILE%\.codex\config.toml。CLI、VS Code 插件和桌面 App 共用这份配置。model_provider、model_providers 和 openai_base_url 写在项目级 .codex/config.toml 里会被忽略。

Codex CLI 中转 API 的 base_url 怎么填?

填 API 根。GPTZZZ 填 https://gptzzz.ai/v1,Codex 会自己请求 https://gptzzz.ai/v1/responses;不要把 /responses 写进 base_url。

Codex CLI 的 wire_api 应该怎样选择?

截至 2026-10-09,官方配置参考写明 responses 是唯一支持值,省略时也默认 responses。只有 /v1/chat/completions 的中转站不能直接给当前 Codex 使用。

Codex CLI API Key 应该写进 config.toml 吗?

不应该。env_key 只写环境变量名(如 GPTZZZ_API_KEY),Codex 从启动它的进程环境里读取实际值。不要同时设置 requires_openai_auth = true,否则 Codex 会忽略 env_key。

VS Code 里的 Codex 插件能用中转 API 吗?

能。插件的模型、权限、MCP 等 Codex 设置就是从 config.toml 读的,和 CLI 共用。写好 Provider 后,把 GPTZZZ_API_KEY 设成持久环境变量,完全退出编辑器(macOS 按 ⌘Q)再打开。Cursor、Windsurf 等兼容编辑器装的是同一个扩展。

Codex 桌面 App 怎么接中转 API?

官方网关文档写明,macOS 版读 ~/.codex/config.toml,Windows 版读 %USERPROFILE%\.codex\config.toml。保存 Provider 后彻底退出并重开 App,并确保 App 进程能读到 GPTZZZ_API_KEY;只在终端里设置的变量,从桌面启动的 App 可能读不到。

Windows 和 macOS 怎么永久设置 GPTZZZ_API_KEY?

macOS 默认 zsh,把 export GPTZZZ_API_KEY="你的 Key" 写进 ~/.zshrc,给桌面 App 用再执行 launchctl setenv(注销或重启后失效,要重新执行后再打开 App);Linux bash 写进 ~/.bashrc。Windows 在 PowerShell 运行 [Environment]::SetEnvironmentVariable("GPTZZZ_API_KEY", "你的 Key", "User") 或 setx,之后新开的窗口才生效。

用了中转后怎么换回 Codex 官方配置?

退出 Codex,把 config.toml.bak 复制回 config.toml;没有备份就删掉 model_provider = "gptzzz" 和整个 [model_providers.gptzzz] 表。再删掉 GPTZZZ_API_KEY,运行 codex login status 检查官方登录,没有凭据就 codex login。用 CC Switch 的,切到 OpenAI Official 后重启,用 codex login status 确认登录。

codex exec 文本成功就代表完整兼容吗?

不代表。文本探针只证明基础 Responses 链路;还要验证 SSE 事件、function tools、reasoning、多轮续接、取消、错误和代码修改后的测试结果。

Codex CLI 怎样配置自定义 model_provider?

在用户级 config.toml 定义 [model_providers.自定义ID],设置 name、API 根 base_url、环境变量名 env_key 与 wire_api = "responses",再让顶层 model_provider 指向该 ID。顶层键要写在第一个表之前。

Codex CLI 怎样指定中转站的自定义模型?

在 config.toml 顶层设 model(如 gpt-6-sol),或单次运行加 --model。模型 ID 要在你这把 Key 的分组里,最好也在当前 Codex 版本的内置模型目录里;不在目录里的名称,官方建议提供匹配的 model_catalog_json。

Codex CLI 如何验证 Responses 流式和工具调用?

先用 codex exec --json 核对 thread、turn、item 和最终完成事件,再在固定测试仓库验证工具调用 ID、参数、结果、命令退出码、最终 diff 与测试结果。

核验日期

本文技术参数与官方资料复核于 2026-10-09(Codex 0.162.0);GPTZZZ 价格取自当日模型价格页。模型、价格、限额与客户端界面会变化,使用前请再次核对官方文档和当前控制台。