关注◆ 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.json。config.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 type: messages[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,我拉你进群。

夜雨聆风