Codex + cc-switch 对接配置
摘要 : 本文记录了 Codex CLI 无法使用 deepseek 模型、cc-switch 拦截不到请求的故障排查全过程。核心问题是 Codex 配置目录 (
C:\Users\Junbai\.codex\) 缺少config.toml文件,导致 Codex 直接使用真实 API Key 直连外部 API,绕过了 cc-switch 代理。解决方案是在 Codex 配置目录中创建正确的config.toml、复制模型目录文件,并将auth.json中的 API Key 改为PROXY_MANAGED。修复后,Codex 与 Claude 均通过 cc-switch 统一代理访问 deepseek API。
日期 : 2026-06-30场景: Codex CLI 无法使用 deepseek 模型,cc-switch 拦截不到 Codex 的请求
目录
资源文档:https://my.feishu.cn/wiki/ToppwTzkdire2BkVXrXcUWkTnWd?from=from_copylink
问题现象
- cc-switch 已配置 deepseek-v4-flash 模型
- Codex CLI 中看不到 deepseek 模型列表
- cc-switch 拦截不到 Codex 发出的任何 API 请求
- Codex 依然在直连外部 API
环境信息
| 项目 | 值 |
|---|---|
| cc-switch 安装目录 | D:\bianchen\ccswitch\ |
| cc-switch 代理地址 | http://127.0.0.1:15721/v1 |
| cc-switch 运行状态 | ✅ 运行中 (PID 17244) |
| Codex 配置目录 | C:\Users\Junbai\.codex\ |
| Codex 版本 | v0.142.4 |
| 系统 | Windows 11 |
排查过程
步骤 1: 检查 cc-switch 配置
bash
cat D:\bianchen\ccswitch\.codex\config.toml
model_provider = "custom"
model = "deepseek-v4-flash"
model_reasoning_effort = "high"
disable_response_storage = true
model_catalog_json = "cc-switch-model-catalog.json"
[model_providers]
[model_providers.custom]
name = "deepseek"
base_url = "http://127.0.0.1:15721/v1"
wire_api = "responses"
requires_openai_auth = true
✅ cc-switch 配置正常,代理地址为 localhost:15721
步骤 2: 检查 cc-switch auth
json
// D:\bianchen\ccswitch\.codex\auth.json
{
"OPENAI_API_KEY": "PROXY_MANAGED"
}
✅ PROXY_MANAGED --- 鉴权由 cc-switch 统一管理
步骤 3: 检查 Codex 配置目录
bash
ls C:\Users\Junbai\.codex\
发现 config.toml 不存在!
Codex CLI 的标准配置目录是 C:\Users\Junbai\.codex\,但这个目录下没有 config.toml,只有:
auth.json--- 含真实 API Keyversion.json--- 版本信息- 运行时数据库文件(goals、logs、memories、state)
步骤 4: 检查 Codex auth
json
// C:\Users\Junbai\.codex\auth.json
{
"auth_mode": "apikey",
"OPENAI_API_KEY": "sk-cf4642e3e4124128a993de0b753e3dfe"
}
❌ Codex 持有真实 API Key,直接发往 API 服务器
步骤 5: 检查 cc-switch 运行状态
bash
netstat -ano | grep 15721
TCP 127.0.0.1:15721 0.0.0.0:0 LISTENING 17244
TCP 127.0.0.1:15721 127.0.0.1:52619 ESTABLISHED 17244
TCP 127.0.0.1:52619 127.0.0.1:15721 ESTABLISHED 13020
- PID 17244 →
cc-switch.exe(代理正常监听) - PID 13020 →
claude.exe(当前 Claude Code 会话已连接到 cc-switch)
步骤 6: 检查模型目录
cc-switch 的 cc-switch-model-catalog.json 中有 deepseek-v4-flash、deepseek-v4-pro 等模型定义(共 127 行),Codex 目录下无此文件。
根因分析
┌─────────────────────────────────────────────┐
│ 请求流向图(修复前) │
│ │
│ Codex CLI ──auth.json 真实 Key──► API 服务器 │
│ ↑ (绕过!) │
│ │ │
│ 无 config.toml │
│ 不知道 cc-switch 的存在 │
│ │
│ cc-switch (127.0.0.1:15721) │
│ └─ 只有 Claude 连了它 │
└─────────────────────────────────────────────┘
一句话根因 : C:\Users\Junbai\.codex\ 是 Codex CLI 读取配置的目录,但它缺少 config.toml,所以 Codex 不知道自己应该通过 cc-switch 代理发送请求。它直接使用 auth.json 中的 API Key 直连外部服务器,cc-switch 完全拦截不到。
对比 Claude(正常情况):
| 工具 | 配置目录 | 有 config.toml? | 代理地址 | 状态 |
|---|---|---|---|---|
| Claude Code | D:\bianchen\ccswitch\.codex\ |
✅ | localhost:15721 |
✅ 正常 |
| Codex CLI | C:\Users\Junbai\.codex\ |
❌ 缺失 | 默认直连 | ❌ 绕过 |
解决方案
需要让 Codex CLI 也使用 cc-switch 代理,方法是在 C:\Users\Junbai\.codex\ 中创建正确的配置:
所需文件
| 文件 | 说明 |
|---|---|
config.toml |
Codex 核心配置,指定模型提供商、代理地址、模型目录 |
cc-switch-model-catalog.json |
模型定义文件(从 cc-switch 复制) |
auth.json |
修改 API Key 为 PROXY_MANAGED |
执行操作
操作 1: 复制模型目录
bash
cp "D:/bianchen/ccswitch/.codex/cc-switch-model-catalog.json" \
"C:/Users/Junbai/.codex/cc-switch-model-catalog.json"
作用: 让 Codex 能够识别 deepseek 系列模型(deepseek-v4-flash、deepseek-v4-pro 等)
操作 2: 创建 Codex config.toml
toml
# C:\Users\Junbai\.codex\config.toml
model_provider = "custom"
model = "deepseek-v4-flash"
model_reasoning_effort = "high"
disable_response_storage = true
model_catalog_json = "C:\\Users\\Junbai\\.codex\\cc-switch-model-catalog.json"
[model_providers]
[model_providers.custom]
name = "deepseek"
base_url = "http://127.0.0.1:15721/v1"
wire_api = "responses"
requires_openai_auth = true
关键字段说明:
| 字段 | 值 | 作用 |
|---|---|---|
model_provider |
"custom" |
使用自定义提供商(而非官方 OpenAI/Anthropic) |
model |
"deepseek-v4-flash" |
默认使用的模型,需在 catalog 中存在 |
base_url |
http://127.0.0.1:15721/v1 |
cc-switch 代理地址,所有请求发往这里 |
wire_api |
"responses" |
API 协议格式(OpenAI Responses API 兼容) |
requires_openai_auth |
true |
需要 OpenAI 兼容的鉴权头 |
model_catalog_json |
完整路径 | 指向模型定义文件 |
操作 3: 更新 Codex auth.json
json
{
"auth_mode": "apikey",
"OPENAI_API_KEY": "PROXY_MANAGED"
}
作用 : PROXY_MANAGED 是 cc-switch 的特殊标记,表示鉴权由代理处理,客户端不再持有真实密钥。
验证结果
修复后的请求流向
┌─────────────────────────────────────────────┐
│ 请求流向图(修复后) │
│ │
│ Codex CLI │
│ │ │
│ │ config.toml 指向 │
│ ▼ │
│ cc-switch (127.0.0.1:15721) │
│ │ │
│ │ 代理拦截、鉴权、路由 │
│ ▼ │
│ deepseek API ◄──── 统一管理 │
│ │
│ 所有 AI 工具都经过 cc-switch │
│ └─ Claude ✅ │
│ └─ Codex ✅ (新增) │
└─────────────────────────────────────────────┘
最终文件清单
bash
C:\Users\Junbai\.codex\
├── config.toml # ✅ 新增 - 指向 cc-switch 代理
├── cc-switch-model-catalog.json # ✅ 新增 - 模型定义 (93642 bytes)
├── auth.json # ✅ 修改 - PROXY_MANAGED
├── version.json # 已有
├── cap_sid # 已有
├── history.jsonl # 已有
├── *.sqlite # 已有运行时数据库
└── ...
核心原理
cc-switch 的工作方式
cc-switch 是一个本地 AI 代理/网关,运行在 127.0.0.1:15721。它:
- 拦截请求 : 接收发往
localhost:15721/v1的所有 API 请求 - 统一鉴权 : 管理所有 API Key(客户端用
PROXY_MANAGED占位) - 路由转发: 根据请求中的模型名,转发到对应的后端(deepseek、OpenAI 等)
- 模型兼容 : 通过
cc-switch-model-catalog.json向客户端暴露可用模型列表
配置目录分离机制
| 工具 | 配置目录 | 环境变量/规则 |
|---|---|---|
| Claude Code | 项目 .codex/ 或 ~/.codex/ |
优先使用工作目录附近的 .codex/ |
| Codex CLI | ~/.codex/(即 C:\Users\用户名\.codex\) |
固定在用户目录 |
| Cursor | 项目 .cursor/ |
项目级配置 |
教训: 不同工具的配置目录不同,配置 cc-switch 时需要分别配置每个工具。
故障排查 Checklist
如果以后再遇到"配置了代理但工具不经过代理"的问题:
- 1. 代理是否正在运行? →
netstat -ano | grep <端口> - 2. 工具读取的是哪个配置目录? → 查看文档或用
strace/Process Monitor - 3. 该目录下有没有
config.toml? →ls -la - 4.
auth.json中是否有真实 API Key? → 应改为PROXY_MANAGED - 5.
config.toml中的base_url是否正确? → 应为http://127.0.0.1:15721/v1 - 6. 模型名称在 catalog 中是否存在? →
grep deepseek cc-switch-model-catalog.json - 7. 有哪个进程连接到了代理? → 查看 ESTABLISHED 连接
- 8. 是否为每个工具都创建了对应的配置? → Claude/Codex/Cursor 各需独立配置
文档用途 : 记录 Codex CLI 对接 cc-switch 代理的全过程,供后续类似问题参考
相关文件 :
C:\Users\Junbai\.codex\config.toml、C:\Users\Junbai\.codex\auth.json创建时间: 2026-06-30