限时 · 同款 GPT 节省 93%、Claude 节省 80%
博客
指南

Codex 调用 GPT-5.6 失败?

先判断故障出在模型权限、API,还是 Codex。

11 分钟阅读OmniaKey
GPT-5.6 SolGPT-5.6 TerraGPT-5.6 LunaCodex

Codex 调用 GPT-5.6 失败时,一条报错往往不足以判断该改哪里:可能是 API Key 无权访问该模型,可能是 /v1 路径错误,也可能是直接 Responses 请求正常,只有 Codex 附加的 metadata 被 provider 拒绝。反复运行同一条命令,通常只能复现现象,无法判断故障出在哪一层。

这套免费工具会逐层验证这些可能性:先核对精确的模型 ID,再检查基础 Responses 输出、SSE 中与预设内容完全一致的文本标记和最终的 response.completed 事件,以及指定函数名和完全匹配的 JSON 参数;最后用临时配置在空目录中运行 Codex,并生成一份脱敏 JSON 报告。直接检查只发送固定标记;Codex 冒烟测试不会修改现有配置,也不会把兼容性检查当作模型基准测试。

事实核验日期:2026 年 7 月 23 日。 下文的模型信息与 Codex 配置均按当天最新的 OpenAI 文档核验。工具包会报告你此刻的真实运行结果;本文不假设任何 provider 或 CLI 版本会永远保持兼容。

这套工具究竟能验证什么

所有检查都刻意按层拆开:

  1. GET /v1/models 确认当前 Key 能否看到每一个准确的模型 ID。
  2. 最小化的非流式 Responses 请求验证基础生成,并核对响应返回的模型 ID。
  3. SSE 检查要求文本标记完全匹配,并且必须收到最终的 response.completed 事件。
  4. 严格的函数调用检查要求调用指定名称的函数,并给出完全匹配的 JSON 参数。
  5. 在隔离环境中运行 codex exec,通过同一个 provider 检查本机已安装的 Codex CLI。

上一层通过,不代表下一层必然通过。分层本身才是这套工具的价值:如果直接 API 检查全部正常,只有 codex_cli_smoke 失败,那么更换 API Key 或模型 ID 多半解决不了真正的问题。

v1.0.0

下载兼容性排障工具包

内含 Node.js 检查器、Bash 与 PowerShell 启动脚本、报告结构定义、运行说明和 SHA-256 校验值。无需注册即可下载。

不改现有配置,直接运行

check.mjs 和当前 shell 对应的启动脚本放在同一个目录。Bash 或 Zsh 用户可以静默读取 Key,避免把 Key 明文写进 Shell 历史:

bash
chmod +x run.sh
printf 'OmniaKey API key: ' >&2
IFS= read -r -s OMNIAKEY_API_KEY
printf '\n' >&2
export OMNIAKEY_API_KEY
./run.sh
unset OMNIAKEY_API_KEY

Windows PowerShell 用户执行:

powershell
$secureKey = Read-Host 'OmniaKey API key' -AsSecureString
$env:OMNIAKEY_API_KEY = [System.Net.NetworkCredential]::new('', $secureKey).Password
.\run.ps1
Remove-Item Env:OMNIAKEY_API_KEY
$secureKey = $null

默认模式会先检查 Sol、Terra、Luna 的基础 Responses 输出,再只用 Sol 检查流式响应、函数调用能否正确生成,以及 Codex 端到端链路。安装了 Codex 时,整个过程包含五次固定的直接生成和一次隔离的 Codex 回合。工具包本身免费,但这些 API 调用仍可能产生费用。

加上 --full,即可在三个模型上重复所有深度检查,共九次直接生成和三次 Codex 回合。直接 API 请求的重试次数,以及 Codex provider 的两项重试上限都明确设为零;工具也不会刻意制造 429。如果模型无视固定的禁用工具指令并进入工具循环,一次 Codex 回合仍可能再次请求模型,报告会将该项检查标记为失败:

bash
./run.sh --full

只检查单个模型、同时跳过 Codex:

bash
./run.sh --model gpt-5.6-terra --skip-codex

API Key 只允许通过环境变量传入,绝不会作为命令行参数出现。上面的静默输入命令可以避免把 Key 明文写进 Shell 历史;但与其他进程环境变量一样,在变量仍然有效时,拥有足够权限的本地进程仍可能读取它。写入报告前,脚本会从 provider 可控的每个字符串字段中清除完整 Key,以及常见的 Bearersk-... 形式。

报告会记录哪些信息

每份报告都会写入工具包版本、UTC 时间戳、endpoint origin 与 base path、操作系统、架构、Node 与 Codex 版本、所选模型、两项超时时间,以及明确设为零的重试上限。根据检查层级与结果,适用的字段包括:

  • 请求的模型 ID 与响应中报告的模型 ID;
  • pass、fail 或 skip 状态;
  • HTTP 状态码,以及白名单内携带 request ID 和 rate limit 信息的响应头;
  • endpoint 返回时的 response ID 与 token usage;
  • 耗时,以及未满足的具体契约条件或跳过原因;
  • 不含 API Key 和原始响应正文的标准化错误类别。

在 POSIX 系统中,输出文件创建时只授予文件所有者访问权限。Request ID 并不是凭证,但分享报告前仍应人工检查,因为 provider 可以借助它追踪具体请求。

退出码 0 表示所有实际执行的检查均已通过;1 表示至少一项实际执行的检查失败;2 表示参数、API Key 环境变量、URL 或其他前置条件无效。未安装 Codex 会记为 skip,不会伪装成 API 故障。

已核验的 GPT-5.6 事实

OpenAI 目前记录了以下准确的 API ID 与定位:

模型官方定位适合从这里开始
gpt-5.6-sol面向复杂专业工作的前沿模型需要深入分析与完善交付的模糊、高难度或高价值任务
gpt-5.6-terra智能与成本之间的平衡不需要 Sol 全部推理深度的日常编程与工具调用
gpt-5.6-luna对成本敏感的大批量任务目标明确、可重复的抽取、分类与转换

别名 gpt-5.6 当前会路由到 gpt-5.6-sol。排障时应使用明确 ID:别名会额外引入一个路由变量,而兼容性检查不需要这个变量。

三个模型当前的官方页面都列出了 1,050,000 token 的 API 上下文窗口、最大 922,000 token 输入、最大 128,000 token 输出,以及 2026-02-16 的知识截止日期;同时列明支持 Responses、Chat Completions、Batch、流式响应、结构化输出和函数调用。原始资料见 SolTerraLuna 的模型页面。

这些是 API 模型限制,并不承诺每种 Codex 客户端配置都能开放完整窗口。Codex 还有自己的模型目录、model_context_window 和自动压缩(compaction)机制。这套工具不会发送百万 token 的 prompt,也不会根据 API 页面上的最大值推断 Codex 的实际可用窗口。

最小 Codex provider 配置

当前 Codex 使用用户级 ~/.codex/config.toml 配置自定义 provider。最新配置参考把 responses 列为唯一受支持的 wire_api 值。OmniaKey 的最小示例如下:

toml
model = "gpt-5.6-sol"
model_provider = "omniakey"

[model_providers.omniakey]
name = "OmniaKey"
base_url = "https://api.omniakey.com/v1"
env_key = "OMNIAKEY_API_KEY"
wire_api = "responses"

env_keyrequires_openai_auth 是两种备选鉴权方式。Codex 当前的鉴权文档明确说明,设置 requires_openai_auth = true 后会忽略 env_key;不要把它加入这个 provider 配置块。

编辑真实配置前,先做好备份:

bash
cp ~/.codex/config.toml ~/.codex/config.toml.before-gpt56

对应的 PowerShell 命令:

powershell
Copy-Item "$HOME\.codex\config.toml" "$HOME\.codex\config.toml.before-gpt56"

兼容性检查器不要求你编辑这个文件,也不会使用其中的 provider 设置。Codex 冒烟测试会忽略用户配置,创建临时 CODEX_HOME,只向该进程传入 provider 设置,使用空工作目录和只读 sandbox,结束后再删除临时目录。该进程只会收到 Key,以及允许列表中的运行时、区域设置、临时目录、代理和 TLS 相关环境变量;报告只记录变量名,绝不记录变量值。

只读 sandbox 能禁止写入,但无法阻止所有可能的读取。检查器会验证固定 prompt 中的“禁用工具”要求,但这并不是严格的安全边界。如果机器上存在绝不能让 Codex 进程读取的文件,请加上 --skip-codex,或者在隔离的容器或虚拟机中运行工具包。

永久修改前,请先阅读 Codex 配置参考OmniaKey 编程智能体指南

按故障层级判断,不要靠猜

结果能确定什么下一步
/models 返回 401endpoint 拒绝了凭证创建或选择正确的 Key;绝不要把它贴进报告或 issue
/models 通过,但缺少某个 ID当前 Key 暂时不能选择这个模型先解决模型权限,再改 Codex
直接 Responses 返回 400endpoint 收到了请求,但拒绝了请求结构或某个参数查看 error.paramerror.code 和脱敏后的消息
直接 Responses 返回 404找不到 base path 或模型 ID确认 /v1,并核对完全准确的小写模型 ID
直接检查通过,但 Codex 失败凭证、路由和基础 API 均可用排查 Codex 版本与自定义 provider metadata
429真实调用触发了已分配的 request 或 token 限额遵循 retry-after 或 reset headers;等待指定时间后手动重试
5xxprovider 处理请求时失败保留 request ID,短暂等待后只重试一次;若反复失败再升级处理

不要把 401 和 403 混成同一种故障。401 通常指向身份验证;403 则可能表示身份有效、但没有相应权限。同样,404 既可能是 /v1 base path 错了,也可能是路径正确、模型却不可用。

OpenAI 的错误指南建议:bad request 先检查请求结构,遇到 rate limit 要控制调用节奏,服务器错误则短暂重试。这套工具刻意把重试权留给你,确保第一次失败不会被覆盖。

当前自定义 provider 的一个陷阱

Codex 的两个未关闭 issue #31870#31882 记录了 Codex 0.144.x 通过 Azure/自定义 provider 使用 GPT-5.6 时的故障。在这些案例中,直接 Responses 请求可以成功,但 Codex 请求返回 400,并提到 X-OpenAI-Internal-Codex-Responses-Lite 或保留的 collaboration namespace。

这些是实际用户报告,不能证明每个自定义 provider 都会失败。也正因为如此,工具包才会把直接 API 与 Codex 两层分开执行。

如果你的报告也出现这种分层结果:

  1. 记录 codex_version、准确的错误类别和 request ID。
  2. 升级到最新稳定版 Codex,再用同一个工具包版本复测。
  3. 检查这两个 issue 是否仍未关闭,以及维护者是否已经发布修复。
  4. 如果问题继续存在,把脱敏报告发送给你的 provider 或 Codex 支持团队。

Issue #31882 描述了一项覆盖整个模型目录的配置,用于禁用 Responses-Lite 与 multi-agent metadata。这种办法很脆弱:该配置会替换目录 metadata,升级后可能发生漂移,也可能关闭你依赖的行为。工具包 1.0.0 版会识别已报告的故障特征,但有意不修改 Codex,也不会建议悄悄 downgrade。

这套工具不会测什么

它是兼容性探针,不是模型质量基准测试。它不会比较编程准确率、长上下文表现、缓存命中率、生产环境延迟、SSE 是否按预期逐步刷新及其时序、实际计费价格、图像输入、托管工具、多智能体协作,或完整的函数调用续接循环。绿色报告只说明:在报告记录的版本与 endpoint 上,受测契约曾经成功执行一次。它无法预测所有工作负载,也不提供进程级文件系统隔离。

为了保证可复现,请保留生成的报告和当时使用的完整工具包文件;用 SHA256SUMS 校验下载内容,在 Codex 或 provider 发生变化后重新运行,并逐项比较检查结果,不要只看最终状态。

核验来源