Codex Desktop 无法识别自定义模型的 5 种解决方法(2026 最新)

简介: 你接好了一个自定义 provider,codex 在终端里跑得好好的,但桌面版的模型选择器却像你的模型根本不存在一样。 这种落差几乎从来不是你的 API 密钥或配置语法出了问题,而是桌面版客户端悄悄过滤掉了后端已经加载好的模型。

你接好了一个自定义 provider,codex 在终端里跑得好好的,但桌面版的模型选择器却像你的模型根本不存在一样。 这种落差几乎从来不是你的 API 密钥或配置语法出了问题,而是桌面版客户端悄悄过滤掉了后端已经加载好的模型。

30 秒快速诊断

在重写任何东西之前,先把你的症状对照下表。大多数人离修复只差一行。

你看到的现象 实际的问题 第一步动作
选择器只显示 “Custom”,没有模型名 模型是内联设置的,没有目录元数据 修复 1:保留内联的 model,它能用
codex CLI 的 /model 列出了它,但桌面版没有 桌面版客户端过滤(issue #19694) 先用修复 1,要真正列出用修复 4
选择器下拉列表是空的 目录缺失或格式错误 修复 2 或修复 4
什么都加载不出来,启动时打印警告 provider 放在项目级 .codex/config.toml 修复 3:移到 ~/.codex/
cc-switch 原生 provider,仍然被隐藏 早于 v3.16.5 的目录格式 修复 4:更新后重新保存

最快的一步检查:在同一个文件夹里打开终端运行 codex(CLI),然后输入 /model。如果 CLI 列出了你的模型而桌面版没有,那就是命中了客户端过滤缺陷,在桌面版这边怎么改配置都不会让它显示出来。直接跳到修复 1。

flowchart TD
 A[Custom model missing in Desktop] --> B{Does CLI /model show it?}
 B -- Yes --> C[Desktop filter bug #19694]
 C --> F1[Fix 1: set model inline + Fix 4 catalog]
 B -- No --> D{Provider in ~/.codex/config.toml?}
 D -- No, it is project-local --> F3[Fix 3: move to user-level]
 D -- Yes --> E{Catalog file present + valid?}
 E -- No --> F2[Fix 2 or Fix 4: generate catalog]
 E -- Yes --> F1

什么时候该用这些修复(什么时候该直接换模型)

当模型能跑但选择器就是不显示时,改配置。这是一个显示问题,值得花十分钟,因为其他一切其实都已经正常了。具体来说,就是你的请求在 CLI 或直接 curl 时都能成功,只是模型不出现在桌面版下拉列表里。这种情况你面对的是 #19694 过滤或目录缺口,修复 1 到修复 4 都适用。

当路由本身就断了时,直接换模型而不是改配置。如果 curl https://your-gateway/v1/responses 返回 401、404 或 model-not-found,那问题就不在选择器上。是 provider 或模型字符串写错了,而一个根本解析不出来的路由,再怎么改目录都救不回来。

再说退出条件。如果你唯一的目标就是把请求发给某个自定义模型,那单靠修复 1 就够了:内联设置 model,重启,搞定。本指南剩下的部分是关于让选择器显示一份干净、可切换的列表——这对团队以及经常换模型的人才重要。如果你从不打开那个下拉列表,做完修复 1 就可以停了。

为什么 Codex Desktop 会隐藏自定义模型

一共有四个不同的根本原因,各自需要不同的修复方法。搞错了原因,正是人们花一下午重新敲一份本来就能用的配置的根源。

根本原因 选择器为什么隐藏模型 哪些配置会遇到 修复
桌面版客户端过滤 app-server model/list 返回了模型,但桌面版渲染层把它丢弃了 任何带目录的自定义 provider 修复 1 + 修复 4
没有目录元数据 model 内联设置,选择器没有任何东西可以用来描述它 极简的 config.toml 配置 修复 1(接受 “Custom”)或修复 2
目录格式错误 / 已过期 目录写成了 Codex 不会枚举的格式 旧版 cc-switch、手改的 JSON 修复 2 / 修复 4
项目级 provider model_provider~/.codex/config.toml 之外被忽略 仓库里的 .codex/config.toml 修复 3

第一个最让人意外。根据尚未关闭的 codex issue #19694,app-server 正确加载了目录,并它的 model/list 端点返回了你的模型,但桌面版 UI 又加了一层额外过滤,在渲染选择器之前把本地配置的模型移除掉了。后端知道你的模型,但前端拒绝显示。这是客户端缺陷,不是配置错误,该 issue 提交于 2026-04-26,截至撰稿时仍未关闭。

第二个原因最常见,也最不用担心。如果你只写了 model = "some-id" 而没有目录,Codex 就只有这个字符串,却没有显示名称、上下文窗口或能力标志。选择器于是显示 “Custom” 标签然后不再管它。你的请求仍然会发给正确的模型。这一点会把人绊住,因为 “Custom” 看起来像坏了,其实它正常工作。

第三个原因是 cc-switch 用户在 v3.16.5 之前会遇到的。社区在 cc-switch issue #3668 中追踪到了它:生成的目录和 provider 配置块与 Codex 选择器枚举时期望的格式对不上,所以即便路由正常,第三方 provider 的 /model 也返回空。修复方法详见修复 4。

第四个原因有明显迹象。如果你把 provider 放进了某个仓库的 .codex/config.toml,Codex 会在启动时打印警告并完全忽略这个配置块。Provider 定义只在用户级作用域生效。

Codex 如何加载模型(以及桌面版在哪里分道扬镳)

Codex 是分层构建它的模型列表的,弄清顺序就能知道哪个修复真正管用。一共有三个来源:随二进制文件打包的内置目录、从 OpenAI 拉取的远程目录,以及你本地的 model_catalog_json。本地文件优先级最高。它在启动时会同时覆盖内置目录和远程目录,这正是为什么一份正确的 model_catalog_json 是第三方模型的真正操控杆,而不是可有可无的锦上添花。 与 CLI 版本直接读取环境变量中的 OPENAI_API_BASE 不同,Codex Desktop 在启动时会对模型列表进行静态缓存,这意味着OpenRouter 或 等兼容网关暴露的自定义模型,需要满足特定的 /v1/models 响应格式才能被桌面端正确枚举。

下面这部分会把所有人绊倒。Codex 启动时,app-server 读取全部三层,把它们解析合并,然后一个内部的 model/list 端点把结果暴露出来。CLI 直接渲染这个列表,所以自定义模型会显示出来。而桌面版应用渲染同一个列表时多走了一步客户端处理,根据 issue #19694,这一步会套用它自己的允许列表,在条目到达下拉列表之前把本地配置的条目丢掉。同一个后端、同一份目录,两个不同的选择器。正是这一个分岔,让 CLI 成为可靠的应急出口,而桌面版不是。

还有一个缓存要留意。Codex 会保留 ~/.codex/models_cache.json,而在你切换 provider 或编辑目录之后,它并不总会重新同步。过期的缓存可能会一直显示旧列表,甚至显示空列表,即便你的配置已经正确。删掉这个文件会强制在下次启动时干净重建——在你断定是目录本身出错之前,值得先试试这一招。

如何修复(覆盖每种配置的解决方案)

从上往下依次尝试。修复 1 是永远都管用的那个。后面的修复让选择器变得美观,并让列表可以切换。

修复 1:内联设置模型(可靠的绕行方案)

这是 #19694 讨论帖最终收敛到的绕行方案,也是应该最先采用的一个。把模型字符串直接写进 config.toml,让选择器显示 “Custom” 也无妨。

# ~/.codex/config.toml (user-level, not a project folder)
model = "moonshotai/kimi-k2.7-code"
model_provider = ""

[model_providers.]
name = ""
base_url = ""
env_key = "API_KEY"
wire_api = "responses"

导出密钥(在你的 shell 配置里 export API_KEY=sk-...),彻底退出 Codex Desktop,再重新打开。选择器上会显示 “Custom”,但每个请求都会发往 moonshotai/kimi-k2.7-code。如果你想指向别的模型,换掉字符串即可:deepseek/deepseek-v4-proopenai/gpt-5.3-codex 是同一个网关上另外两个编码模型 ID。这三个都能用同一个密钥访问。想了解 provider 配置块本身的详细步骤,参见 Codex CLI multi-provider setup via config.toml 指南。

关于 wire_api 补充一点。Codex 在 2026 年 2 月初移除了它旧有的 chat/completions 路径(见 discussion #7782);responses 现在是唯一支持的取值,也是省略该键时的默认值。仍然设为 wire_api = "chat" 的 provider 会在启动时失败。实际的要求是:你的网关必须在 {base_url}/responses 暴露一个 OpenAI 兼容的 Responses 端点, 就在 提供了它,所以这里正确的设置就是wire_api = "responses"。如果你把 Codex 指向一个只支持/chat/completions` 的网关,那么每个请求都会 404,看起来像模型问题,实际却是协议不匹配。完整的字段列表见 Codex configuration reference

修复 2:添加模型目录,让选择器把它列出来

如果你想让下拉列表里显示真实名称而不是 “Custom”,就需要一个 model_catalog_json。它是一个 JSON 文件,在启动时加载一次,包含一个顶层 models 数组。每个条目描述一个模型。

# top of ~/.codex/config.toml
model_catalog_json = "/Users/you/.codex/-models.json"
model = "moonshotai/kimi-k2.7-code"
model_provider = ""

一个最小的目录条目,字段取自官方的 codex models.json

{
 "models": [
 {
 "slug": "moonshotai/kimi-k2.7-code",
 "display_name": "Kimi K2.7 Code ",
 "description": "Coding model via the gateway",
 "context_window": 262000,
 "max_context_window": 262000,
 "supported_in_api": true,
 "visibility": "list",
 "priority": 1
 }
 ]
}

slug 必须等于你发送给 provider 的那个字符串。官方目录每个模型还携带更多字段(推理级别、工具类型、模态标志),手工编写完整结构相当繁琐——这正是下一个修复存在的原因。任何目录改动后都要重启桌面版。这一层会同时覆盖内置目录和远程目录,而且只在启动时重新读取,所以逐会话的配置改动不会重新应用它。

修复 3:把 provider 移到用户级配置

如果 Codex 在启动时打印了关于 provider 设置被忽略的警告,说明你的 provider 配置块放错了文件。model_providermodel_providers 只在 ~/.codex/config.toml 中生效。仓库里的 .codex/config.toml 无法定义 provider。项目级的 model_catalog_json 是另一回事——按设计它本应仍被读取,但在新建的桌面版会话里目前并没有,这是一个尚未修复的缺陷(#26308),而非预期行为。

# check where your provider actually lives
grep -rn "model_providers" ~/.codex/config.toml ./.codex/config.toml 2>/dev/null
# if it is in ./.codex/config.toml, move the [model_providers.*] block
# and model_provider = "..." into ~/.codex/config.toml, then restart

把仓库专属的东西(比如指令文件)留在项目配置里,把 provider 和模型目录放在用户级。

修复 4:让 cc-switch v3.16.5 生成目录

如果你cc-switch 管理 Codex,请更新到 v3.16.5 或更高版本。正是这个版本修复了原生 provider 选择器为空的问题。它会为使用原生 Responses 端点(apiFormat: "openai_responses")的供应商生成 ~/.codex/cc-switch-model-catalog.json,这才让 Codex Desktop 真正看得到模型并使用内置工具。

更新后你必须做两件事,否则什么都不会变:

  • 把每个原生 provider 重新保存一次。 目录只在保存时才重新生成。现有 provider 会一直保持旧的(损坏的)状态,直到你打开并重新保存它们。没有自动迁移。

  • 理解这次解耦。 在 v3.16.5 中,模型目录不再依附于 “本地路由”开关。现在无论本地路由是否开启,原生 Responses 供应商都会生成目录,而 Chat 格式的供应商仍像以前一样走代理转换。

# confirm the catalog exists and lists your models after re-saving
cat ~/.codex/cc-switch-model-catalog.json | grep -o '"slug":[^,]*'
# if this is empty, re-save the provider in cc-switch and check again

cc-switch 本身禁用了一个需要注意的东西:少数国产一方模型(MiMo、LongCat、MiniMax、Qwen3-Coder)在它们的网关上不支持 OpenAI 的内置 web_search,所以 v3.16.5 默认为它们关闭了该工具,以避免 Codex 抛出硬性的 400 错误。如果你网关路由这些模型,预期网络搜索会处于关闭状态。

那些看起来像选择器缺陷的常见配置错误

在“自定义模型不显示”的报告里,有一半其实是断掉的路由披着一件显示问题的外衣。在你动目录之前,先排除这些。每一个都会产生一个看起来像选择器隐藏了模型的症状,而实际上请求压根没机会送达。

症状 真正原因 修复
启动报错,或每个请求都 404 wire_api = "chat"(2026 年 2 月已移除)或网关没有 /responses 端点 设置 wire_api = "responses",并指向一个支持 Responses 的网关
每个请求都返回 401 指定了 env_key,但那个变量从未导出 在 shell 配置里 export API_KEY=...
模型能跑,但返回了错误的输出 目录里的 slug 与 provider 的模型 ID 不匹配 slug 改成完全一致的模型字符串
provider 被忽略,启动时打印警告 配置块放在项目级 .codex/config.toml 移到 ~/.codex/config.toml
连接时不时被重置 base_url 末尾有斜杠或路径写错 URL 以 /v1 结尾,末尾不带斜杠

把这些和真正的 #19694 过滤区分开的标志只需一条命令:从 CLI 发出同样的请求。如果 CLI 也失败,那就是上面那些错误之一,而不是桌面版选择器,改目录也修不好。如果 CLI 成功、只有桌面版依旧看不见,那才是过滤问题,你就回到修复 1 和修复 4。

已知的 Codex Desktop 自定义模型问题(2026 时间线)

这不是单一缺陷。它是 Codex 应用以及那些写它配置的工具中一簇相关的问题。搞清楚你遇到的是哪一个,能让你免于用错修复方法。

Issue 出了什么问题 报告时间 状态
openai/codex #19694 桌面版选择器过滤掉了后端已加载的目录模型 2026-04-26 未关闭
openai/codex #26308 桌面版在新建会话中忽略项目级 model_catalog_json 2026 未关闭
openai/codex #22160 CLI 的 /model 和桌面版选择器都没有暴露 profile / provider 别名 2026 已关闭
openai/codex #15364 桌面版应用内没有选择自定义 provider 的 UI 2026 已关闭
cc-switch #3668 cc-switch 目录格式无法被识别,/model 为空 2026-06-03 已在 v3.16.5 修复

贯穿所有这些的规律是:路由能用,显示不能用。每一次,CLI 都是可靠的应急出口,因为它读取目录时不经过桌面版渲染层那道额外过滤。如果你在桌面版里卡住了,CLI(在终端里运行 codex)几乎总能显示并使用该模型。

当选择器仍然不显示模型时:现在就能用的替代方案

如果你不想再和桌面版 UI 较劲了,下面这些方法能让你继续使用自定义模型,而不必等客户端修复。在这里用网关的意义在于:一个端点、一个密钥,覆盖众多模型,于是切换模型只是改一个字符串,而不是每次都新增一个 provider 配置块。 当 Codex Desktop 的模型选择器持续无法识别自定义端点时,开发者可以转向 OpenRouter 或 等聚合网关,标准 OpenAI 兼容 API 格式将请求路由至目标模型,从而绕过桌面客户端的本地配置解析流程。

路径 模型如何到达 Codex 选择器行为 备注
网关 一个 base_url、一个密钥、多个模型 ID 显示 “Custom” 或按目录列出 Kimi、DeepSeek、GPT-Codex 共用一个 provider 配置块
Codex CLI 相同配置,终端客户端 可靠地列出自定义模型 绕过桌面版过滤
provider 直连密钥 每个厂商一个独立的 provider 配置块 同样受该过滤影响 更多密钥、更多要维护的配置块
本地(Ollama) base_url 指向 localhost 未设目录时会有警告 离线,无需网关

用 作为 provider 能把维护成本降到最低:moonshotai/kimi-k2.7-code(262K 上下文)、deepseek/deepseek-v4-pro(1M 上下文)和 openai/gpt-5.3-codex(512K 上下文)都位于同一个 之后、共用同一个密钥,每个模型的 页面上都会显示当前的按 token 计价。要切换模型,只需改config.toml` 里的一个字符串,不用新增 provider 配置块,也不用第二个密钥。针对 OpenAI 兼容客户端的 base-URL 配置见 docs。无论你走哪条路,桌面版选择器的怪癖只是叠在上层的显示问题,而不是路由上的约束。

如何验证你的自定义模型确实已加载

不要把选择器当作事实来源,因为坏掉的正是它。要在它下面那一层做验证。

codex --version # confirm you are on a recent build
codex # start the CLI, then type /model
# the CLI enumerates the catalog without the Desktop filter

如果 CLI 里的 /model 显示了你的模型,说明目录和 provider 都正确,剩下的任何缺口都是桌面版渲染层的问题。如果 CLI 里也是空的,那问题在更上游:文件放错(修复 3)、目录格式错误(修复 2 / 修复 4),或者 slug 写错。要粗略确认路由本身能否解析,用你的密钥对网关执行一次 curl,就能在你怪罪客户端之前先告诉你模型是否存在。先看路由,再看显示。

常见问题

为什么 Codex Desktop 不显示我的自定义模型?
通常模型是能用的,是桌面版应用把它从选择器里过滤掉了(issue #19694)。次要原因有:没有目录文件、旧工具产生的格式错误目录,或者在项目级 .codex/config.toml 中定义了 provider。

如何向 Codex config.toml 添加自定义模型?
定义 [model_providers.NAME],包含 base_urlenv_keywire_api,然后设置 model_providermodel。把它放在 ~/.codex/config.toml 里。对于 ,base_url = ""

cc-switch 能配合 Codex Desktop 使用吗?
可以,从 v3.16.5 起,它会为原生 Responses provider 生成 ~/.codex/cc-switch-model-catalog.json。更新后把每个 provider 重新保存一次。

Codex 模型目录文件在哪里?
~/.codex/config.tomlmodel_catalog_json 所指向的位置。cc-switch 使用 ~/.codex/cc-switch-model-catalog.json。切换 provider 后要留意可能过期的 ~/.codex/models_cache.json

为什么 Codex 显示的是 “Custom” 而不是我的模型名称?
你内联设置了 model 却没有目录条目,所以选择器没有展示用的元数据。请求仍然会发往正确的模型。

我能在项目级的 .codex/config.toml 中使用自定义模型吗?
不行。Provider 设置只在 ~/.codex/config.toml 中生效。项目级的 provider 配置块会被忽略并伴随一条启动警告。

Codex 中的 model_catalog_json 是什么?
它是 config.toml 中一个指向 JSON 文件的键,在启动时加载,文件包含一个顶层 models 数组,其中每个条目携带 slugdisplay_name 及能力字段。它会覆盖内置目录和远程目录。

如何把 Codex 路由到 Kimi、DeepSeek 或 GPT-Codex?
让一个自定义 provider 指向网关,并设置 model。在 上:moonshotai/kimi-k2.7-codedeepseek/deepseek-v4-proopenai/gpt-5.3-codex,全都来自 `

对于一个能跑却不肯显示出来的模型,修复方法几乎总是:别再折腾选择器,转而去信任它下面那一层——CLI 早已看到了桌面版正在隐藏的东西。

本次更新核查的资料来源


参考来源

相关文章
|
1月前
|
JSON 缓存 安全
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
CC Switch 通过本地路由(`127.0.0.1:15721`)实现协议转换:将 Codex 的 Responses API 请求自动映射为 DeepSeek 等厂商的 Chat Completions 接口,兼容流式响应与工具调用,无需修改 Codex 源码,安全隔离 API Key。(239字)
4420 7
通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
|
25天前
|
人工智能 缓存 JavaScript
保姆级教程:OpenCode 14 个社区插件 + 6 个实战案例,建议收藏,手把手带你打造最强 AI 编码环境
OpenCode 插件使用保姆级教程:14 个社区插件 + 6 个实战案例,从加载规则到开发实战,手把手带你打造最强 AI 编码环境。建议收藏!
458 10
|
1月前
|
缓存 Shell API
Codex 周限额提前耗尽怎么办:5 种替代方案及按量计费 API 接入配置指南
2026 年 5 月 17 日,一位 Plus 用户眼看着 Codex 周计数器一天从剩余 96% 掉到 0%——而承认这起事件的 OpenAI 工程师,仍然没法保证计数器在下一个周窗口前会重置。如果你的周限额每个月清零两次,2026 年正确的做法不是反复刷 /status,而是把 Codex CLI 接到按量计费的端点上,让钱包封顶替代日历封顶。
|
22天前
|
存储 人工智能 运维
CC Switch本地路由完整实操:Codex CLI对接DeepSeek等第三方模型教程
Codex CLI原生仅适配OpenAI新一代Responses API,而DeepSeek、MiniMax、Kimi、SiliconFlow等绝大多数国内、海外第三方大模型对外仅提供Chat Completions标准接口。两套API在请求字段、SSE流式事件、工具调用数据结构上完全不兼容,直接将第三方地址写入Codex配置会出现404、参数解析失败、流式内容截断、模型列表无法加载等各类报错。CC Switch作为本地协议中转路由工具,通过本机127.0.0.1:15721代理端口自动完成双向协议转换,无需修改Codex任何源码,同时隔离保护各厂商API密钥,一站式实现Codex调用全系列第
1081 0
|
7天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
783 37
|
4月前
|
人工智能 文字识别 测试技术
AutoGod:一款拥有AI视觉的安卓自动化框架
AutoGod是一款面向安卓的AI视觉自动化框架,融合多引擎OCR、YOLO目标检测与VMP混淆引擎,解决传统方案元素定位脆弱、兼容性差、安全性低等痛点,支持自动化测试、游戏脚本与企业RPA,兼顾智能性、鲁棒性与安全性。
761 11
|
3月前
|
人工智能 自然语言处理 索引
从“词元”到“符元”:Token 中文名背后的 AI 底层认知之争
在“Token”被定名为“词元”之后,本文从计算本体、多模态演进与回译一致性等角度指出,该命名存在路径依赖与语义锚定问题。Token本质是跨模态的离散符号单元,而非语言“词”。相比之下,“符元”更能对齐计算本质,具备长期稳定性与认知一致性。
2186 13
|
1月前
|
缓存 测试技术 API
Qwen 3.7 Plus 与 Max 实测:性价比与多模态能力差异解析(2026)
2026 年 6 月 1 日,阿里悄无声息地发布了 Qwen 3.7 Plus,距 Qwen 3.7 Max 上线刚好 11 天。同样的 1M 上下文,同样的 35 小时自治上限。但价格才是头条:Plus 是 0.40/M输入,Max是 2.50/M——便宜约 6 倍——并且还能看图、看视频。Vision Arena 上 Plus 已经排到 #16。所以这周真正值得讨论的问题不是”要不要为视觉能力买单”,而是”Max 凭什么用 6 倍价格换来 2 个百分点的 benchmark 领先”。
1634 14
|
23天前
|
JSON Shell API
Claude Code 转向 Codex 实战指南:12 项关键配置与 1 个踩坑记录
从 Claude Code 迁移到 Codex,基本上就是一场重命名加重排格式的活儿,而 Codex 如今还自带一条单命令导入器,帮你完成其中大部分工作。真正的麻烦藏在它遗留下来的东西里,而其中一项根本就不是配置文件。
|
4月前
|
存储 Linux API
OpenClaw长效记忆解决方案:阿里云/MacOS/Linux/Windows部署指南+Ontology技能一键安装实操
在OpenClaw(Clawdbot)的日常使用中,绝大多数用户都会遇到相同的问题:刚刚告知助手的任务、信息、偏好、日程安排,间隔不久再次询问,系统便完全遗忘,只能反复重复相同内容,效率大幅降低。传统的对话式记忆仅能临时缓存文本内容,无法对信息进行结构化存储、关联梳理与长期保留,这也是AI助手使用一段时间后出现响应混乱、逻辑缺失、记忆丢失的核心原因。想要让OpenClaw真正成为可长期协作的智能助手,就必须为其搭建具备实体关联、逻辑梳理、持久存储的**结构化记忆大脑**。Ontology技能正是解决这一问题的核心组件,它无需调用额外API、不依赖第三方服务,通过一行命令即可完成安装,让Open
1283 0