乐于分享
好东西不私藏

Codex app + CCSwitch切换国产模型必踩的坑大全(附保姆级排查修复方案)

Codex app + CCSwitch切换国产模型必踩的坑大全(附保姆级排查修复方案)

关注◆ AI一手 ◆探索AI时代的一手实战玩法

昨天那篇Codex App切换国产模型的教程发了之后。

阅读还不错,评论区和群里陆续有人反馈各种问题。

等等,等等。。。

有的是切完模型重启Codex还是显示GPT-5.5,有的是发图片直接报错,还有的切回GPT-5.5之后依然显示deepseek。

我自己也遇到了不少,昨天写完教程之后又折腾了半天。

总结了一下,把这些问题的排查和修复方案整理成了这篇。

如果你昨天跟着教程操作但没跑通,或者跑通了又出了新问题,这篇应该能帮你省不少时间。

先赞后看,腰缠万贯~


1 切完模型重启Codex,还是显示GPT-5.5

v3.16.1更新了,大家可以再更新下看看。并且我下面排错的都是在这个更新后的版本基础做的,我所知道的这个版本修复了我昨天文章里面写的关于切换模型后,你的记录没了,并且你再切回来后你的记录也没了的问题,现在切回原来的模型,会话记录是存在的。所以强烈大家更新一下。

第一个是出现最多的问题,评论区好几个人都遇到了。

症状很明确,你在CC Switch里配好了DeepSeek,路由也开了,供应商也启用了,然后关掉Codex重新打开,界面上模型还是显示GPT-5.5。

你心想可能是显示问题,于是打开Codex CLI试了一下,输入 codex,结果直接报错了。

报错信息大概长这样,

{"type":"error","status":400,"error":{"type":"invalid_request_error","message":"The 'deepseek-v4-flash' model is not supported when using Codex with a ChatGPT account."}}

这个报错的意思是,Codex检测到你用的是ChatGPT账号登录,但模型被改成了 deepseek-v4-flash,两边对不上,所以拒绝了。

但是你明明已经在CC Switch里配好了啊???

问题出在哪呢。

CC Switch在帮你改配置文件的时候,其实需要改两个文件,一个是 config.toml,一个是 auth.jsonconfig.toml 里面写的是你要用什么模型,auth.json 里面写的是你的认证方式。

但是CC Switch有时候,只改了其中一个。。。

用我电脑的例子具体来说,电脑上可能有两个路径的 config.toml。一个在C盘用户目录下面的 .codex 文件夹里,一个在 D:\codex-home 下面(如果你装的时候改过路径的话)。CC Switch可能只改了C盘那个,但Codex实际读取的是D盘那个。

解决办法,手动去检查一下你的Codex到底在读哪个配置文件。

可以通过这个来知道自己之前设置的config.toml目录。

最简单的方式,如果你有Claude Code或者其他能帮你看文件的agent,直接让它帮你排查。你跟它说,帮我看一下 D:\codex-home\config.toml 和 D:\codex-home\auth.json 这两个文件的内容,然后对比一下C盘用户目录下面 .codex 文件夹里的同名文件,看看哪个被改了哪个没被改。

如果没有agent帮忙,你自己用记事本打开也行。

config.toml 里面,你要看有没有 model = "deepseek-v4-flash" 这样的内容,以及有没有 custom provider 的相关配置。

auth.json 里面,你要看 auth_mode 是不是已经从 chatgpt 变成了 api-key 模式。

如果发现确实只改了一个,那就把没改的那个也改了。或者更稳妥的做法,从CC Switch的备份文件里恢复。CC Switch每次改配置之前都会自动备份,备份文件名带时间戳,比如 config.toml.bak.20260602121223 这种。

找到正确的备份,复制覆盖回去,然后重新在CC Switch里操作一遍。

或者如果觉得看不懂,你就把这个问题和我说的排查方案跟你的claude code或者其他桌面agent比如opencode说都行,让它直接帮你修复。


2 能用了,但发图片就报错

这个坑比较隐蔽,因为一开始你以为切换成功了,纯文字对话没问题,DeepSeek也确实在干活,API账单也在涨。

然后你随手发了张截图想让它看看代码,直接炸了。

报错信息是这样的,

CC Switch local proxy failed while handling Codex endpoint /responses. Provider: DeepSeek; model: deepseek-v4-flash; upstream_status: HTTP 400; cause: Failed to deserialize the JSON body into the target typemessages[6]: unknown variant `image_url`, expected `text`

翻译成人话就是,DeepSeek的API不认识 image_url 这个消息格式。

这不是你配置的问题,也不是CC Switch的问题,是DeepSeek API本身的限制。

DeepSeek的识图功能目前只在他们自己的网页端和App里开放,API端还没支持图片输入。不管你用的是flash还是pro都一样,发过去带图片的消息,它就报400。

而且还有一个更坑的地方,一旦在某个会话里发了图片报错了,这个会话后续就算你只发纯文字,也会继续报错。

因为Codex会把之前的消息历史一起发给API,那个带图片的消息已经在历史里了,每次都会触发同样的错误。

所以遇到这个情况,只能新建会话。

旧的那个废了。

那怎么彻底避免呢?两个选择。

第一个,继续用DeepSeek,但是记住不要发图片。纯文字编码场景完全没问题,只要你不往对话里拖截图就行。一旦手贱发了图片报了错,赶紧新建会话继续干活。

第二个,换一个支持图片的国产模型。通义千问Qwen支持多模态,Kimi也支持图片。在CC Switch里切到这些模型就行了。

我个人建议,如果你的工作流里经常需要发截图让AI看代码,那就别用DeepSeek了,换Qwen或者Kimi。如果你主要是纯文字交互,DeepSeek的性价比还是很能打的。


3 API Key明明是对的,但报401

这个问题有几个人在群里反馈了,我自己也遇到过一次。

报错信息大概是这样的,

unexpected status 401 Unauthorized: Incorrect API key provided: sk-bb527*****0175

你心想不对啊,我明明复制粘贴的API Key,怎么会错呢?

还真会错。。。

CC Switch的输入框有时候会出现一个玄学问题,你复制粘贴进去的Key看着没问题,但实际上可能多了个空格,或者首尾有不可见字符,甚至偶尔会出现乱码。

我之前还特地去ccswitch里面查看了一下;

发现确实多了一些乱码,我明明复制粘贴进去的,但是不知道为什么ccswitch软件保存的时候会发生这个情况。

解决办法其实很简单。

先把CC Switch里那个供应商的API Key删掉,然后重新去DeepSeek(或者你用的其他服务商)的后台,重新复制一次Key,再粘贴进去保存。

操作的时候注意顺序,先关掉Codex,然后在CC Switch里重新配置Key,最后再打开Codex

如果还不行,试试手动输入Key而不是复制粘贴。虽然Key很长手动输有点反人类,但至少能排除剪贴板的问题。


4 切回GPT-5.5之后也是一样没切回来

如果你想切回GPT-5.5。于是你在CC Switch里把DeepSeek禁用了,路由也关了,重启Codex。

结果发现,跟问题1一样没有切换回来。依然显示deepseek。

这跟坑1的根源一样,还是两个配置文件没有同步

你把DeepSeek的配置去掉了,但 auth.json 可能还停留在 api-key 模式,或者 config.toml 里还残留着 custom provider 的配置项。

解决办法,还是那条路,找到CC Switch的备份文件,把 config.toml 和 auth.json 都恢复到切换之前的状态。

备份文件一般在 D:\codex-home 下面(或者你Codex的安装目录),文件名带 .bak 和时间戳。找到切换DeepSeek之前的那个备份,两个文件都覆盖回去。

覆盖之后重启Codex,重新登录一下你的ChatGPT账号,应该就恢复正常了。插件回来了,之前的会话记录也回来了。

我就是这么修好的,Claude Code帮我查了两个文件的内容,对比了备份,然后 cp 了一下就搞定了。

这里多说一句。在你准备切换模型之前,强烈建议你先手动把 config.toml 和 auth.json 这两个文件备份一下。虽然CC Switch会自动备份,但自己存一份更保险,万一CC Switch的备份也不对呢。

如果你觉得配置麻烦,同样的把这个修复方案给claude code或者其他桌面agent,比如opencode等来帮你修复。


5 切换模型后会话记录全没了(这个更新后解决)

这个不是bug,但确实是个大坑,昨天文章里我提过但可能大家没太注意。

当你从GPT-5.5切换到DeepSeek的时候,之前所有的会话记录都会消失,插件入口也可能变灰。

别慌,你的数据没有真的被删。

切换模型之后相当于换了一个认证体系,Codex把你当成了一个新用户,所以之前的会话和插件都看不到了。但只要你切回GPT-5.5,并且配置恢复正确了(参考坑4的解决方案),一切都会回来,会话记录、插件、所有东西,跟没切过一样。

CC Switch升级到v3.16.1之后,切回来的流程已经顺畅多了,不会再出现坑4那种配置不同步的问题。

所以实操建议就是,切到国产模型之前,心里有个数,会话记录暂时会看不到。如果有特别重要的会话内容,自己先复制出来保存一份。用完国产模型想切回来,直接在CC Switch里操作,重启Codex就行。


6 切到DeepSeek之后,模型名称显示是空的

这个问题我在windows里面也遇到了,切换到DeepSeek之后,Codex App界面里模型选择那个位置是空的,没有显示任何模型名称。

之前在Mac上用的时候一直都是正常显示的,

这次切完就变空白了。

功能倒是能用,DeepSeek确实在响应,但界面上看着就是没有模型名,不太放心。

我的做法是把mac电脑里面那个显示正常好的 config.toml 的完整内容直接丢给Claude Code,跟它说"这个配置里面能正常显示自定义模型名称,帮我根据这个判断哪个字段控制显示,然后修复一下"。

下面是我丢给它的完整配置(API Key换成了xxx,其他都是原样):

model_provider = "custom"model = "deepseek-v4-flash"disable_response_storage = truemodel_reasoning_effort = "xhigh"notify = [ "/Users/gongfeifei/.codex/computer-use/Codex Computer Use.app/Contents/SharedSupport/SkyComputerUseClient.app/Contents/MacOS/SkyComputerUseClient", "turn-ended" ]approval_policy = "never"approvals_reviewer = "user"sandbox_mode = "danger-full-access"[model_providers][model_providers.custom]name = "deepseek"base_url = "https://api.deepseek.com"wire_api = "responses"requires_openai_auth = trueexperimental_bearer_token = "sk-xxx"[mcp_servers][mcp_servers.node_repl]type = "stdio"command = "/Applications/Codex.app/Contents/Resources/node_repl"startup_timeout_sec = 120[mcp_servers.node_repl.env]BROWSER_USE_AVAILABLE_BACKENDS = "chrome,iab"BROWSER_USE_MARKETPLACE_NAME = "openai-bundled"CODEX_CLI_PATH = "/Applications/Codex.app/Contents/Resources/codex"CODEX_HOME = "/Users/gongfeifei/.codex"[plugins."gmail@openai-curated"]enabled = true[plugins."canva@openai-curated"]enabled = true[plugins."figma@openai-curated"]enabled = true[plugins."github@openai-curated"]enabled = true[plugins."computer-use@openai-bundled"]enabled = true[plugins."documents@openai-primary-runtime"]enabled = true[plugins."spreadsheets@openai-primary-runtime"]enabled = true[plugins."presentations@openai-primary-runtime"]enabled = true[plugins."browser@openai-bundled"]enabled = true[plugins."chrome@openai-bundled"]enabled = true[features]memories = truenetwork_proxy = true[memories]

它看完告诉我,关键在 [model_providers.custom] 这个配置块下面的 name 字段。

[model_providers.custom]name = "deepseek"base_url = "https://api.deepseek.com"wire_api = "responses"

这里的 name = "deepseek" 就是Codex App界面上显示的自定义模型名称。如果这个字段缺失或者为空,界面上就会显示空白。

让Claude Code帮我检查了一下配置文件,发现确实是这个字段没有正确写入,补上之后重启Codex,模型名称就正常显示了。

所以如果你也遇到模型名称显示为空的情况,去检查一下你的 config.toml,看看 [model_providers.custom] 下面有没有 name 字段。没有的话自己加上就行,值写你用的模型名,比如 "deepseek" 或者 "qwen",随便写一个你能认出来的名字就行。

这个问题再次说明了一件事,遇到配置相关的问题,直接把配置文件丢给AI帮你看,比你自己一行行翻高效太多了。


7 经验总结

折腾了这一圈下来,说几个实操建议。

第一,做任何切换操作之前,先手动备份 config.toml 和 auth.json。别嫌麻烦,出了问题能救命。

第二,CC Switch更新到最新版。我发文章的时候是v3.16.0,现在已经v3.16.1了,修了一些bug。后面应该还会继续更新,保持关注。

第三,如果你有Claude Code或者其他本地agent,遇到配置问题的时候直接让它帮你排查。它能读文件、能改文件、能帮你对比差异,比你自己翻文件夹效率高太多了。这次很多问题我都是让Claude Code帮我修的,普通人不借助工具去手动debug这些配置文件,确实挺痛苦的。

第四,多切几次。我知道这话听着很离谱,但我自己的体验就是这样,你敢信???第一次切到DeepSeek的时候插件不能用,第二次切回来再切过去,插件又好了。有些bug就是这么玄学,多试几次说不定就过去了。

第五,遇到问题去CC Switch的GitHub提issue。社区工具靠的就是大家反馈,你遇到的问题可能下个版本就修了。

最后再强调一下,CC Switch和Codex++都是社区做的第三方工具,不是OpenAI官方的。用这些工具相当于在魔改Codex的配置,出问题是正常的。保持耐心,多折腾几次,实在不行群里喊一声,总有人遇到过类似的情况。

坦率的讲,用第三方工具魔改商业软件的配置,出问题是意料之中的事。但只要你理解了背后的原理,config.toml 管模型,auth.json 管认证,这两个文件同步了就没事,遇到问题心里就不慌。

好了,希望这篇能帮你把昨天的坑都填上。

如果你还遇到了其他我没提到的问题,评论区留言,我看到了会回复。大家一起踩坑一起填,磨平一点信息差。


8 附录,切换模型的操作要点

昨天有读者说切换模型那块想看详细一点,这里简单补一下核心步骤,不贴截图了,照着做就行。

从GPT-5.5切到国产模型(比如DeepSeek)

先关掉Codex。打开CC Switch,切到Codex标签页,点加号添加供应商,选DeepSeek(或者你想用的其他模型),填好API Key保存。然后去设置里面打开路由,路由总开关Codex路由启用都要打开。回到供应商列表,点DeepSeek右边的启用。最后重新打开Codex就行了。

从国产模型切回GPT-5.5

先关掉Codex。打开CC Switch,在供应商列表里把当前启用的国产模型禁用掉,然后去设置里把路由关了。重新打开Codex,登录你的ChatGPT账号。如果遇到坑4那种配置乱了的情况,用备份文件恢复 config.toml 和 auth.json,再重启就好。

从一个国产模型切到另一个国产模型

这个最简单。先关掉Codex。打开CC Switch,如果新模型还没添加过,先加上填好Key。然后在供应商列表里直接点新模型的启用(CC Switch会自动把旧的禁用掉)。重新打开Codex就行了。路由不用动,之前开着就一直开着。

三种情况就这些,核心就一句话,先关Codex,改完配置,再开Codex。顺序别反了。

好了,感谢你的耐心观看。

如果觉得不错,希望能点个赞、转发、收藏三连吧。

如果想第一时间收到推送,记得关注我哦!

你的关注是我更新的持续动力!

如果二维码失效,直接加我微信:gongfeifeiaaa,我拉你进群。