CC Switch 本地路由:Codex 接入 Claude 网关
【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch
适用场景与解决路径
面向持有 Claude 网关密钥(仅开放/v1/messages端点)、希望用 Codex 运行 Claude 模型的开发者。阻塞点:新版 Codex 只讲 OpenAI Responses API,直连 Anthropic Messages 端点只能得到 404。解决路径:CC Switch 本地路由接管 Codex,完成两种协议的请求与响应互转,让 Codex 接入 Claude 网关。
请求在 Codex、本地路由与上游之间如何流转
Codex CLI │ Responses 请求(wire_api = "responses") ▼ 本地路由 127.0.0.1:15721/v1(CC Switch) │ 端点重写为 /v1/messages,请求体转为 Anthropic Messages ▼ 上游网关 /v1/messages ▲ Anthropic JSON / SSE │ 转回 Responses JSON / SSE(含推理、工具调用、图片) ▲ Codex CLI转换实现位于 transform_codex_anthropic.rs,方向与transform_responses.rs互为镜像;调用入口在 forwarder.rs 的codex_responses_to_anthropic分支。
环境与版本要求
| 项目 | 要求 | 说明 |
|---|---|---|
| CC Switch | 3.17.0 或更高 | Anthropic Messages 上游支持自 3.17.0 引入 |
| Codex CLI | 已安装并至少运行过一次 | 保证~/.codex/目录结构存在 |
| API 密钥 | 可访问/v1/messages端点 | 来自 Claude 家族中转网关或企业 Claude 网关;标注"仅限 Claude Code"的密钥经由 Codex 调用可能报错 |
| 模型 id | 网关文档中可识别的 Claude 模型名 | 如claude-sonnet-5;模型映射行同样以网关文档为准 |
供应商表单、路由开关与生效验证
表单字段怎么填
Codex 页签没有内置 Anthropic 预设,新增供应商时保持Custom Configuration,填写以下字段:
- Provider Name:任意名称。
- API Key:网关密钥。密钥只保存在 CC Switch,转发时由本地路由注入,Codex 的 live 配置(
auth.json)中只有占位符。 - API Request URL:只填服务根地址(如
https://claude-gateway.example.com),带不带尾部/v1均可,不要自行拼/v1/messages;网关文档给的是完整 messages URL 时,打开Full URL开关原样粘贴。 - Default Model:网关可识别的模型 id。
上游格式在哪里切换
展开Advanced Options,把Upstream Format从Responses (native)改为Anthropic Messages (routing required),随后出现三个配套字段:
- Auth field:决定密钥以哪种请求头注入上游,两者只发其一。默认
ANTHROPIC_AUTH_TOKEN (Authorization),发送Authorization: Bearer <key>;部分遵循 Anthropic 原生头约定的网关要求ANTHROPIC_API_KEY (x-api-key)。选错通常表现为 401 / 403。 - Emulate Claude Code client:默认关闭。开启后仿造 User-Agent、
anthropic-beta、x-app请求头,并在系统提示第一行注入 Claude Code 身份标识——对应 forwarder.rs 中codex_impersonate_claude_code为真时调用prepend_claude_code_system_prompt改写请求体。 - Max output tokens:Anthropic 协议要求
max_tokens必填。路由在请求体缺省该值时注入常量DEFAULT_CODEX_ANTHROPIC_MAX_TOKENS:8192,可在供应商表单的Max output tokens中覆盖;供应商 meta 中max_output_tokens > 0时优先级最高,会先注入请求体,覆盖请求自带值与默认值,thinking 预算的钳制也据此计算余量。
同区域Model Mapping可选:每行一个模型 id,CC Switch 据此生成模型目录供 Codex 的/model菜单列出;留空时 Codex 只用默认模型。
保存后供应商卡片出现Needs Routing标记——此类供应商仅在本地路由运行时可用。
路由开关与端口怎么改
设置页Routing→Local Routing,完成两个开关:
- 打开
Routing Master Switch启动本地服务,默认地址127.0.0.1:15721;端口可在代理面板修改,见用户手册 4.1。 - 在
Routing Enabled下打开Codex;Claude、Gemini 路由互不影响,见用户手册 4.2。
接管后,codex_config.rs 中的update_codex_toml_field以toml_edit语法保持地改写config.toml:base_url与wire_api写入当前model_provider对应的[model_providers.<current>]段并强制保留wire_api = "responses",测试用例base_url_writes_into_correct_model_provider_section覆盖该行为——接管后 Codex 仍以 Responses 协议对话。
如何验证已生效
- 回到供应商列表点击
Enable。若路由未启动,CC Switch 提示 "This provider uses Anthropic Messages API format, requires the routing service to work properly. Start routing first." - 重启当前 Codex 终端会话:
config.toml与模型目录在进程启动时读取,运行中的进程不热加载。 - 验证顺序:
/model查看映射模型是否列出;发送请求后,Routing 页 "Current Provider" 从 "Waiting for first request..." 变为该供应商、"Total Requests" 增长;用量面板中模型名如实显示为claude-*。
高级选项与能力边界
| 选项 / 行为 | 何时调整 / 是否支持 |
|---|---|
Auth field:默认Authorization头,可切x-api-key | 上游 401 / 403 时按网关文档切换 |
| Emulate Claude Code client:默认关闭 | 网关限定 Claude Code 客户端时开启,普通网关保持关闭 |
| Max output tokens:覆盖缺省时的 8192 上限 | 回答被截断(stop_reason=max_tokens)时调大,勿超模型真实上限,否则上游 400 |
Model Mapping:生成/model模型目录 | 需要多模型切换时逐行添加 |
| Prompt 缓存:✅ 转换完成后自动注入标准 5 分钟缓存标记(system、工具定义、对话历史) | 无需调整 |
| 推理与工具:✅ extended thinking 原样往返,多轮工具调用、图片、PDF 输入均完整转换 | 无需调整 |
[1m]长上下文:✅ 剥离模型名后缀并加context-1m-2025-08-07beta 头(上游模型名回写后会在最终请求体上再剥离一次) | 网关支持 1M 上下文时 |
| Web search:⚠️ Anthropic 上游下被禁用,避免向模型展示必然失败的工具 | 需要联网搜索时切回 Responses / Chat 格式供应商 |
补充机制:
- Codex 的
reasoning.effort经effort_to_thinking_budget映射为 thinking token 预算:minimal/low → 2048、medium → 8192、high → 16384、xhigh/max/ultra → 24576;未识别值返回None,不启用 extended thinking(避免误吞 temperature/top_p)。 - Anthropic 带签名的 thinking / redacted-thinking 块经 Base64 编码后存入 Responses 的
reasoning.encrypted_content(前缀ccswitch-anthropic-thinking-v1:),Codex 在下一轮工具请求中原样回放。 - 上游在输出上限处停止或流中断时,Codex 收到的是 "incomplete" 而非成功,便于定位并调大输出上限。
故障排查、合规与致谢
| 现象 | 原因 | 动作 |
|---|---|---|
| 上游 401 / 403 | Auth field 与网关鉴权头不匹配,或密钥失效、无余额 | 在Authorization与x-api-key之间切换重试;核对密钥 |
Codex 报 404 或找不到/responses | 本地路由接管未开启,或网关地址被直接写入 Codex 配置 | 检查~/.codex/config.toml当前供应商base_url是否为http://127.0.0.1:15721/v1 |
| 路由已开启仍 404 | API Request URL 带了其他协议路径(如/chat/completions) | 只填服务根地址,或用Full URL开关粘贴完整 messages 端点 |
| 回答被截断 | 默认 8192 输出上限生效 | 表单Max output tokens调大后重试 |
/model不显示 Claude 模型 | 模型目录随进程启动加载,未重启或未配置映射 | 保存供应商后重启 Codex;默认模型不在映射中时菜单不列出但直接请求仍可用 |
在"组织禁用客户端但保留网关"的场景启用本方案前,确认被禁用的是特定客户端还是某类使用方式,以所在组织政策为准;使用第三方中转网关时,阅读其计费、合规与数据留存条款。
该功能源自社区贡献(PR #5071,@yeeyzy)。
相关文档与源码:
- 用户手册:Proxy Service
- 用户手册:App Routing
- v3.17.0 发布说明
- 核心转换实现:transform_codex_anthropic.rs、forwarder.rs、codex_config.rs
【免费下载链接】cc-switchA cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io项目地址: https://gitcode.com/GitHub_Trending/cc/cc-switch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考