Codex 接入 DeepSeek 后出现 502 Bad Gateway:一次从配置、代理到协议层的完整排障记录
2026/6/4 15:33:39 网站建设 项目流程

背景

最近 OpenAI Codex 发布了,效果惊艳但 API 费用不菲。我手头有 DeepSeek 的 API Key,想着通过 CC Switch 这个工具让 Codex 接入 DeepSeek,结果踩了一整天的坑。这篇文章记录完整的排查过程和最终解决方案。

环境信息

组件

版本

Codex Desktop

0.136.0-alpha.2

CC Switch

3.16.1

OS

Windows 11 Pro (26200)

DeepSeek API

api.deepseek.com

踩坑一:502 Bad Gateway

在 CC Switch 中配置好 DeepSeek 的 API Key 并切换后,Codex 直接报错:

unexpected status 502 Bad Gateway: Unknown error,url: http://127.0.0.1:15721/v1/responses

下面的是Codex的具体报错和我当时CC Switch的配置:

排查过程

CC Switch 的工作原理是启动一个本地代理(127.0.0.1:15721),接管 Codex 的配置文件 ~/.codex/config.toml,将请求路由到目标 API 提供商。

查看被接管的 config.toml:

model_provider = "custom" model = "deepseek-v4-pro" [model_providers] [model_providers.custom] name = "CC Switch DeepSeek Proxy" base_url = "http://127.0.0.1:15721/v1" wire_api = "responses" experimental_bearer_token = "cc-switch-local-proxy"

关键字段 wire_api = "responses"。Codex 使用 OpenAI Responses API 格式(/v1/responses 端点),而 DeepSeek 只支持标准的 Chat Completions API(/v1/chat/completions 端点)。 从日志和抓包结果看,CC Switch 当时并未完成预期的 Responses → Chat Completions 协议转换,因此 DeepSeek 收到了不兼容的请求并返回 502。

请求链路:

Codex → CC Switch(15721) → DeepSeek API /v1/responses → 502 ❌

第一次尝试:改 wire_api

我尝试把 wire_api 从 "responses" 改为 "chat_completions",结果 Codex 直接报配置错误:

invalid configuration: unknown variant `chat_completions`,expected `responses` in `model_providers.custom.wire_api`

结论:Codex 只认 wire_api = "responses",这个字段不能改。

第二次尝试:启用 CC Switch 本地路由

CC Switch 从 v3.16.0 开始内置了 Responses → Chat Completions 协议翻译功能,需要到 设置 → 路由 → 本地路由 中开启。但开启后依然 502,日志显示 CC Switch 的路由功能没有实际生效(数据库中没有产生路由相关的表和日志)。

踩坑二:模型名不匹配

既然 CC Switch 的路由不生效,我决定部署一个独立的协议桥接代理,绕过 CC Switch 直接处理协议翻译。使用 GitHub 上的开源项目 codex-deepseek,部署在 127.0.0.1:11435。

修改 config.toml 指向桥接代理:

base_url = "http://localhost:11435/v1" wire_api = "responses" experimental_bearer_token = "sk-你的DeepSeek密钥"

用 Python 直接测试桥接代理,一切正常(200 OK,SSE 流式响应正确)。但 Codex 还是 502!

抓包分析——关键突破

我写了一个原始 TCP 抓包脚本,拦截 Codex 发出到桥接代理的请求,发现了惊人的事实——Codex 实际发送的请求体中:

{ "model": "gpt-5.4-mini", "instructions": "You are Codex...", ... }

模型是 gpt-5.4-mini,不是 deepseek-v4-pro!

虽然 config.toml 里写的是 model = "deepseek-v4-pro",但 Codex 不认这个自定义模型名,直接用了自己的内部默认模型 gpt-5.4-mini。桥接代理把这个模型名原样发给 DeepSeek,DeepSeek 不认识,返回 502。

这才是真正的罪魁祸首。

下面我就把文件的关键片段在Trae里面展示

终极解决方案:两层修复

第一层:协议翻译

部署桥接代理 proxy.py,在 127.0.0.1:11435 上监听,将 Codex 的 Responses API 请求翻译为 DeepSeek 的 Chat Completions API 请求,并将响应翻译回去。

第二层:模型名映射

在桥接代理中添加模型名改写逻辑:

# 在 do_POST 中

body = json.loads(raw)

# 构建 chat 请求后

chat_body = built["chat_body"]

if chat_body.get("model", "") != _MODEL:

chat_body["model"] = _MODEL # 强制映射为 deepseek-v4-pro

这样无论 Codex 发送 gpt-5.4-mini 还是任何其他模型名,都会被映射为 deepseek-v4-pro。

最终请求链路

架设桥接代理(完整步骤)

1. 获取代码

从 GitHub 下载桥接代理(Python 标准库实现,无需 pip install):

git clone https://github.com/yangfei4913438/codex-deepseek # 或 git clone https://github.com/Nigel211/codex_deepseek_proxy

2. 配置环境变量(.env)

api_key=sk-你的DeepSeek密钥 base_url=https://api.deepseek.com model=deepseek-v4-pro port=11435 timeout=30 is_deepseek=true

3. 添加模型名映射

在 do_POST 方法中 build_chat_body(body) 执行后添加:

chat_body = built["chat_body"] if chat_body.get("model", "") != _MODEL: chat_body["model"] = _MODEL # 强制映射

4. 启动

python proxy.py

5. 配置 Codex

修改 ~/.codex/config.toml,将 base_url 指向桥接代理:

model_provider = "custom" model = "deepseek-v4-pro" model_reasoning_effort = "medium" disable_response_storage = true [model_providers] [model_providers.custom] name = "DeepSeek Bridge Proxy" base_url = "http://localhost:11435/v1" wire_api = "responses" experimental_bearer_token = "sk-你的DeepSeek密钥"

6. 重启 Codex

关闭所有 Codex 进程,重新启动即可。

注意事项

  • 不要重启 CC Switch:CC Switch 每次启动都会覆盖 config.toml,把 base_url 改回 127.0.0.1:15721。如果需要在 CC Switch 中使用,可以在 CC Switch 中将 DeepSeek 提供商的端点 URL 改为 http://127.0.0.1:11435。
  • 桥接代理需要常驻后台:可以把 python proxy.py 设为开机自启,或使用 nohup / Windows 任务计划程序保持运行。
  • 模型选择器不会显示 DeepSeek:由于 Codex 不认自定义模型名,模型选择下拉框不会显示 deepseek-v4-pro。这是正常的,不影响实际使用——桥接代理会自动做模型名映射。
  • CC Switch 版本要求:如果坚持只用 CC Switch,确保版本 ≥ 3.16.1 且开启了本地路由功能。但根据实测,即使开启也可能不生效。

总结

整个排查过程踩了三个坑:

现象

根因

解方

协议不匹配

502 Bad Gateway

Codex 用 Responses API,
DeepSeek 只支持 Chat Completions

部署协议翻译代理

wire_api 不可改

Codex 配置报错

Codex 只接受 responses 值

在代理层翻译,
不动 wire_api

模型名不匹配

桥接代理 502

Codex 发送 gpt-5.4-mini,
DeepSeek 不认识

代理层强制映射模型名

第三个坑是最隐蔽的——从日志、配置、文档上都看不出问题,必须抓包分析实际请求体才能发现。

如果你也遇到类似问题,建议先抓包看 Codex 实际发送了什么,这比盲目改配置高效得多。

当然,我也希望这篇文章能帮助到你,也希望大家在评论区里友好交流,共同进步!

相关资源

  • Codex DeepSeek Bridge Proxy (yangfei4913438):https://github.com/yangfei4913438/codex-deepseek
  • Codex DeepSeek Proxy (Nigel211):https://github.com/Nigel211/codex_deepseek_proxy
  • CC Switch 本地路由教程:https://segmentfault.com/a/1190000047807394

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询