本文面向第一次使用 Terminal、第一次配置 Codex CLI,或者需要通过第三方 AI Gateway 使用 Codex CLI 的用户。
完成本文后,你将能够:
- 安装并确认 Codex CLI;
- 安全输入 AI Gateway 的 Base URL 和 API Key;
- 查询自己的 API Key 可以看到的模型;
- 判断不同厂商模型适用的请求协议;
- 用 OpenAI Responses 验证目标模型;
- 将通过验证的模型写入
;~/.codex/config.toml - 用
和codex doctor
确认连接;codex exec - 根据错误信息判断是网络、认证、协议、配置还是上游问题。
本文以 macOS、zsh 和以下 AI Gateway 为例:
如果你的中转站地址不同,只需要替换 Base URL、API Key 和模型 ID。不要把真实 API Key 发到聊天、工单、截图、Git 仓库或公开网页。
本文示例环境与验证范围:
Codex CLI 和 AI Gateway 会持续更新。本文聚焦协议识别、配置步骤和实际验证,不把某一时刻的模型状态当作永久保证。
先看结论:模型厂商和请求协议是两件事
Codex CLI 通过自定义 provider 接入 AI Gateway 时,配置中的
wire_api 决定请求格式。模型名称中的厂商前缀不会自动切换协议。
本文推荐使用一个自定义 provider:
| Codex 配置项 | | AI Gateway 端点 | 什么时候使用 |
|---|---|---|---|
| | | 目标模型的 Responses curl 成功,并准备给 Codex 使用 |
| OpenAI Chat Completions | Codex 自定义 provider 不支持 | | 仅用于其他客户端或诊断模型是否有 Chat 路由 |
| Anthropic Messages | Codex 自定义 provider 不支持 | | 仅用于其他 Anthropic 客户端;Codex 需要额外转换层 |
官方配置中,自定义 provider 的
wire_api 只有 responses 一个有效值。也就是说:
- Codex 对该 provider 发送
;POST /responses - Codex 不会根据
、anthropic/
或deepseek/
前缀切换协议;qwen/ - Chat 或 Anthropic 请求成功,不代表同一个模型可以给 Codex 使用;
- Claude 如果只有
路由,必须通过中转站或本地代理转换成/messages
;/responses
中出现模型,只说明当前 API Key 可以看到它,不代表/models
一定有上游。/responses
按模型厂商选择协议
下面的矩阵用于选择验证路径,不是固定模型清单。具体模型必须以自己的
/models 结果和对应端点测试为准:
| 模型厂商或系列 | OpenAI Chat Completions | OpenAI Responses | Anthropic Messages | Codex 配置建议 |
|---|---|---|---|---|
| OpenAI GPT、Codex 系列 | 网关提供时可用 | 常见兼容路径,但必须单独测试 | 通常不是首选 | 只有 Responses 测试成功才能直接配置 |
| Anthropic Claude | 只有网关提供兼容路由时使用 | 需要单独测试,不能从名称推断 | 原生接入路径,通常优先测试 | Codex 需要 Responses 兼容层 |
| DeepSeek 系列 | 网关提供时可用 | 需要单独测试 | 网关提供时可用 | 只选择实际通过 Responses 的模型 |
| Qwen 系列 | 网关提供时可用 | 需要单独测试 | 网关提供时可用 | 先验证 Responses,再确认 reasoning 参数 |
| Gemini、Grok、Mistral、Meta 及其他系列 | 由网关适配决定 | 由网关适配决定 | 由网关适配决定 | 以实际端点测试结果为准 |
最重要的规则是:
只使用 Codex 时,先配置一个 Responses provider 即可;不需要为了测试 Chat 或 Anthropic 协议而在
config.toml 中创建不存在的 wire_api 值。
0. 完整操作路线
第一次配置时,请按以下顺序操作:
完成第 8 步后,你已经具备 Codex 的基础文本和编码能力。工具调用、文件修改、流式、多模态和搜索能力见第 9、12、13 节,需要按实际场景继续验证。
如果只需要基础文本接入,可以直接执行第 2–8 节;只有在以下情况才需要详细阅读第 9–12 节:
- 想确认某个厂商模型为什么不能给 Codex 使用;
- 想使用 Claude 或其他 Anthropic 模型;
- 想使用 CC Switch 或其他协议转换层;
- 想判断工具、流式、搜索或多模态能力是否兼容。
配置完成的最基本验收标准是:
- 对应 API Key 能看到目标模型;
- 目标协议的请求端点返回 HTTP 200;
- 响应中存在最终文本;
返回实际模型文本;codex exec- 如果要使用工具或修改文件,再单独验证权限和工具调用。
只看到模型名称,不能直接说明模型可以在 Codex 中使用。
配置完成后可以得到什么效果
完成第 8 节后,你将能够:
- 在项目目录中运行
,进入交互式编码会话;codex - 使用配置中的默认模型发送任务;
- 使用
临时切换到另一个已验证模型;codex exec --model YOUR_MODEL_ID - 让 Codex 在配置的审批策略和沙箱范围内读取文件、修改工作区并运行命令;
- 在需要时通过
和标准 curl 区分客户端、网络、权限和上游问题。codex doctor
本指南默认验收的是“Responses 文本调用”。文件修改、工具调用、流式、多模态和搜索能力仍受模型、provider、沙箱和上游实现共同影响,不能因为第一条文本回复成功就自动视为全部支持。
Codex CLI 是本机命令行客户端,不是常驻 Gateway 服务。本文只适用于 Codex CLI;OpenClaw、Claude Code、OpenCode 等工具的 provider 配置不能直接复制到 Codex。
1. 准备信息
1.1 Base URL
本示例使用:
地址已经包含
/v1。不要写成:
Codex 会在 Base URL 后面追加
/responses,最终请求类似:
不要把 Base URL 直接写到
/responses,否则客户端可能重复追加路径。
1.2 API Key
请到 AI Gateway 后台创建 API Key,并确认:
- API Key 没有过期;
- API Key 有目标模型权限;
- API Key 与 Base URL 属于同一个环境;
- API Key 对 OpenAI Responses 路由有权限;
- 复制时没有多余空格或换行。
同一个 Token 能访问 Chat 或 Anthropic 路由,不代表一定有 Responses 路由权限。
1.3 模型 ID
模型 ID 必须从当前 API Key 的
/models 返回值中原样复制。下面的 YOUR_MODEL_ID 只是占位符,必须替换成你自己的完整模型 ID:
Codex 的
--model 参数填写上游模型 ID,不需要再拼接 Codex provider ID。
正确:
不要写成:
clickzetta 是本地 provider ID,YOUR_MODEL_ID 才是发送给 AI Gateway 的模型 ID。
1.4 在哪里操作
本文命令都在 macOS Terminal 执行。
按 Command + Space,输入 Terminal,按回车打开。
终端提示符可能类似:
不要复制提示符,只复制代码框中的命令。
1.5 是否需要 VPN
AI Gateway 本身是否需要 VPN,以本机网络测试为准。
执行:
只要能收到 HTTP 响应,就说明域名和网络链路基本可达。401 或 403 也说明网络已经连通,只是还没有正确鉴权。
以下情况才需要检查代理、VPN、防火墙或 DNS:
;Could not resolve host
;Connection timed out- TLS 握手持续失败;
- 公司网络阻止安装脚本或登录页面。
如果上面的检查能收到 HTTP 响应,Codex 调用中转站本身不需要额外 VPN。官方 ChatGPT 登录页和安装源能否直连,则取决于你所在的网络和地区。
2. 安装或确认 Codex CLI
2.1 检查基础工具
执行:
看到两个文件路径即可继续。
如果 macOS 没有
jq,并且已经安装 Homebrew:
2.2 检查 Codex CLI
执行:
正常返回类似:
版本不同不一定是问题,只要命令能够执行即可。配置字段会随版本更新,正式修改配置前建议查看当前版本的
codex --help。
2.3 检查是否安装了多个 Codex
执行:
如果返回多个路径,Terminal 实际使用排在第一位的版本。
常见来源包括:
桌面应用内置版本的路径可能类似:
如果“同一个命令在两个 Terminal 表现不同”,优先执行
type -a codex 和 codex --version,确认实际运行的是哪一份。
2.4 没有安装时
官方文档提供 macOS/Linux 独立安装脚本示例:
安装后关闭 Terminal,再重新打开,然后执行:
官方安装和更新方式可能变化,请以 Codex CLI 官方文档 为准。
2.5 更新 Codex
独立 CLI 可以先尝试:
如果使用的是桌面应用内置版本,通常应更新桌面应用。更新后再次执行:
3. 认识 Codex 的认证方式
3.1 官方 OpenAI/ChatGPT 登录
直接使用官方 OpenAI 服务时,可以执行:
然后在浏览器中完成登录。
使用官方 OpenAI API Key 时,可以执行:
查看当前登录状态:
清除登录凭据:
3.2 中转站推荐使用 env_key
env_key第三方 AI Gateway 更适合使用自定义 provider 的
env_key:
这表示 Codex 从名为
CLICKZETTA_API_KEY 的环境变量读取 Token,而不是把 Token 明文写进 config.toml。
3.3 在当前 Terminal 安全输入 API Key
zsh 中执行:
输入时屏幕不会显示字符,这是正常的。输入完成后按回车。
确认变量已经存在,但不要打印 Token:
不要执行:
3.4 临时变量和长期保存的区别
使用
read 和 export 设置的变量只在当前 Terminal 有效。关闭 Terminal 后需要重新设置。
生产环境建议把 Token 放入:
- macOS Keychain;
- 企业密钥管理服务;
- CI/CD Secret;
- 权限受控的启动环境。
不要把真实 Token 直接提交到
.zshrc、config.toml 或 Git 仓库。
3.5 macOS Keychain 示例(可选)
把 Token 写入 Keychain。下面的
-w 位于命令最后,因此 Terminal 会提示输入,不需要把 Token 直接写在命令中:
测试能否读取,但不要把结果打印到公开终端记录:
需要每次打开 Terminal 自动加载时,可以把读取命令加入个人 shell 启动配置。企业环境应优先使用公司统一的密钥管理方案。
3.6 不要混用两套认证
本文推荐只使用:
不要同时再配置:
requires_openai_auth = true 更适合复用 Codex 已保存的 OpenAI 登录凭据。中转站使用独立 Token 时,env_key 更清晰,也更容易排查。
4. 查询模型并判断协议
4.1 查询你的模型目录
模型目录用于确认 API Key 的权限范围和完整模型 ID。它不是协议能力证明,也不是 Codex 的固定模型清单。
确保当前 Terminal 已设置
CLICKZETTA_API_KEY,然后执行:
根据命令输出的 HTTP 状态决定下一步:
| 结果 | 说明 | 下一步 |
|---|---|---|
| 模型目录可访问 | 从返回结果原样复制目标模型 ID,继续第 5 节 |
或 curl 报连接错误 | 网络、DNS、代理或 VPN 路径有问题 | 回到第 1.5 节检查网络,不要先改模型 ID |
/ | API Key、鉴权头或权限有问题 | 回到第 1.2、3.3 节检查 Token 和当前 Terminal |
| Base URL 或路径不正确 | 检查 Base URL 是否多写或漏写 |
| 当前 API Key 或上游被限流 | 等待后重试,或联系 AI Gateway 支持团队确认额度 |
| 网关或上游暂时异常 | 记录时间、模型和 request ID 后重试 |
如果你的中转站同时提供 Anthropic 兼容端点,再使用 Anthropic 鉴权头查询:
配置模型时必须从返回结果中原样复制完整 ID。例如,
openai/...、anthropic/...、deepseek/... 或 qwen/... 都只是模型 ID 的命名方式,不是 Codex 的协议开关。
4.2 不同厂商模型的协议边界
厂商的原生 API 与 AI Gateway 暴露的兼容协议可能不同。同一个模型可能同时出现在多个协议目录,也可能只出现在其中一个目录。
判断时分成三层:
例如,Claude 可以在 Anthropic Messages 中成功,但如果
/responses 没有上游,仍然不能直接给 Codex 使用;DeepSeek 或 Qwen 也不能因为 Chat 成功就自动推断 Responses 成功。
工具调用、流式、图片、文件、搜索、结构化输出和长上下文属于更高一层的能力,需要在基础文本成功后单独验证。
4.3 选择模型的实际规则
如果目标是 Codex CLI,按以下规则选择:
模型只在 Chat Completions 成功,不能直接给 Codex;模型只在 Anthropic Messages 成功,也不能直接给 Codex。此时应使用支持对应协议的客户端,或者使用能把 Responses 转换为目标协议的代理层。
4.4 为什么不同协议会看到不同模型
中转站可能根据请求头和端点返回不同的模型视图:
因此,一个模型在 Anthropic 查询中可见,不代表它一定出现在 OpenAI Responses 查询中;反过来也一样。判断 Codex 能否使用时,只看
/responses 的实际结果。
5. 先用标准 Responses curl 验证模型
5.1 为什么要先用 curl
curl 可以把问题拆成两层:
不要跳过 curl 直接修改 Codex 配置,否则很难区分客户端问题和中转站问题。
5.2 最小 Responses 请求
执行:
随后执行:
正常结果应同时满足:
- HTTP 200;
为完成状态;status
中存在output
;output_text- 最终文本是模型真实返回的内容。
5.3 只提取最终文本
执行:
正常返回:
5.4 HTTP 200 仍然要检查最终文本
推理模型可能先产生 reasoning。如果输出预算太小,HTTP 可能是 200,但响应中没有最终文本。
验收时必须检查:
不能只检查 HTTP 200。
6. 把通过测试的模型写入 Codex CLI
6.1 Codex 配置文件位置
用户级配置文件:
自定义 provider、认证来源和 Base URL 应写在用户级配置中。
项目目录也可以存在:
但官方明确限制:项目级配置不能覆盖
model_provider、model_providers 等机器级 provider 配置。即使项目已被信任,也应把中转站 provider 写进 ~/.codex/config.toml。
6.2 修改前先备份
执行:
查看备份:
请记住最新备份文件的完整名称。如果后续配置无法加载,可以用该文件恢复。下面的
备份文件完整路径 必须替换为 ls -lt 显示的实际文件:
恢复配置只恢复文件内容,不会恢复已经被
unset、关闭 Terminal 或重启电脑清除的环境变量。恢复后仍需按第 3.3 节确认 CLICKZETTA_API_KEY 已加载。
6.3 新用户推荐配置
如果
~/.codex/config.toml 不存在或内容为空,执行:
粘贴以下内容:
保存前必须把
YOUR_MODEL_ID 替换为第 4 节查询到的完整模型 ID。不要把 clickzetta/ 这样的本地 provider 名称拼到模型 ID 前面。
上面的配置同时包含基础接入字段和一组保守的运行参数:
model_reasoning_effort = "medium"、model_verbosity = "low" 与 model_reasoning_summary = "auto"。基础接入真正不能缺少的是 provider、模型 ID、Base URL、env_key 和 wire_api = "responses"。如果第 5 节 curl 已成功,但某个模型拒绝 reasoning 或 verbosity 相关参数,可先临时删除 model_reasoning_summary 与 model_verbosity 后重试;不要删除或改写 wire_api。
在 nano 中:
- 按 Control + O 保存;
- 按回车确认文件名;
- 按 Control + X 退出。
配置文件保存后,至少应确认以下内容存在:
其中模型 ID 必须与第 4 节查询结果完全一致。不要只检查文件是否保存成功,还要继续执行第 7 节和第 8 节的实际验证。
6.4 已有配置的用户不要整文件覆盖
如果已有插件、MCP、项目信任记录或其他设置,不要把整个文件替换成上面的推荐模板。
迁移时只需要:
- 在第一个
之前设置顶层[表名]
;model_provider = "clickzetta" - 在同一顶层区域设置
;model = "YOUR_MODEL_ID" - 新增或修改
;[model_providers.clickzetta] - 保留已有
、[plugins]
、[mcp_servers]
和其他 provider 表;[projects] - 保存后运行第 7 节和第 8 节的完整验证。
原有 provider 可以保留作为回退路径。例如,文件中可以同时存在:
上面的两个 provider 表可以共存,但当前实际使用哪一个,由文件顶层的
model_provider 决定。不要在 [model_providers.clickzetta] 中添加 requires_openai_auth = true,也不要把真实 API Key 写进该表。
如果旧配置在
[projects."..."] 下出现 model_provider,不要把它当作全局设置。Codex 会忽略项目级配置对 provider 的覆盖;请把有效的 model_provider 放在用户级 ~/.codex/config.toml 顶层。
6.5 TOML 最容易踩坑:顶层字段的位置
以下字段属于顶层:
它们必须出现在第一个
[表名] 之前。
错误示例:
上面的
model_provider 会被 TOML 解析成 projects."/Users/example/project" 表中的字段,而不是全局 provider 选择,因此可能完全不生效。
正确示例:
不要简单地把顶层配置追加到文件最后。
6.6 不要重复定义 provider 表
一个文件中不要出现两次:
如果已经存在,直接修改原表。重复表会导致 TOML 解析失败。
6.7 provider ID 不能使用保留名称
官方内置并保留以下 provider ID:
自定义中转站不要命名为这些值。本文使用:
6.8 为什么推荐 model_reasoning_effort = "medium"
model_reasoning_effort = "medium"不同上游对推理档位的支持不同。
对第三方模型而言,
high 或 xhigh 可能会触发上游不接受的 thinking budget 参数,例如:
因此,面向多个模型的通用默认值建议使用
medium。确认具体模型支持后,再单独调高。
6.9 model_verbosity
可能被忽略
model_verbosityCodex 会为不在内置模型目录中的第三方模型使用 fallback metadata。
某些第三方模型可能出现类似警告:
这不一定代表请求失败,只说明当前模型元数据没有声明 verbosity 能力。
6.10 不要随意打开 WebSocket 和 Web Search
自定义 provider 默认不声明 Responses WebSocket 和独立 Web Search 支持。
只有中转站确实实现对应接口时,才考虑配置:
配置为
true 只是在客户端声明能力,不会让中转站自动拥有该接口。模型、provider、网关和运行时必须同时支持。
7. 检查配置是否正确
7.1 Codex 没有 config validate
config validateCodex CLI 没有 OpenClaw 那样的:
不要照搬其他工具的命令。
Codex 推荐通过以下三层验证:
7.2 使用 strict config 和 doctor
执行:
重点查看:
doctor 还会检查 Terminal、历史会话、MCP、Git 和沙箱。即使最后显示某些 warn/fail,也不一定代表 AI Gateway 失败。
例如:
是当前终端能力问题;TERM=dumb- 历史 thread 文件缺失是本地历史记录问题;
- 某个 MCP 403 是 MCP 服务问题;
成功才说明 provider endpoint 可达。reachability
doctor 的最终退出码可能因为历史 thread、Terminal、MCP 或插件问题而不是 0。判断中转站基础接入是否完成时,不要只看最后的计数或退出码,必须同时检查以下关键项:
| 检查项 | 基础接入要求 | 说明 |
|---|---|---|
| | 可以严格加载 |
| | 活跃 provider 可以取得认证信息 |
| | 活跃 provider 的端点可达 |
第 8 节 | 退出码 0 且有最终文本 | 这是最终的模型调用验收 |
如果前三项正常,但
doctor 因无关检查返回非零,继续执行第 8 节;只有 codex exec 也失败时,才按第 15 节进一步排查。
7.3 查看登录状态
这是可选检查。使用
env_key 接入中转站时,即使没有官方 OpenAI/ChatGPT 登录状态,也不影响后续中转站请求。
执行:
如果 provider 使用
env_key,还需要单独确认当前 Terminal 已加载:
codex login status 只说明 Codex 保存的官方登录或 API Key 状态,不会代替自定义 env_key 检查。已经使用过官方 Codex 的电脑,可能仍显示原有 OpenAI/ChatGPT 登录状态;这不代表当前中转站请求会走官方接口,也不代表中转站配置失败。
对 AI Gateway 用户,按以下顺序验收认证和实际路由:
环境变量只对当前 Terminal 及其启动的子进程生效。换一个 Terminal、关闭窗口或重启电脑后,需要重新加载 API Key,除非已经按第 3.4 或 3.5 节配置了持久化加载方式。
7.4 查看当前 CLI 参数
执行:
不同版本的参数位置可能不同。遇到
unexpected argument 时,以当前版本帮助为准。
8. 用 Codex CLI 发送第一条消息
8.1 最小非交互测试
在任意目录测试时,可以执行:
正常最终文本:
当前版本通常还会在运行信息中显示实际模型和 provider。请确认类似:
成功标准不是进程启动,而是:
- Codex 实际发出 Responses 请求;
- 运行信息中的
是provider
;clickzetta - 运行信息中的
与本次指定的完整模型 ID 一致;model - 最终退出码为 0;
- 输出中有模型最终文本;
- 没有在重试结束后返回 400/502。
8.2 参数位置限制
当前版本中,审批参数应放在
exec 之前:
正确:
错误:
错误写法可能返回:
8.3 为什么使用这些测试参数
| 参数 | 用途 |
|---|---|
| 不持久化本次测试会话 |
| 允许在非 Git 目录测试 |
| 测试时禁止模型修改文件 |
| 最小文本测试不弹审批请求 |
| 临时指定模型,不必修改默认配置 |
| 只覆盖本次运行的配置 |
这些参数适合“只回复一段文字”的连通性测试,不代表日常开发应该永远关闭审批。
8.4 交互模式
进入项目目录:
交互界面中常用命令:
8.5 临时切换模型
不修改配置文件:
非交互:
8.6 临时调整推理档位
9. 理解验证结果和能力范围
9.1 为什么要分协议验证
模型目录只回答“这个 API Key 能看到哪些模型”,不能回答“这个模型能否通过 Codex 使用”。要判断是否能在 Codex CLI 中使用,必须验证同一条协议链路:
Codex 使用的是 OpenAI Responses。即使同一个模型在 OpenAI Chat Completions 或 Anthropic Messages 中可以回复,也不能跳过 Responses 验证。
9.2 推荐验证顺序
| 验证层 | 建议使用的状态名称 | 通过标准 | 可以说明什么 |
|---|---|---|---|
| 权限 | 模型目录可见 | 返回目标模型 | 当前 API Key 可以看到该模型 |
| 协议 | Responses 路由可用 | 返回 HTTP 200 | 网关存在对应 Responses 路由 |
| 内容 | Responses 文本可用 | 有完成状态和最终文本 | 该模型可以完成基础 Responses 文本请求 |
| Codex CLI | Codex 基础可用 | 退出码为 0,且 provider/model 正确 | 可以用于当前 Codex 基础文本和编码任务 |
| 能力 | Codex 工作流已验证 | 文件、工具、流式等实际功能逐项通过 | 可以用于已经验收的具体工作流 |
只有前四层都通过,才可以把该模型用于 Codex 的基本文本任务。第五层需要根据你的实际场景单独确认。
对外说明模型状态时,建议使用上表中的状态名称。不要把“模型目录可见”写成“Codex 已支持”,也不要把一次文本成功写成“所有高级能力均支持”。
9.3 如何阅读验证结果
| 结果 | 对你的含义 | 下一步 |
|---|---|---|
| Responses 和 Codex 都成功 | 可以进行基本文本和编码任务 | 按第 13 节确认沙箱,再开始修改文件 |
| Chat 或 Messages 成功,Responses 失败 | 该模型属于其他协议可用范围 | 使用对应协议的客户端,或增加转换层 |
Responses 返回 400 / | 网关没有为该模型配置 Responses 上游,或权限不足 | 核对模型 ID、权限和路由,不要反复修改 Codex 参数 |
| Responses 返回 502 | 上游调用或网关路由发生故障 | 保留时间、模型、协议和 request ID 后联系 AI Gateway 支持团队 |
| HTTP 200 但没有最终文本 | 输出预算或响应转换不完整 | 增大输出预算并检查 、 和 |
| Codex 能启动但请求失败 | 本机配置、参数或流式解析可能有问题 | 先对比第 5 节 curl,再检查第 6、7、12 节 |
9.4 各厂商模型在 Codex 中的判断方式
下表是配置规则,不是模型目录。模型名称可能变化,但协议判断方式不变:
| 厂商或模型类型 | 通常可用的协议 | 给 Codex 配置时的判断 |
|---|---|---|
| OpenAI 模型 | OpenAI Chat 或 Responses,具体取决于网关 | 只有 Responses 路由实际成功,才可直接配置 |
| Anthropic Claude | Anthropic Messages | Codex 不会自动发送 Messages;必须有 Responses 兼容层 |
| DeepSeek | 常见为 OpenAI Chat,部分网关也提供 Anthropic 或 Responses | 不要从名称推断;必须实际验证 Responses |
| Qwen | 由网关决定,可出现 Chat、Responses 或 Anthropic 兼容路由 | 先验证 Responses,再根据模型支持情况选择 reasoning effort |
| 其他厂商或自定义别名 | 由网关和上游适配决定 | 只依据网关目录、接口文档和实际请求结果 |
同一厂商的不同模型可能走不同上游,不能把一个模型的成功结果套用到同厂商的其他模型。
9.5 基本文本支持和高级能力是两件事
Responses 文本调用成功,只说明 Codex 能完成基础对话。以下能力需要单独验证:
- 流式输出和断线重连;
- 工具调用和工具结果回传;
- 图片、文件或其他多模态输入;
- Web Search、MCP 和外部连接器;
- JSON Schema 或结构化输出;
- 长上下文、压缩和多轮会话;
- 推理预算、verbosity 和上下文窗口。
本指南所说的“可用于 Codex”,是指 Responses 文本调用与 Codex 基本任务已经通过,不自动包含上述高级能力。
9.6 curl 成功但 Codex 失败时
按以下顺序排查:
- 确认
和codex --version
;type -a codex - 确认
在用户级model_provider
;~/.codex/config.toml - 确认 provider 的
为wire_api
;responses - 确认模型 ID 与 curl 完全一致;
- 将 reasoning effort 暂时降到
;medium - 用第 8 节的只读
重试;codex exec - 如果仍失败,保留脱敏错误和 request ID,联系中转站确认路由。
10. 请求协议边界
10.1 自定义 provider 只使用 Responses
官方配置参考规定,自定义 provider 的
model_providers.<id>.wire_api 只有一个有效值:
因此以下写法不受支持:
这不是更换字段名称的问题,而是 Codex 当前自定义 provider 没有这些协议选项。
10.2 三种协议不能混用
| 项目 | OpenAI Chat Completions | OpenAI Responses | Anthropic Messages |
|---|---|---|---|
| 路径 | | | |
| 主要输入 | | | + 顶层 |
| 输出预算 | | | |
| 工具结果 | | Responses function/tool items | / |
| 流式事件 | Chat SSE | Responses SSE | Anthropic SSE |
| Codex 自定义 provider | 不支持 | 支持 | 不支持 |
只修改 URL 或模型名称,不能让客户端自动切换协议。
10.3 模型前缀不是协议开关
例如:
anthropic/ 只是模型 ID 的一部分。把它交给 Codex 后,Codex 仍发送:
不会自动发送:
10.4 Chat 成功不代表 Codex 成功
如果某个 DeepSeek 或其他厂商模型出现以下情况:
这不是 Codex 不认识 DeepSeek 名称,而是 Codex 所需的 Responses 路由不存在。
10.5 Anthropic 成功不代表 Codex 成功
如果 Claude 或其他 Anthropic 模型出现以下情况:
这说明模型和 API Key 可能可以通过 Anthropic 客户端使用,但不能通过该 Responses 路由直接给 Codex 使用。
10.6 目录视图不是协议能力证明
必须分别记录:
不能只保存一个“模型总列表”。
11. Claude、Anthropic 和 CC Switch
11.1 Claude 为什么不能直接配置
以下命令语法上可以执行:
但 Codex 仍发送 Responses。如果网关只为该模型配置了 Anthropic Messages 上游,常见返回:
11.2 有两种解决方向
方向一:中转站提供 Responses 兼容层。
方向二:本地使用 CC Switch 等协议转换工具。
11.3 使用转换层时 Codex 仍然配置 Responses
即使经过 CC Switch,Codex 侧仍应保持:
变化的是
base_url 指向本地代理,例如:
本地代理负责把 Responses 转为 Anthropic Messages,再把 Anthropic 响应转换回 Codex 能理解的 Responses。
11.4 CC Switch 不等于模型自动可用
协议转换层不能解决:
- Token 没有权限;
- 模型 ID 不存在;
- Anthropic 上游返回 5xx;
- 模型被限流;
- 上游上下文或思考预算超限;
- 工具调用无法正确映射;
- 图片、文件、缓存、搜索等能力不兼容。
11.5 转换后的高级能力必须逐项验收
文本返回成功后,还要分别验证:
- Responses SSE 与 Anthropic SSE 的流式转换;
- function call 与
的映射;tool_use/tool_result - system 消息和多轮上下文;
- reasoning/thinking 内容;
- 图片和文件输入;
- Web Search;
- Prompt Cache;
- 中断、重试和错误码转换。
只有在转换层完成相同场景的验证后,才能判断 Claude 是否适用于对应的 Codex 工作流。
11.6 CC Switch 可能改写 Codex 配置
使用“接管 Codex”前先备份:
接管后重新检查:
重点确认 Base URL 是否已经指向本机代理、代理是否正在运行,以及停止代理后是否需要恢复原配置。
12. 推理档位、模型元数据和输出限制
12.1 model_reasoning_effort
的可选值
model_reasoning_effortCodex 当前配置参考列出:
但
xhigh 是否可用取决于模型。配置字段允许,不代表上游模型一定接受。
12.2 第三方模型的推理参数
不同厂商和不同模型对 reasoning effort 的映射可能不同。某些模型在
high 或 xhigh 下会拒绝 thinking budget,或者只返回 reasoning 而没有最终文本。
建议先使用
medium 完成文本验证,再根据该模型的接口说明逐步提高档位。出现 thinking_budget、输出不完整或没有最终文本时,先降低档位并增大输出预算。
12.3 未知模型元数据警告
第三方模型可能出现:
含义是 Codex 内置目录中没有该模型的完整能力描述,因此会使用回退值。
可能影响:
- 上下文窗口估算;
- reasoning 支持判断;
- verbosity 支持判断;
- 工具和多模态能力声明;
- token 截断和压缩策略。
这条警告本身不等于调用失败,但不能忽略长期影响。
12.4 不要随意猜上下文窗口
Codex 支持手动配置类似:
只有从中转站或上游获得准确数值后才应设置。写得比真实值大,可能导致上游拒绝;写得太小,会导致 Codex 过早压缩上下文。
12.5 HTTP 200 但没有最终文本
Responses 中可能先出现 reasoning item。输出预算不足时,可能没有
output_text。
排查:
- 增大
;max_output_tokens - 检查
和status
;incomplete_details - 检查是否只有 reasoning;
- 使用 Codex 实际请求再次验证;
- 不要只看 HTTP 状态码。
12.6 不能从文本成功推断的能力
以下能力不能由一次文本调用直接推断:
- 长上下文稳定性;
- 图片输入;
- Web Search;
- MCP 工具;
- 多轮 function call;
- JSON Schema 输出;
- Prompt Cache;
- Responses WebSocket;
- 极长任务中的断线恢复。
使用这些能力前,应按第 9.5 节逐项验证,不要把一次文本成功理解为所有功能都兼容。
13. 沙箱和审批限制
13.1 模型连通与文件权限是两件事
AI Gateway 负责模型请求;Codex 沙箱负责模型生成的本地命令和文件操作。
出现“模型能回复但不能改文件”时,应检查 sandbox,而不是先怀疑 API Key。
13.2 三种沙箱模式
| 模式 | 主要行为 | 建议用途 |
|---|---|---|
| 只读文件,不能正常修改项目 | 连通性测试、审查 |
| 可以写工作区,部分敏感路径仍受保护 | 日常开发推荐 |
| 文件系统基本不受 Codex 沙箱限制 | 只用于已有外部隔离的环境 |
推荐默认:
13.3 审批策略
| 策略 | 含义 |
|---|---|
| 只有受信命令直接运行,其余需要审批 |
| Codex 根据操作风险请求审批 |
| 不请求审批,失败直接返回模型 |
approval_policy 决定什么时候询问,sandbox_mode 决定命令能访问什么。两者互相独立。
13.4 danger-full-access
的风险
danger-full-access不要把以下配置作为默认配置:
这种组合允许模型在没有人工审批的情况下执行广泛的本地操作。
也不要在普通电脑上随意使用:
13.5 workspace-write 的网络限制
Codex 自己访问模型 provider,与模型生成的 shell 命令访问外网不是完全同一层。
workspace-write 中,shell 工具的网络默认可能被限制。需要允许工具命令访问外网时,可以在确认风险后配置:
不要为了让模型 API 连通而盲目打开工具网络;先看
codex doctor 的 provider reachability。
13.6 保护 API Key 不进入子进程
Codex provider 需要从父进程读取
CLICKZETTA_API_KEY,但模型生成的 shell 命令通常不需要看到该变量。
可以评估使用 shell 环境过滤:
修改后必须重新运行
codex doctor 和实际模型请求,确认 provider 认证仍正常。
14. 使用 Profile 管理多套配置
14.1 为什么使用 Profile
当你同时使用官方 OpenAI、中转站和本地模型时,不建议频繁覆盖同一个
config.toml。
可以把公共 provider 放在:
再创建:
14.2 Profile 示例
~/.codex/config.toml 中保留 provider:
~/.codex/clickzetta.config.toml 中写选择项:
启动交互模式:
非交互模式:
14.3 Profile 仍不能切换 wire protocol
Profile 可以切换 provider、模型和推理档位,但 Codex 自定义 provider 的 wire protocol 仍然只能是 Responses。
Profile 不是 Anthropic 协议开关。
15. 常见问题排查
15.1 codex: command not found
codex: command not found执行:
如果刚安装,关闭并重新打开 Terminal。仍找不到时,重新执行官方安装步骤,并查看安装器提示的 PATH 路径。
15.2 两个 Terminal 的版本不同
执行:
Terminal 使用 PATH 中排在最前面的版本。桌面应用内置 CLI 与独立 CLI 可能不是同一个版本。
15.3 unexpected argument
unexpected argument先执行:
当前版本中,
--ask-for-approval 放在 exec 前:
15.4 配置字段不生效
重点检查:
- 顶层字段是否写在第一个
前;[表名] - 是否误写到
表中;[projects."..."] - 是否在项目
中设置 provider;.codex/config.toml - 是否重复定义 provider 表;
- 是否启动了另一份 Codex CLI;
- 是否被
或--profile
临时覆盖。-c
执行:
15.5 API Key 环境变量不存在
执行:
如果未加载,重新执行第 3.3 节。不要把真实 Token 打印出来。
15.6 HTTP 401/403
可能原因:
- Token 错误或过期;
头缺失;Authorization: Bearer- Token 没有模型权限;
- 请求到了错误环境;
- Base URL 对应另一套网关。
先用第 4 节
/models 请求验证鉴权。
15.7 No upstream candidates
No upstream candidates常见原因:
- 目标模型没有 Responses 上游;
- 模型 ID 写错;
- API Key/租户没有该路由;
- 把仅支持 Chat 或 Anthropic 的模型交给 Codex;
- 上游已下线。
如果某个 DeepSeek、Claude 或其他厂商模型只在 Chat 或 Anthropic 路由成功,这属于协议路由不匹配,不是重装 Codex 可以解决。
15.8 HTTP 502 [G2] Upstream failed
[G2] Upstream failed网关已经识别模型,但上游请求失败。
处理方式:
- 保留模型 ID、协议、时间和 request ID;
- 等待后重试;
- 用裸
curl 对比;/responses - 查看 Codex 是否自动重试后成功;
- 持续失败时联系 AI Gateway 支持团队。
如果同一模型持续返回 502,应先按上游故障处理;不要仅凭一次重试成功就把它当作稳定可用。
15.9 stream disconnected
/ Reconnecting
stream disconnectedReconnectingCodex Responses 默认使用流式传输时,网络或上游可能中途断开。Codex 会根据
stream_max_retries 自动重试。
判断成功与否应看:
一次
Reconnecting 后成功,可以记录为“成功但发生重试”;持续重试失败则不能视为可用。
15.10 thinking_budget
参数错误
thinking_budget把推理档位降到
medium 或更低:
15.11 Unknown model ... fallback metadata
Unknown model ... fallback metadata这表示 Codex 没有该第三方模型的内置元数据。
如果请求仍返回成功,可以继续进行基础文本测试,但要单独验证上下文、reasoning、工具和多模态能力。
15.12 model_verbosity is set but ignored
model_verbosity is set but ignored当前模型不支持或没有声明 verbosity 能力。
可以:
- 忽略警告继续测试;
- 临时删除
;model_verbosity - 为不同模型建立 Profile。
15.13 MCP 403 或插件警告
MCP、插件目录和模型 provider 是不同链路。
如果模型已经返回 OK,但随后出现 MCP shutdown、插件清单或 ChatGPT 远程目录警告,先不要把它误判成模型失败。
排查时分别记录:
还可能看到以下不直接等于模型失败的提示:
remote plugin bundle sync failed 常见于本机存在需要官方 ChatGPT 登录的远程插件同步,而当前会话使用的是 Gateway API Key。OutputTextDelta without active item 可能来自流式事件转换或解析。如果最终仍显示正确的 provider、模型和最终文本,并且退出码为 0,应记录该警告并观察;如果持续出现丢字、无最终文本或非零退出码,再按流式兼容问题提交脱敏日志。
15.14 非 Git 目录无法执行
最小测试加入:
正式项目建议在 Git 仓库中运行,方便审查和恢复模型修改。
15.15 doctor
最后显示 fail
doctor不要只看最后的计数。展开查看具体分组:
只要
Configuration、auth 和 provider Connectivity 正常,Terminal、历史 thread、MCP 或插件警告不一定阻塞模型请求。
不要在脚本中仅用
doctor 的退出码判断 Gateway 是否配置成功。最终还应执行第 8 节的只读 codex exec:只有当 provider/model 正确、得到最终文本且退出码为 0,才能确认基础模型链路成功。
15.16 修改配置后需要恢复
先查看可用备份:
选择修改前生成的备份,并替换下面的占位文本:
然后重新加载 API Key,并再次执行:
恢复时不要删除整个
~/.codex 目录,否则可能同时丢失登录状态、历史会话、插件、MCP 和项目配置。
16. API Key 和配置安全
16.1 需要保护的文件
常见敏感文件:
即使
config.toml 没有明文 Token,它也会暴露 Base URL、provider、MCP 和本机目录信息。
16.2 限制文件权限
执行:
16.3 不要做这些操作
- 不要上传完整
目录;~/.codex - 不要把
发给客服;auth.json - 不要在公开录屏中执行
;echo "$CLICKZETTA_API_KEY" - 不要把真实 Token 写进文档示例;
- 不要把 API Key 提交到 Git;
- 不要让多人共用同一个 Token;
- Token 泄露后不要只删除截图,应立即撤销并重建。
16.4 测试结束后清理临时变量
如果本次只做临时测试:
清理后,新的 Codex 进程将无法通过
env_key 获取 Token,直到重新设置环境变量。
16.5 对外发送错误信息前脱敏
可以发送:
- 时间;
- 模型 ID;
- HTTP 状态;
- request ID;
- 协议路径;
- 已脱敏错误 JSON。
必须删除:
- API Key;
- Authorization 头;
;x-api-key- 本机私密文件内容;
- 不应公开的租户和个人信息。
17. 联系 AI Gateway 支持团队
17.1 联系前先完成这三项自查
不要只发送一张 Codex 报错截图。先完成以下检查,能显著缩短定位时间:
- 使用第 4 节确认 Base URL、API Key 和完整模型 ID;
- 使用第 5 节的标准
curl 复现问题;/responses - 使用第 8 节的只读
对比 curl 和 Codex 的结果。codex exec
若目标是 Claude 或其他只提供 Anthropic Messages 的模型,还应先阅读第 11 节,确认是否已有可用的 Responses 兼容层。Codex 仍然只能向该兼容层发送
/responses 请求。
17.2 提交问题时需要提供什么
请提供以下脱敏信息:
不要提供:
17.3 支持团队可以协助确认什么
AI Gateway 支持团队可以协助确认:
- API Key 是否有目标模型和协议权限;
- 指定端点是否存在对应上游路由;
- 模型 ID 是否需要完整前缀;
- 网关是否返回 400、401、403、429 或 5xx;
- 是否存在已知的参数和推理预算限制。
Codex CLI 的版本行为、本机网络、沙箱策略、第三方转换层以及模型高级能力,需要在你的实际环境中分别验证。
18. 完成检查清单
18.1 配置完成后可以实际使用什么
当第 18.2 节全部勾选后,你可以在自己的项目目录中使用:
进入交互式编码会话,也可以使用:
执行非交互任务。
在不超过当前沙箱和审批范围的前提下,Codex 可以:
- 读取项目文件并理解代码结构;
- 根据用户指令生成修改;
- 在允许的工作区中写入文件;
- 运行被允许的本地命令;
- 输出修改结果、测试结果和错误信息;
- 使用
或--model
切换到其他已支持模型。/model
配置成功不代表所有模型和高级能力自动可用。是否能够使用 Claude、DeepSeek 或其他厂商模型,取决于它们是否有 Responses 路由;Web Search、MCP、工具调用、图片、文件、缓存和长上下文也需要按实际场景单独验证。
18.2 最终成功清单
确认 Codex CLI 接入完成前逐项检查:
全部勾选后,即可确认 Codex CLI 已完成基础文本接入。文件修改、工具调用和其他高级能力仍按实际需求单独验收。
如果只有
/models 成功,不能视为模型可用;如果 curl 成功但 Codex 失败,应重点检查配置位置、推理档位、流式响应、模型元数据和 provider 实际路径。
19. 相关资料
需要查阅配置细节时,请以以下官方 OpenAI 文档为准:
- Codex CLI
- Codex Authentication
- Codex Config Basics
- Codex Advanced Configuration
- Codex Configuration Reference
- Codex CLI Reference
官方文档确认的关键限制:
- 用户级配置位于
;~/.codex/config.toml - 自定义 provider 可以设置 Base URL、认证来源和额外请求头;
- 自定义 provider 的
当前仅支持wire_api
;responses - 项目级配置不能覆盖机器级 provider 和认证设置;
- reasoning effort 是否可用取决于模型;
- 自定义 provider 的 Web Search 和 WebSocket 能力默认不启用;
- API Key 登录与 ChatGPT 登录的功能范围不同。
本文中的模型名称仅用于说明模型 ID 和协议判断方法。实际配置应以你的 API Key、AI Gateway 提供的模型目录、目标端点和 Codex CLI 版本为准。
