【求助】Codex 桌面端接入 DeepSeek:模型名不显示、显示为"自定义",cc-switch 生成的 model_catalog_json 字段名(snake_case)与 Codex≥0.144 契约(camelCase)不匹配

平台:Windows 11 | Codex 桌面端 26.812.11052(对应 Codex ~0.147)| cc-switch v3.19.2 | 模型:DeepSeek V4 Flash / V4 Pro
说明:无官方 ChatGPT 账号,纯 API-Key + cc-switch 本地代理模式。CLI 一切正常,仅桌面端模型名不显示。

一、问题现象

通过 cc-switch 给 Codex 桌面端接入 DeepSeek 后:

  1. 桌面端「切换模型」下拉框不显示模型名(DeepSeek V4 Flash / Pro),只显示「自定义(Custom)」
  2. 无法在 Flash / Pro 两个模型之间切换
  3. 推理档位(reasoning effort)选择器异常
  4. 命令行 codex 的 /model 一切正常,请求实际能发到正确模型
    在这里插入图片描述

二、环境信息

  • OS:Windows 11
  • Codex 桌面端:OpenAI.Codex 26.812.11052(内部版本约 0.147,>= 0.144)
  • cc-switch:v3.19.2(2026-08,已是最新)
  • 接入方式:cc-switch 本地路由 http://127.0.0.1:15721/v1wire_api = "responses"requires_openai_auth = true
  • 无官方 ChatGPT / Codex 账号(无法走「保留官方登录」路线)

三、配置与已排查内容

~/.codex/config.toml(已隐去 token):

model_provider = "custom"
model = "deepseek-v4-flash"
model_catalog_json = "cc-switch-model-catalog.json"
model_reasoning_effort = "high"
disable_response_storage = true

[model_providers.custom]
name = "deepseek"
base_url = "http://127.0.0.1:15721/v1"
wire_api = "responses"
requires_openai_auth = true

~/.codex/cc-switch-model-catalog.json(v3.19.2 重新生成后的内容,字段为 snake_case):

{
  "models": [
    {
      "display_name": "DeepSeek V4 Flash",
      "slug": "deepseek-v4-flash",
      "context_window": 1048576,
      "max_context_window": 1048576,
      "additional_speed_tiers": [],
      "supported_reasoning_levels": [ { "effort": "none" }, { "effort": "high" } ],
      "supported_in_api": true,
      "visibility": "list",
      "priority": 1000
    },
    { "display_name": "DeepSeek V4 Pro", "slug": "deepseek-v4-pro", "additional_speed_tiers": [], "...": "同上结构" }
  ]
}

已尝试:

  • 在 cc-switch 里重新打开 DeepSeek 供应商并保存,catalog 已重新生成(时间戳确认),字段仍是 snake_case
  • 升级 cc-switch 到最新 v3.19.2,生成的 catalog 仍是 snake_case
  • 完全退出并重启 Codex 桌面端 + 新开线程,仍显示「自定义」

四、根因分析(已定位到官方仓库 schema)

  1. 字段命名契约不匹配(主因):参考 cc-switch issue #5182,Codex ≥ 0.144 读取 model catalog 只认 camelCase 字段:
    displayName / supportedReasoningEfforts / defaultReasoningEffort / contextWindow / additionalSpeedTiers / serviceTiers
    而 cc-switch 导出的 catalog 是 snake_casedisplay_name / supported_reasoning_levels / default_reasoning_level / context_window / additional_speed_tiers
    → 桌面端解析不出字段 → 模型列表、推理档位全空 → 显示「自定义」。

  2. additional_speed_tiers 为空:参考 cc-switch issue #4453,桌面端模型切换 UI 依赖 additionalSpeedTiers 判断「是否可切换的模型」,为空数组时模型不被列入切换菜单。

  3. 桌面端登录门控:Codex 桌面端按登录身份(OAuth)决定是否放行自定义模型;官方已把「桌面 GUI 暴露自定义供应商模型」标记为 not planned。无官方账号时无法绕过。

五、相关 Issue 链接

  • cc-switch #5182(snake_case vs camelCase 契约不匹配,与本问题直接相关):https://github.com/farion1231/cc-switch/issues/5182
  • cc-switch #4453(additional_speed_tiers 为空导致模型名变「自定义」):https://github.com/farion1231/cc-switch/issues/4453
  • cc-switch #4382(DeepSeek 模型名不显示,同类问题):https://github.com/farion1231/cc-switch/issues/4382
  • openai/codex #17772(Fast Mode 依赖 additional_speed_tiers):https://github.com/openai/codex/issues/17772

六、想请教大家的问题

  1. cc-switch 官方什么时候修复 #5182(按 Codex 版本输出 camelCase)?有没有现成的临时 workaround?
  2. 手工把 cc-switch-model-catalog.json 整体转成 camelCase 字段,是否能让桌面端正常显示模型名/切换?有没有完整的字段对照表或可用的模板?(希望有人贴一份能用的 camelCase catalog 示例)
  3. 在没有官方 ChatGPT 账号的前提下,有没有办法让 Codex 桌面端显示自定义模型名并支持切换?(目前只能靠改 config.toml + 重启实现切换,界面不显示)
  4. 如果手工转 camelCase 可行,additionalSpeedTiers 应该填什么?(官方 schema 里它是 Array<string>,且标注 Deprecated,改用 serviceTiers)直接把两个模型 slug 塞进去是否可行?

七、附:官方 schema 证据

openai/codex 仓库 codex-rs/app-server-protocol/schema/typescript/v2/Model.ts

additionalSpeedTiers: Array<string>, serviceTiers: Array<ModelServiceTier>,

openai/codex 仓库 sdk/python/src/openai_codex/generated/v2_all.py

Field(alias="additionalSpeedTiers", description="Deprecated: use `serviceTiers` instead.")

欢迎有经验的大佬指点,尤其是「手工 camelCase catalog」和「无官方账号的桌面端显示」这两块,先谢过!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐