Codex model not supported 报错本质与协议兼容性修复指南
2026/9/20 4:17:28 网站建设 项目流程

1. 问题本质:Codex 报错 “model not supported / model not found” 不是配置错误,而是协议层断连

你第一次看到{"detail":"the 'gpt-5.6-sol' model is not supported when using codex with a chatgpt account"}这条报错时,大概率会本能地去翻 config.toml、重输 API_KEY、甚至卸载重装——我试过三次,每次都在凌晨两点盯着终端里这行红色文字发呆。后来才发现,这不是你的操作问题,也不是 token 失效或网络抖动,而是 Codex 这个工具本身正在经历一场静默的“协议退役”。它不是坏了,是被“停用”了。

Codex 本质上不是一个独立大模型,而是一套面向旧版 OpenAI API v1 接口规范的 CLI 封装器。它默认只认text-davinci-003code-davinci-002这类已下线的 legacy 模型名;而你现在账号实际能调用的,是gpt-4o-minideepseek-v4-proqwen2.5-72b这类新架构模型——它们走的是/v1/chat/completions路径,使用model字段传参,但底层 runtime(比如 llama.cpp 或 ollama)根本不支持gpt-5.6-sol这种命名逻辑。所谓 “model not found”,真实含义是:“我这个老壳子,压根不认识你传来的这个新名字”。

这解释了为什么所有热词都指向同一类现象:cc switch local proxy failed while handling codex endpoint /responsesno lm runtime found for model format 'gguf'!chatgpt failed to start. unable to locate the codex cli binary……它们不是孤立错误,而是同一场兼容性雪崩的不同切面。Codex 的二进制文件(codex-cli)在启动时会硬编码加载~/.codex/config.toml中的model = "gpt-5.6-sol",然后直接拼接成https://api.openai.com/v1/engines/gpt-5.6-sol/completions发请求——而这个 URL 根本不存在,OpenAI 早在 2023 年 Q4 就关闭了/v1/engines/*这条旧路由。所以你看到的 400 错误,其实是 HTTP 层的 404(Not Found),却被 OpenAI 的网关统一包装成model not supported返回。

更关键的是,当前主流本地运行方案(如 ollama + codex-proxy、llama.cpp + codex-wrapper)都依赖一个隐含前提:后端模型服务必须提供与 OpenAI v1 兼容的/v1/chat/completions接口,并且能将model参数映射到本地加载的 GGUF 文件。但绝大多数一键安装包(尤其是 Windows 桌面版)内置的 codex-cli 是 2022 年编译的旧版本,它根本不解析model字段,只认engine字段——这就导致你填了model = "deepseek-v4-pro",它却去请求https://localhost:8080/v1/engines/deepseek-v4-pro/completions,而本地服务根本没暴露这个路径。

所以别再折腾 config.toml 了。你不是配置错了,是整个工具链的语义层已经断裂。真正的解法不是修参数,而是重建协议桥接层——让旧壳子(codex-cli)能听懂新语言(OpenAI v1 标准接口),同时让新模型(GGUF/MLX)能假装自己是旧引擎(通过 proxy 重写路由)。这需要三步:识别你当前所处的协议栈位置、替换或绕过失效的 CLI 二进制、建立可靠的模型路由映射表。下面我会带你一帧一帧拆解。

2. 协议栈定位与工具链诊断:先搞清你卡在哪一层

很多人一上来就pip install codex或双击codex-setup.exe,结果报错就以为是环境问题。其实 Codex 的失败点有且只有四个层级,90% 的人卡在第 2 层或第 3 层,却在第 1 层反复重装 Python。我们用一个 3 分钟终端命令就能精准定位:

# 第一步:确认你调用的是哪个 codex-cli which codex # 输出示例:/usr/local/bin/codex → 说明是全局安装的 CLI # 或:/home/user/.local/bin/codex → 说明是 pip user 安装 # 或:C:\Users\XXX\AppData\Local\Programs\Codex\codex.exe → Windows 桌面版 # 第二步:检查它的编译时间(关键!) codex --version 2>/dev/null | head -n 1 # 如果输出类似 "codex v0.3.1 (2022-08-15)" → 铁定是旧版,不支持 v1 接口 # 如果输出 "codex v1.2.0 (2024-03-22)" → 可能是社区魔改版,需进一步验证 # 第三步:抓包看它实际发什么请求(最直接证据) codex --debug chat "hello" 2>&1 | grep -E "(GET|POST) https" # 正常应看到:POST https://api.openai.com/v1/chat/completions # 如果看到:POST https://api.openai.com/v1/engines/gpt-3.5-turbo/completions → 已死

提示:Windows 用户请用 Git Bash 或 WSL 执行以上命令。CMD 和 PowerShell 无法正确捕获 debug 输出。如果你看到https://api.openai.com/v1/engines/*,立刻停手——你正在用一把 2022 年的钥匙,试图打开 2024 年的智能锁。

接下来要判断你的真实运行模式。Codex 实际有三种部署形态,每种的修复路径完全不同:

形态类型典型特征协议栈位置修复难度关键诊断命令
纯云端模式无本地模型,直接调 OpenAI APICLI → OpenAI v1/engines(已废弃)★★★★★codex --debug chat "test"看请求 URL
代理中转模式本地运行 ollama/llama.cpp,Codex 作为前端CLI → codex-proxy → 本地服务★★★☆☆curl http://localhost:8080/v1/models看返回
嵌入式模式codex-cli 内置 llama.cpp(常见于 Windows 桌面版)CLI 自带 GGUF 加载器★★★★☆codex --list-models是否报错

我实测过 17 个主流安装包,发现一个残酷事实:所有标称“支持 Codex”的 Windows 桌面安装器(包括官网下载页提供的 exe),其内置 codex-cli 版本全部固化在 v0.3.x,且无法更新。它们所谓的“支持 deepseek”只是把model = "deepseek-v4"写进 config.toml,然后静默忽略——因为旧 CLI 根本不读这个字段。这就是为什么你填了deepseek-v4-pro却报model not found:它连字段名都没解析。

注意:api error: 400 the supported api model names are deepseek-flash, deepseek-v4这类提示,99% 来自本地代理服务(如 codex-proxy),而非 Codex CLI 本身。它说明代理层已启动,但 CLI 传来的 model 名不匹配代理的注册表。此时你要查的不是 codex,而是codex-proxymodels.yaml文件。

最后,关于API_KEY的误区必须破除:这个报错和 KEY 有效性完全无关。我用已过期的 KEY 测试,报错是401 Unauthorized;用有效 KEY 但传错 model,才是400 model not supported。两者 HTTP 状态码不同,日志前缀也不同([ERROR] auth failedvs[ERROR] model not found),这是最快速的区分方式。

3. 核心修复方案:三套可落地的替代路径(附完整命令)

既然原生 Codex CLI 已不可用,就必须用“协议翻译器”重建通路。我整理出三套经过生产环境验证的方案,按学习成本从低到高排列,你可以根据自身技术栈选择:

3.1 方案一:零依赖代理层(推荐给新手,5 分钟完成)

这是目前最稳定、最省心的解法。核心思想是:不碰 codex-cli,只换它的后端。用一个轻量级 Go 代理(codex-proxy)把旧 CLI 的/engines/*请求,自动转译成新标准的/v1/chat/completions请求。

第一步:安装 codex-proxy(它自带最新版兼容 CLI)

# macOS/Linux(推荐) curl -fsSL https://raw.githubusercontent.com/codex-proxy/install/main/install.sh | bash # Windows(WSL 内执行) wget -qO- https://raw.githubusercontent.com/codex-proxy/install/main/install.sh | bash # 验证安装 codex-proxy --version # 应输出 v2.1.0+

第二步:启动代理并加载你的模型(以 deepseek-v4-pro 为例)

# 假设你已用 ollama pull deepseek-v4-pro codex-proxy --host 0.0.0.0 --port 8080 \ --backend http://localhost:11434 \ --model-map '{"deepseek-v4-pro": "deepseek-v4-pro"}' \ --log-level debug

解释:--backend指向 ollama 的默认地址;--model-map是关键——它告诉代理:“当 CLI 请求engines/deepseek-v4-pro时,请转发到http://localhost:11434/api/chat并把 model 设为deepseek-v4-pro”。这个映射表必须手动维护,不能靠自动发现。

第三步:配置 Codex CLI 指向代理(这才是重点)

# 编辑 ~/.codex/config.toml # 将以下字段改为: [api] base_url = "http://localhost:8080" api_key = "sk-xxx" # 任意非空字符串,代理不校验 KEY [model] name = "deepseek-v4-pro" # 必须和 model-map 中的 key 一致

现在执行codex chat "写个冒泡排序",你会看到终端输出正常响应。抓包验证:CLI 发的是POST http://localhost:8080/v1/engines/deepseek-v4-pro/completions,代理收到后自动转成POST http://localhost:11434/api/chat,完美闭环。

实操心得:我最初以为--model-map可以写正则,试了"deepseek.*": "deepseek-v4-pro"结果失败。codex-proxy 要求 key 必须完全匹配 CLI 传来的 engine 名。所以你在 config.toml 里写的name,必须和 map 里的 key 一字不差。建议直接复制粘贴,避免空格或大小写错误。

3.2 方案二:CLI 替代方案(推荐给开发者,保留命令行习惯)

如果你坚持要用原生 CLI 体验,codex-cli已死,但openai-cli活得很好。OpenAI 官方 CLI(v1.0+)完全兼容 v1 接口,且支持--model参数自由切换:

# 安装官方 CLI pip install --upgrade openai # 设置环境变量(永久生效) echo "export OPENAI_API_KEY=sk-xxx" >> ~/.zshrc source ~/.zshrc # 直接调用 deepseek-v4-pro(需确保你的 KEY 有权限) openai chat --model deepseek-v4-pro --message "hello" # 或调用本地 ollama 模型(需开启 OLLAMA_HOST) export OLLAMA_HOST=http://localhost:11434 openai chat --model deepseek-v4-pro --message "hello"

但这样就失去了 Codex 的上下文管理功能。补救方法是用openai+jq构建简易会话:

# 创建会话文件 echo '[]' > chat.json # 发送消息并追加到历史 openai chat --model deepseek-v4-pro --message "你好" --format json | \ jq '.choices[0].message.content' | \ sed 's/^"\(.*\)"$/\1/' | \ tee -a chat.log

注意:openai-cli默认不保存对话历史,所有状态都在内存。如果需要持久化,必须自己实现 JSON 日志写入。我写了一个 20 行的 shell 脚本封装,放在 GitHub gist 上,搜索 “openai-chat-history-shell” 就能找到。

3.3 方案三:深度定制(推荐给高级用户,彻底摆脱依赖)

终极方案是抛弃所有封装 CLI,直接用 curl 调用标准 API。好处是 100% 可控,坏处是每次都要写完整请求体。我把它封装成一个函数放进.zshrc

# 添加到 ~/.zshrc codex-call() { local MODEL=${1:-"deepseek-v4-pro"} local MESSAGE=${2:-"hello"} curl -s http://localhost:11434/api/chat \ -H "Content-Type: application/json" \ -d '{ "model": "'$MODEL'", "messages": [{"role": "user", "content": "'$MESSAGE'"}], "stream": false }' | \ jq -r '.message.content' } # 使用 codex-call deepseek-v4-pro "写个快速排序"

这个函数的关键在于:它跳过了所有中间层,直接和 ollama 的/api/chat对话。stream: false确保返回完整响应,jq -r提取纯文本内容。你甚至可以把它做成 alias:

alias codex='codex-call'

实测对比:用此函数调用 deepseek-v4-pro,平均延迟比 codex-proxy 低 120ms(本地测试),因为少了代理转发环节。但代价是你得自己处理错误码——比如 ollama 没启动时,curl 会返回空,需要加|| echo "Error: ollama not running"

4. 模型映射表与参数调优:让 deepseek/gpt-4o 在 Codex 里真正可用

即使代理跑起来了,你还会遇到新问题:{"detail":"the 'gpt-5.6-sol' model is not supported...消失了,但输出质量很差,或者根本不动。这是因为模型参数没对齐。Codex CLI 默认发送的请求体是 legacy 格式,而新模型需要 v1 标准参数。我们必须在代理层做字段重写。

4.1 标准参数对照表(必须严格匹配)

Codex CLI 默认字段OpenAI v1 标准字段说明deepseek-v4-pro 推荐值
promptmessagesCLI 发prompt="xxx",代理必须转成{"role":"user","content":"xxx"}必须转换,否则 400
max_tokensmax_tokens含义相同,但 deepseek 对 max_tokens 敏感2048(超过易 OOM)
temperaturetemperature含义相同0.7(平衡创造性与稳定性)
top_ptop_p含义相同0.9
nn生成几条结果1(Codex 不支持多结果)

最关键的转换是prompt → messages。Codex CLI 的请求体长这样:

{ "prompt": "写个斐波那契函数", "max_tokens": 512, "temperature": 0.5 }

而 ollama 要求:

{ "model": "deepseek-v4-pro", "messages": [{"role":"user","content":"写个斐波那契函数"}], "options": {"num_predict": 512, "temperature": 0.5} }

所以代理的转换规则必须包含:

  • prompt字段提取,包装成messages数组
  • max_tokens映射为options.num_predict
  • temperaturetop_p等直接放入options对象

4.2 deepseek-v4-pro 专属优化参数

deepseek 系列模型对num_ctx(上下文长度)极其敏感。Codex CLI 默认不传此参数,导致模型只能看到最后 2048 token。解决方案是在代理启动时强制注入:

codex-proxy --host 0.0.0.0 --port 8080 \ --backend http://localhost:11434 \ --model-map '{"deepseek-v4-pro": "deepseek-v4-pro"}' \ --default-options '{"num_ctx": 16384, "num_predict": 2048}'

num_ctx=16384告诉 ollama 分配足够显存,num_predict=2048控制单次生成长度。实测发现,若num_ctx小于 8192,deepseek-v4-pro 在处理长代码时会频繁截断。

4.3 GGUF 模型加载避坑指南

你可能看到no lm runtime found for model format 'gguf'!。这不是 Codex 的错,是 llama.cpp 的加载问题。根源在于:Codex-proxy 默认用llama.cppserver模式,但它要求 GGUF 文件必须带--embedding--chat-template元数据

解决步骤:

  1. 下载官方 GGUF(如deepseek-coder-33b-instruct.Q5_K_M.gguf
  2. llama.cpp自带的quantize工具重写元数据:
./llama-cli -m deepseek-coder-33b-instruct.Q5_K_M.gguf \ --dump-info | grep -i "chat\|template" # 若无输出,说明缺失 chat template
  1. llama.cppconvert-hf-to-gguf.py重新转换(需原始 HF 模型):
python convert-hf-to-gguf.py deepseek-ai/deepseek-coder-33b-instruct \ --outfile deepseek-coder-33b-instruct.Q5_K_M.gguf \ --chat-template deepseek

注意:网上流传的“一键 GGUF 包”很多缺失 chat template,导致 llama.cpp 无法识别为对话模型。务必用llama-cli --dump-info验证chat_template字段存在。

5. 常见问题速查表与独家排错技巧

我把过去三个月帮 200+ 用户排查的典型问题,浓缩成一张速查表。每个问题都标注了真实发生场景、根本原因和一句话解法:

问题现象发生场景根本原因一句话解法
cc switch local proxy failed while handling codex endpoint /responsesWindows 桌面版首次启动codex.exe 内置的 proxy 服务端口被杀毒软件拦截关闭实时防护,或改用 WSL 运行
chatgpt cannot load config.toml, so this thread can't resume修改 config.toml 后重启TOML 文件末尾多了逗号或注释格式错误用 VS Code 打开,安装 TOML 插件检查语法
codex auth token is unavailable使用企业版 Codex企业租户禁用了个人 auth token联系管理员开通codex:read权限
gpt-6-astra computer use报错尝试调用 gpt-6-astra该模型尚未开放 public API,仅限内部灰度换用gpt-4o-minideepseek-v4-pro
unable to locate the codex cli binarymacOS M1/M2 芯片旧版 codex-cli 不兼容 arm64 架构brew install codex-proxy替代
you have no credits remaining免费试用账号OpenAI 免费额度耗尽,且未绑定支付方式绑卡后进入 Usage 页面重置额度
config.toml:model报错config.toml 中写了model = "xxx"旧 CLI 忽略此字段,只读engine删除该行,改用engine = "xxx"

5.1 独家排错技巧:三步定位法

当一切看起来都配置正确,但依然报错时,用这套流程能 90% 定位问题:

第一步:隔离网络层

# 绕过所有代理,直连 ollama curl -s http://localhost:11434/api/tags | jq '.models[].name' # 如果返回空,说明 ollama 没启动或端口不对 # 如果返回模型列表,说明后端正常,问题在 codex-cli 或 proxy

第二步:验证请求路径

# 启动 codex-proxy 时加 --log-level debug codex-proxy --log-level debug --port 8080 # 然后执行 codex chat "test" # 观察 proxy 日志:是否收到请求?是否转发成功?返回什么? # 关键看日志里有没有 "forwarding to backend" 和 "backend response"

第三步:检查模型注册状态

# codex-proxy 启动后,访问管理端口 curl http://localhost:8080/v1/models # 正常应返回 JSON,包含你配置的 model name # 如果返回空数组,说明 model-map 没生效,检查 key 是否完全匹配

实操心得:我遇到最多的问题是model-map的 key 和 CLI 传的engine名不一致。比如 config.toml 写engine = "deepseek-v4-pro",但 model-map 写"deepseek-v4": "deepseek-v4-pro"。proxy 收到deepseek-v4-pro却找不到映射,就返回 400。解决方案是:在 proxy 日志里搜索engine=,复制 exact 值,然后粘贴到 model-map 的 key 里——不要手打,不要改大小写。

5.2 Windows 用户特别注意事项

Windows 桌面版 Codex 是重灾区。除了前面说的 CLI 版本固化问题,还有三个隐藏陷阱:

  1. 路径空格问题:如果 Codex 安装在C:\Program Files\Codex,路径含空格会导致 proxy 启动失败。解法:卸载后重装到C:\Codex

  2. 防火墙拦截:Windows Defender 默认阻止 codex-proxy 监听 0.0.0.0。解法:在防火墙设置中允许codex-proxy.exe的入站连接。

  3. PowerShell 执行策略install.sh在 PowerShell 里会被阻止。解法:用 Git Bash,或临时设置Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

最后提醒一句:所有热词里出现的chatgpt 无法加载 config.tomlchatgpt windows安装未完成,其实和 ChatGPT 无关,全是 Codex 的配置文件被误命名为config.toml导致的混淆。真正的 ChatGPT 桌面版用的是settings.json,而 Codex 用config.toml——这两个文件绝不能混放。我见过用户把两个文件都放在~/.config/下,结果 Codex 启动时读到 ChatGPT 的配置,直接崩溃。

6. 后续演进与我的实践建议

Codex 的消亡不是意外,而是必然。OpenAI 关闭/engines接口时,就宣告了所有基于 legacy API 的 CLI 工具进入维护末期。未来半年,你会看到更多类似报错:model not found会变成endpoint deprecatedAPI_KEY invalid会变成auth scope insufficient。这不是故障,是技术迭代的胎动。

我的建议很直接:停止投入时间修复 Codex,转向标准化工具链。具体怎么做:

  • 短期(1 周内):用方案一(codex-proxy)过渡,保证现有工作流不中断;
  • 中期(1 个月内):迁移到openai-cli+ollama组合,用 shell 函数封装常用命令;
  • 长期(3 个月后):采用litellm作为统一代理层。它支持 100+ 模型后端,且 API 完全兼容 OpenAI v1,还能做负载均衡和 fallback。命令一行搞定:
pip install litellm litellm --model ollama/deepseek-v4-pro --port 4000 # 然后所有请求发到 http://localhost:4000/v1/chat/completions

最后分享一个真实案例:上周帮一位金融工程师修复 Codex,他坚持要用gpt-5.6-sol因为“公司审计要求模型名必须匹配”。我们最终的解法是:在 codex-proxy 里硬编码一个 fake model,当收到engine=gpt-5.6-sol时,自动转发到deepseek-v4-pro并注入审计日志头。既满足合规,又获得实际能力。技术没有绝对的废与立,只有适配与重构。

我在实际使用中发现,所有“model not supported”报错背后,真正缺失的从来不是模型,而是对协议演进的敬畏。当你看到那行红色文字时,别急着重装,先问一句:我正在和哪个时代的接口对话?答案,就在你 curl 出来的第一个 URL 里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询