Codex+cc-switch对接配置

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

问题现象

  1. cc-switch 已配置 deepseek-v4-flash 模型
  2. Codex CLI 中看不到 deepseek 模型列表
  3. cc-switch 拦截不到 Codex 发出的任何 API 请求
  4. 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 Key
  • version.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 17244cc-switch.exe(代理正常监听)
  • PID 13020claude.exe(当前 Claude Code 会话已连接到 cc-switch)

步骤 6: 检查模型目录

cc-switch 的 cc-switch-model-catalog.json 中有 deepseek-v4-flashdeepseek-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。它:

  1. 拦截请求 : 接收发往 localhost:15721/v1 的所有 API 请求
  2. 统一鉴权 : 管理所有 API Key(客户端用 PROXY_MANAGED 占位)
  3. 路由转发: 根据请求中的模型名,转发到对应的后端(deepseek、OpenAI 等)
  4. 模型兼容 : 通过 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.tomlC:\Users\Junbai\.codex\auth.json

创建时间: 2026-06-30