首页 / AI工具 / 面试时 Codex 疯狂报错?CCX 接国产模型 500 错误怎么排查实录?
AI工具

面试时 Codex 疯狂报错?CCX 接国产模型 500 错误怎么排查实录?

面试时 Codex 疯狂报错?CCX 接国产模型 500 错误怎么排查实录

面试官让我用 Codex 写代码,结果一直狂刷 500 Internal Server Error。ccswitch 明明显示切换成功,MiMo 控制台却还在疯狂跳请求数。那一刻的社死现场,希望你永远不用经历。


目录


那个尴尬的面试下午

面试进行到 AI Coding 环节,面试官说:“你用 Codex 现场写个用户画像分析功能吧。”

我自信地打开终端,输入需求,按下回车。

第一行返回的不是代码,而是一行刺眼的红字:

500 Internal Server Error

我以为是网络波动,重试三次,还是 500。把模型名从 deepseek-chat 改成 mimo-v2.5-pro,依然 500。这时面试官已经站到我身后盯着屏幕了。

情急之下我用 ccswitch 切换到 DeepSeek,终端显示“模型已激活”。但新开对话后依然报 500。更离谱的是,我去 MiMo 的后台一看,请求量还在持续上涨——ccswitch 切模型,Codex 根本没听

那一刻我深刻理解了什么叫“当场去世”。

面试结束后,我花了整整两天把整个链路拆开重装,终于把问题彻底搞清楚。今天把完整排查实录和解决方案分享给你,避免你再踩同样的坑。


CCX、ccswitch 和 Codex 到底是什么关系

Codex CLI 是 OpenAI 官方推出的命令行编程助手,默认只对接 OpenAI 的新协议(/v1/responses)。

国产模型(DeepSeek、MiMo、通义千问、Kimi 等)大多只兼容老协议(/v1/chat/completions)。

CCX 就是中间那座“翻译桥”——它把 Codex 发出的 Responses 请求翻译成国产模型能听懂的 Chat Completions 请求,再转发出去。

ccswitch 则是模型切换控制器,负责告诉 CCX 当前应该使用哪个模型。

三者关系可以简单理解为:

Codex → CCX(翻译层)→ 国产模型

而我们遇到的 500 错误,90% 的情况都出在这座桥没搭对


500 错误到底长什么样

典型的报错表现有以下几种:

  • 500 Internal Server Error
  • {"error": "Internal Server Error"}
  • 请求发出后长时间无响应,最终超时返回 500
  • ccswitch 显示切换成功,但后台实际请求仍然打到上一个模型

更隐蔽的现象是:旧对话不生效,必须开新对话模型切换才生效。这也是很多同学踩坑后最容易忽略的点。


四步快速定位问题根源

第一步:确认 CCX 是否真的在跑新模型

在终端输入:

curl http://localhost:3000/v1/models

查看返回的模型列表里是否有你刚刚切换的目标模型。如果没有,说明 CCX 根本没收到切换指令。

第二步:检查 ccswitch 配置是否真正写入

执行 ccswitch status,确认当前激活模型和配置文件路径是否一致。很多同学会同时存在多个 .ccx 配置文件,导致切换命令写到了错误的配置文件里。

第三步:查看 Codex 的 config.toml

打开 ~/.codex/config.toml,重点检查以下三项:

model = "deepseek-chat"           必须和 ccx 当前激活模型一致
base_url = "http://localhost:3000/v1"
api_key = "sk-123456"             随便填,ccx 会忽略

最容易出错的地方base_url 后面一定要带 /v1,少了就会 404 或 500。

第四步:抓包验证真实请求路径

用以下命令发起最小化测试:

curl http://localhost:3000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": {"role": "user", "content": "say hello"}
  }'

如果这个能通但 Codex 还是 500,问题就在 Codex 的配置或旧对话缓存。


一份直接可用的完整配置模板

ccx 配置文件(config.json)

{
  "listen": "0.0.0.0:3000",
  "target_base_url": "https://api.deepseek.com",
  "target_api_key": "sk-你的deepseekkey",
  "model_mapping": {
    "deepseek-chat": "deepseek-chat",
    "mimo-v2.5-pro": "mimo-v2.5-pro"
  },
  "enable_response_api": true
}

Codex 配置文件(~/.codex/config.toml)

model = "deepseek-chat"
base_url = "http://localhost:3000/v1"
api_key = "anything"
temperature = 0.7
max_tokens = 8192

验证配置是否真正生效

完成配置后,按以下顺序验证:

  1. 重启 ccx 服务
  2. 执行 ccswitch deepseek
  3. 新开终端(重要!旧终端环境变量可能缓存)
  4. 输入 codex /status 查看当前模型
  5. 发送一个简单请求测试

如果 /status 显示的模型和你切换的一致,且 DeepSeek 后台出现请求记录,就说明彻底打通了。


你后续还会踩的几个坑

  1. 旧对话缓存问题:Codex 对历史对话的模型绑定很强,切换模型后必须开新对话。
  2. 多配置文件冲突:ccswitch 可能同时管理多个项目目录的配置,切换时一定要指定 --project 参数。
  3. Responses API 兼容性:部分国产模型对新 Responses 协议支持不完善,建议强制让 ccx 转成 chat/completions。
  4. 端口被占用:3000 端口被其他服务占用会导致 ccx 启动失败却不报明显错误。
  5. 环境变量污染OPENAI_BASE_URLANTHROPIC_API_KEY 等变量会干扰 ccx 行为,建议在启动前用 unset 清理。

Codex 接国产模型标准排查清单

问题现象 可能原因 优先排查项
持续 500 错误 CCX 翻译层配置错误 config.json + base_url
ccswitch 切了不生效 配置写入到错误项目目录 ccswitch –project
旧对话不认新模型 Codex 对话缓存 必须开新对话
切换后后台请求还是老模型 CCX model_mapping 未配置 检查 model_mapping 字段
提示需要登录 auth.json 或终端未重启 删除 ~/.codex/auth.json
404 Not Found base_url 少写了 /v1 补全 base_url

把这篇排查实录收藏起来,下次再遇到 Codex 接国产模型报错,10 分钟内就能定位问题。希望你下次面试或者实际开发中,能顺畅地用上 DeepSeek、MiMo 这些高性价比的国产大模型,让 Codex 真正成为你的 coding 利器。

分享到: 微博