CC Switch 显示错误模型名的排查与解决

CC Switch 显示错误模型名的排查与解决

2026/6/8

问题描述

我用 CC Switch + 自建代理(DeepSeek Web Agent Proxy)给 Claude Code 做中转,代理后端是通义千问(Qwen)。代理本身没问题 --- 响应里每个 SSE chunk 都返回 "model": "qwen3.7-max",但 CC Switch 的用量面板里一直显示 claude-opus-4-8

其他中转站没这个问题,只有自建代理会出现。

排查过程

1. 确认代理侧没问题

抓包确认,我们代理的响应每个 chunk 都带了正确的 model

json 复制代码
data: {"id":"...","object":"chat.completion.chunk","model":"qwen3.7-max","choices":[...],"usage":{...}}

非流式响应也一样:

json 复制代码
{"id":"...","model":"qwen3.7-max","choices":[...],"usage":{...}}

响应 100% 正确,问题不在我们这边。

2. 查 CC Switch 日志

翻 CC Switch 的日志文件 ~/.cc-switch/logs/cc-switch.log,发现转发时 model 已经被正确替换了:

复制代码
[Claude] >>> 请求 URL: http://127.0.0.1:48391/v1/chat/completions (model=qwen3.7-max)

日志显示 CC Switch 知道 实际转发的是 qwen3.7-max

3. 查 CC Switch 数据库

CC Switch 用 SQLite 存请求日志。查 proxy_request_logs 表:

sql 复制代码
SELECT model, request_model FROM proxy_request_logs 
WHERE app_type='claude' ORDER BY created_at DESC LIMIT 5;

结果:

model request_model
claude-opus-4-8 claude-opus-4-8
claude-opus-4-8 claude-opus-4-8
claude-opus-4-8 claude-opus-4-8

modelrequest_model 都是 claude-opus-4-8。CC Switch 转发时用了 qwen3.7-max,但写数据库时没记录转发后的 model

4. 定位根因

搜 CC Switch 的 GitHub Issues,找到了 Issue #3846

Bug: Streaming timeout causes wrong model name and zero tokens in usage logs

当流式响应的 model 提取失败时,claude_model_extractor 回退到 request_model(请求体的原始 model)。

根本原因在 CC Switch 的 Rust 代码里。CC Switch 做 Anthropic → OpenAI 格式转换时,转发器会把 model 替换成配置的模型名(qwen3.7-max),但写数据库的 usage 收集器 从 SSE 事件中提取 model 名时失败了,回退到了 request_model(Claude Code 发过来的 claude-opus-4-8)。

流程是这样的:

复制代码
Claude Code 发请求 → body.model = "claude-opus-4-8"
    ↓
CC Switch 转发 → 替换为 model = "qwen3.7-max",发给我们的代理
    ↓
我们的代理返回 → 响应 model = "qwen3.7-max"(正确)
    ↓
CC Switch 收到响应 → 转回 Anthropic 格式给 Claude Code
    ↓
CC Switch 写数据库 → model_extractor 从 SSE 事件中提取 model 失败
    ↓
回退到 request_model = "claude-opus-4-8"(错误)

5. 为什么其他中转站没问题?

其他中转站(如 pie-xian)用的是 Anthropic 原生格式apiFormat: "anthropic"),CC Switch 不需要做格式转换,直接透传。这种情况下 model 提取是正常的。

我们用的是 OpenAI Chat Completions 格式apiFormat: "openai_chat"),CC Switch 需要做 Anthropic ↔ OpenAI 的双向转换。格式转换路径上的 model 提取逻辑有 bug。

解决方案

CC Switch v3.16.3(2026-06-14 发布)修复了这个问题。

更新日志关键内容

路由接管流量按真实上游模型计费

当请求被路由到了不同的上游时,代理过去会按上游回显的模型来归因和计价...现在转发器会捕获真实的出站模型,按「上游回显 → 出站模型 → 客户端别名」的顺序归因,并在每行持久化实际使用的定价依据(schema v11)。
PR #2774:修复 Completions 转 Anthropic 时不记录实际返回模型、input token 计算错误。

升级方法

  1. GitHub Releases 下载 v3.16.3 的 MSI 安装包
  2. 安装后重启 CC Switch
  3. 发一个请求验证

验证

升级后查数据库:

sql 复制代码
SELECT model, request_model FROM proxy_request_logs 
WHERE app_type='claude' ORDER BY created_at DESC LIMIT 5;

应该能看到:

model request_model
qwen3.7-max claude-opus-4-8

model 变成了实际转发的 qwen3.7-maxrequest_model 保留了 Claude Code 发来的 claude-opus-4-8

关键文件路径

文件 说明
~/.cc-switch/cc-switch.db SQLite 数据库,proxy_request_logs 表存请求日志
~/.cc-switch/logs/cc-switch.log CC Switch 运行日志
~/.cc-switch/settings.json 全局设置

总结

  • 问题出在 CC Switch 的格式转换路径(OpenAI → Anthropic)上,model 提取逻辑有 bug
  • 不是代理的问题,代理响应完全正确
  • 升级到 CC Switch v3.16.3 即可解决
  • 其他中转站用 Anthropic 原生格式不受影响,只有用 OpenAI Chat Completions 格式的自建代理会遇到
相关推荐
Marco_Marco135几秒前
开源地图API vs 商业地图API:选型全对比
经验分享·开源
樊小肆15 分钟前
DeepSeeker-Code源码导读02-runAgent主循环
人工智能·agent
ClouGence32 分钟前
数据库管理工具 CloudDM 4.1.0 发布,支持达梦、Cloudberry
数据库·开源
labixiong37 分钟前
DeepSeek V4 Pro 首日实测:用前端项目跑了一遍,Agent 能力暴涨8倍是真的吗?
agent·ai编程·deepseek
云卷云舒___________1 小时前
【加急快讯】DeepSeek Harness 深夜开源!主打「一切皆插件」,由 Cordis 驱动
开源·aiagent·deepseek·ai日报·智能体框架·deepseekharness·cordis
Vuji1 小时前
深入 pi-agent 内核:完整追踪一次 CLI 交互的完整链路
前端·agent
zlinear数据采集卡1 小时前
ZLinear产品线全景对比:D223 vs DABL7606 vs DABL-G511选型指南
arm开发·嵌入式硬件·算法·fpga开发·开源
ClouGence2 小时前
实测 DeepSeek V4 Pro 正式版:从数据分析、做网站到复杂模拟,能做到什么程度?
agent·ai编程·deepseek
cyadyx2 小时前
OpenTelemetry将 Agent 集成数据上报到 Langfuse
agent·opentelemetry·langfuse
樊小肆3 小时前
DeepSeeker-Code源码导读01-agentNudges
人工智能·agent