用 CC Switch 把 DeepSeek 接入 Claude Code:为什么能用,却没有官方 Opus 稳?
副标题: 基于 Windows11 + CC Switch 3.16.5 + Claude Code 2.1.191 的实测分析、根因定位与工程化改进建议
测试日期: 2026-07-15
适用读者: Claude Code、CC Switch、DeepSeek API、AI 编程助手和嵌入式开发用户
摘要
通过 CC Switch 将 DeepSeek 接入 Claude Code 后,API 请求可以正常完成,模型映射也可以正确工作,但实际使用体验可能仍明显弱于官方 Claude Opus:响应时间更长、工具调用次数更多、容易继续搜索而不收敛、偶尔调用根本没有提供的工具,并在达到 max-turns 后没有给出最终答案。
本文不是简单比较“哪个模型更聪明”,而是分析一个更具体的问题:为什么兼容 Anthropic API 的 DeepSeek,接入 Claude Code 后仍无法获得与官方 Claude 模型相同的 Agent 行为?
本次排查确认:
- CC Switch 本地代理、DeepSeek 鉴权、模型路由均正常;
- Opus、Sonnet、Haiku 角色分别正确映射到 DeepSeek Pro/Flash;
- 关闭终端标题后,额外的后台 Flash 请求消失;
- MCP、Skills、Hooks 并不是本轮故障的必要条件;
- 即使使用
--safe-mode,DeepSeek Pro 仍持续搜索、耗尽工具轮次,并无法稳定形成最终答案; - 在请求只提供
Read、Glob、Grep的情况下,DeepSeek Pro 仍偶发生成不存在的Bash工具调用; medium相比high略省 Token 和时间,但没有改善完成率。
结论: 这类问题可以缓解,但仅靠 CC Switch 配置无法彻底解决。根本差异位于模型对 Claude Code Agent Loop、工具协议、停止条件和系统提示词的适配程度。
一、问题背景
我的原始使用体验是:
- 使用 CC Switch 把 DeepSeek 接入 Claude Code 后,感觉没有以前的官方 Opus 模型聪明;
- 每次任务耗时更长;
- 模型会无意间多做没有要求的工作;
- Token 消耗明显增加;
- 对“只读分析”“不要扩展任务”“完成后立即停止”等指令遵循不稳定。
最初需要排除三类可能:
- 接入错误: 模型路由、Base URL、API Key、协议转换或本地代理异常;
- 配置干扰: MCP、Skills、Hooks、CLAUDE.md、Auto memory 或后台请求过多;
- 模型适配问题: DeepSeek 对 Claude Code 工具循环和停止条件的处理与官方 Claude 模型存在差异。
二、系统架构与数据链路
启用 CC Switch 本地路由后,实际链路为:
Claude Code
↓ Anthropic Messages 请求
http://127.0.0.1:15721
↓
CC Switch 本地代理
↓ 模型映射、认证注入、请求记录
https://api.deepseek.com/anthropic
↓
DeepSeek V4 Pro / Flash
Claude Code 的实时配置中应看到:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "PROXY_MANAGED",
"ANTHROPIC_BASE_URL": "http://127.0.0.1:15721"
}
}
DeepSeek 供应商配置中则保存真实地址和 API Key。两者不能混淆:
- Claude Code 实时配置:指向 CC Switch 本地代理;
- CC Switch 供应商配置:指向 DeepSeek 上游接口。
DeepSeek 官方文档提供了直接通过 Anthropic 兼容接口接入 Claude Code 的环境变量示例,包括 deepseek-v4-pro[1m]、deepseek-v4-flash 和子代理模型配置。与此同时,Anthropic 官方明确说明:第三方网关可以实现支持的 API 格式,但 Anthropic 不支持通过网关将 Claude Code 路由到非 Claude 模型。这意味着“协议能通”不等于“Agent 行为被官方保证”。
三、测试环境
| 项目 | 配置 |
|---|---|
| 操作系统 | Windows 11 |
| CC Switch | 3.16.5 |
| Claude Code | 2.1.191 |
| 上游模型 | DeepSeek V4 Pro / DeepSeek V4 Flash |
| 测试仓库 | JLink_MCP |
| 本地代理 | 127.0.0.1:15721 |
| 默认 effort | high,后续与 medium 对照 |
| 数据来源 | Claude Code JSON、Claude Tap、CC Switch SQLite 只读日志、Git 状态 |
实验边界: 本文没有进行官方 Claude Opus 的同条件数值对照,因此不能把本文解读为通用模型排行榜。本文证明的是:在该仓库和测试条件下,DeepSeek Pro 即使在干净模式中也存在工具循环不收敛和非法工具调用问题;与官方 Opus 的差异部分来自用户长期使用体验和官方支持边界,而不是一组完整的官方模型基准。
四、第一阶段:确认接入是否正确
4.1 Base URL 与本地代理
排查过程中曾出现:
Failed to extract base_url
Claude Provider 缺少 base_url 配置
修复 CC Switch 供应商层的真实 ANTHROPIC_BASE_URL 后,健康检查恢复。随后验证本地端口:
Get-NetTCPConnection -State Listen -LocalPort 15721
Test-NetConnection 127.0.0.1 -Port 15721
结果:
127.0.0.1:15721 Listen
TcpTestSucceeded : True
说明 Claude Code 到 CC Switch 本地代理的链路正常。
4.2 模型映射验证
通过三个最小请求和 CC Switch 数据库记录,确认映射如下:
| Claude Code 请求角色 | CC Switch 最终模型 | 结果 |
|---|---|---|
| Opus | deepseek-v4-pro |
正确 |
| Sonnet | deepseek-v4-pro |
正确 |
| Haiku | deepseek-v4-flash |
正确 |
这一步排除了“Sonnet 意外落到 Flash”“主任务没有使用 Pro”等路由错误。
4.3 额外后台标题请求
初始测试中:
- Opus 命令产生 2 次上游调用;
- Haiku 命令产生 2 次上游调用;
- 多出的调用约为 338 输入 Token、11~15 输出 Token,并走 Flash。
加入:
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1"
后,Opus 和 Haiku 均只剩 1 次上游请求。说明额外 Token 的一个明确来源是 Claude Code 的后台标题请求,而不是 CC Switch 重试或模型回退。
五、第二阶段:排除配置干扰
静态盘点发现:
| 配置项 | 实际情况 |
|---|---|
| 用户级 CLAUDE.md | 12,994 字节,包含跨项目资料和过时版本信息 |
| Auto memory | 有“跨模块分析先出计划”等规则 |
| MCP | 用户级全局 jlink、edge |
| Skills | 0 |
| Hooks | 0 |
| 自定义 Agents | 0 |
| 插件 | claude-hud 0.1.0,无 Hook/Skill/Agent |
用户级 CLAUDE.md 和 Auto memory 的确会增加上下文与行为约束,但关键问题是:A 组在完全关闭这些定制内容后仍然失败。
A/B/C 三组中位数
| 组别 | 加载内容 | 请求数 | 输入 Token | 输出 Token | Cache 读取 | 总耗时 | 完成率 |
|---|---|---|---|---|---|---|---|
| A | --safe-mode 干净基线 |
10 | 21,944 | 1,525 | 86,656 | 30,022 ms | 0/3 |
| B | A + 用户级 CLAUDE.md | 10 | 23,074 | 1,767 | 110,080 | 41,806 ms | 1/3 |
| C | B + Auto memory | 10 | 26,664 | 2,592 | 140,544 | 47,547 ms | 1/3 |
增量分析
- A → B:总耗时中位数增加约 39.3%,Cache 读取增加约 27%;
- B → C:输入 Token 增加约 15.6%,输出 Token 增加约 46.7%,耗时增加约 13.7%;
- Auto memory 三次样本均出现 Bash 工具倾向;
- 但 A 组完全关闭 CLAUDE.md、memory、MCP、Skills、Hooks 后,仍 3/3 耗尽 10 次请求并没有最终答案。
因此:
- CLAUDE.md 和 Auto memory 是明显放大器;
- 它们不是根本原因;
- MCP、Skills、Hooks 不是本轮问题成立的必要条件。
六、第三阶段:工具协议与停止行为验证
6.1 Claude Tap 检查工具列表
通过 Claude Tap 抓取请求,仅分析 request.body.tools[].name:
Glob
Grep
Read
请求中没有 Bash。
6.2 DeepSeek 仍生成不存在的 Bash
在 6 个 medium/high 对照样本中,DeepSeek Pro 有 2 次生成 Bash tool_use,尽管请求中没有提供 Bash。
这意味着模型存在“工具幻觉”:
模型生成 Bash tool_use
↓
Claude Code 无法执行或拒绝
↓
模型需要额外一轮纠错
↓
增加 Token、延迟,并降低收敛概率
6.3 high 与 medium 对照
| effort | 请求数中位数 | 输入 Token | 输出 Token | 总耗时 | 完成率 | 非法工具样本率 |
|---|---|---|---|---|---|---|
| high | 6 | 3,797 | 866 | 17,015 ms | 0/3 | 1/3 |
| medium | 6 | 3,577 | 681 | 15,867 ms | 0/3 | 1/3 |
medium 相比 high:
- 输入 Token 约少 5.8%;
- 输出 Token 约少 21.4%;
- 总耗时约少 6.7%;
- 完成率没有改善;
- 非法工具出现率相同。
所以 medium 更经济,但不能修复核心行为问题。
七、为什么“API 兼容”不等于“Agent 能力等价”
7.1 Claude Code 不只是一个聊天界面
Claude Code 包含:
- 大型系统提示词;
- 文件读取、搜索、编辑和 Bash 工具;
- 多轮 Agent Loop;
- 工具结果回传;
- 子代理和模型角色;
- 停止条件、权限判断和上下文管理。
官方 Claude 模型不仅要“理解代码”,还需要稳定遵守 Claude Code 的隐含工作协议:
- 只调用实际提供的工具;
- 正确填写工具参数;
- 工具失败后调整策略;
- 判断何时证据已经足够;
- 在轮次预算耗尽前输出最终答案;
- 遵循系统、用户、memory 和项目规则之间的优先级。
7.2 兼容层只保证字段可收发
Anthropic API 兼容主要解决:
- 请求地址;
- Header 与认证;
messages数据结构;tools、tool_use、tool_result;- 流式响应;
- 模型名称映射。
它不自动保证:
- 模型经过 Claude Code 专门训练;
- 模型对所有工具 Schema 严格约束;
- 模型与 Claude Code 的停止策略一致;
- 模型对复杂系统提示词具有同等优先级处理能力;
- 第三方网关完整转发所有新字段和未来协议变化。
Anthropic 官方明确表示不支持通过网关把 Claude Code 路由到非 Claude 模型。这一声明并不是说第三方模型一定不能用,而是意味着这种组合不存在官方兼容性保证。
八、CC Switch + DeepSeek 与官方 Claude 模型的差异
| 维度 | 官方 Claude 模型 | CC Switch + DeepSeek |
|---|---|---|
| Claude Code 官方支持 | 官方目标模型 | 非官方组合,Anthropic 不保证 |
| API 协议 | 原生 | Anthropic 兼容接口 + 网关转发 |
| 模型角色 | Opus/Sonnet/Haiku 原生语义 | 通过模型映射转换为 Pro/Flash |
| 工具约束 | 通常更贴合 Claude Code | 实测偶发调用未提供的 Bash |
| Agent 收敛 | 通常更能判断何时停止 | 实测持续搜索并耗尽 turns |
| 最终答案 | 更可能在预算内总结 | 实测多次停在 tool_use |
| 系统提示适配 | 针对 Claude Code 设计 | 能理解,但不是同一训练分布 |
| MCP/Tool Search | 官方协议同步 | 依赖网关是否完整支持新字段 |
| 成本 | 通常更高 | 通常更低,具体以 DeepSeek 计费为准 |
| 可观测性 | Claude Code 自身 | CC Switch 可增加路由与用量日志 |
| 配置复杂度 | 较低 | 需要管理 Base URL、映射、代理和兼容项 |
| 风险 | 官方产品边界内 | 模型、网关和客户端三方版本耦合 |
九、这类问题有没有办法解决?
答案需要分三层看。
9.1 仅靠用户配置:不能彻底解决,但可以明显缓解
可以解决:
- 路由错误;
- Base URL 与本地代理故障;
- 标题辅助请求;
- 过长 CLAUDE.md;
- Auto memory 干扰;
- 全局 MCP 上下文过多;
- effort 和 max-turns 过高;
- 任务边界不清晰。
不能通过配置保证:
- DeepSeek 永远不生成不存在的工具;
- DeepSeek 一定在 turns 用尽前输出答案;
- DeepSeek 对 Claude Code 的隐含协议达到官方 Claude 的稳定度。
9.2 CC Switch 或 Agent 层:可以工程化改善
CC Switch 或外部 Agent 控制层可以增加:
-
严格工具验证器
响应中的工具名不在请求工具列表时,拦截并要求模型改写,而不是交给 Claude Code 执行。 -
轮次预算控制器
在剩余 1~2 轮时强制移除工具,只允许模型生成最终文本。 -
模型专用系统提示适配
对 DeepSeek 注入更明确的停止规则、工具预算和仓库边界。 -
错误参数修复与工具名映射
对常见工具参数错误进行结构化校验,但必须避免擅自改变用户意图。 -
分级模型路由
DeepSeek 负责局部分析和代码生成;复杂开放式 Agent 任务切换到官方 Claude 或其他更稳定模型。 -
可观测性与自动降级
当连续多轮只产生工具调用、重复搜索或无效工具时,主动终止并输出当前证据。
这些方法可以改善完成率,但通常需要修改代理或 Agent Loop,不是勾选一个选项即可完成。
9.3 模型提供方:才可能从根本上提升
真正根治需要模型提供方在以下方面改进:
- Anthropic 工具调用协议训练;
- 工具集合严格约束;
stop_reason和最终回答策略;- 长系统提示词下的优先级遵循;
- Windows 路径与仓库边界;
- Claude Code/Agent 场景专项评测。
因此,问题不是“永远没办法”,而是:当前用户侧配置无法完全解决,必须依赖模型、代理和 Agent 运行时共同改进。
十、推荐配置与使用策略
10.1 CC Switch 的 DeepSeek 供应商配置
{
"effortLevel": "medium",
"disableClaudeAiConnectors": true,
"skipWebFetchPreflight": true,
"env": {
"ANTHROPIC_AUTH_TOKEN": "<DEEPSEEK_API_KEY>",
"ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
"ANTHROPIC_MODEL": "deepseek-v4-pro[1m]",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-v4-pro[1m]",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-v4-pro[1m]",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-v4-flash",
"ANTHROPIC_DEFAULT_FABLE_MODEL": "deepseek-v4-pro[1m]",
"CLAUDE_CODE_SUBAGENT_MODEL": "deepseek-v4-flash",
"CLAUDE_CODE_DISABLE_TERMINAL_TITLE": "1",
"CLAUDE_CODE_DISABLE_AUTO_MEMORY": "1",
"ENABLE_CLAUDEAI_MCP_SERVERS": "false",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"DISABLE_FEEDBACK_COMMAND": "1"
},
"theme": "dark"
}
10.2 Claude Code 实时配置
开启 CC Switch 本地路由后,Claude Code 实时配置应由 CC Switch 管理:
{
"env": {
"ANTHROPIC_AUTH_TOKEN": "PROXY_MANAGED",
"ANTHROPIC_BASE_URL": "http://127.0.0.1:15721"
}
}
10.3 精简用户级 CLAUDE.md
用户级文件只保留稳定、跨项目通用的规则:
# 通用规则
- 默认只处理当前 Git 仓库和用户明确指定的路径。
- 未经授权,不访问仓库外目录。
- 只读分析时,优先基于已有证据回答。
- 同一失败操作最多重试一次。
- 工具预算不足时,停止搜索并明确不确定项。
- 用户要求立即回答时,不额外生成计划。
- 未经明确要求,不联网、不调用 MCP、不运行构建或测试。
- 不把历史软件版本和硬件状态视为当前事实。
磁盘布局、软件清单、Python 路径和版本快照应拆分为按需读取的参考文档。
10.4 为任务设置硬预算
只查看当前 Git 根目录。
最多执行 1 次 Glob、1 次 Grep,最多读取 5 个文件。
工具失败一次后不要重试。
无论信息是否完整,都必须输出最终结论,并列出不确定项。
不要调用 Bash、Task、Web 或 MCP。
配合:
--effort medium
--max-turns 4或6
--tools "Read,Glob,Grep"
--disallowedTools "Bash,Edit,Write,Task,WebFetch,WebSearch,mcp__*"
硬预算不能根治模型行为,但可以限制最坏情况下的 Token 损失。
十一、任务分工建议
| 任务类型 | 推荐模型/工具 |
|---|---|
| 指定文件解释、局部代码生成 | DeepSeek + Claude Code |
| 单文件或少量文件修改 | DeepSeek + 明确路径和验收标准 |
| 开放式仓库探索 | 官方 Claude Opus 或更稳定的 Agent 模型 |
| 跨模块架构、复杂重构 | 官方 Claude / Codex 等强 Agent 工具 |
| J-Link、示波器、硬件控制 | 专用项目 + 项目级 MCP + 明确授权 |
| 方案分析和任务拆解 | ChatGPT 等独立推理助手 |
DeepSeek 更适合作为低成本、边界明确的执行模型,而不是完全替代官方 Opus 的无人值守主 Agent。
十二、网络、隐私与“是否还需要代理”
当 Claude Code 的模型请求经过 CC Switch 转发到 DeepSeek 时,核心 /v1/messages 流量不再直接发送到 Anthropic 模型 API。但 Claude Code 仍可能因更新、遥测、错误报告、连接器或 WebFetch 预检查访问其他域名。
可以通过以下配置减少非必要流量:
{
"disableClaudeAiConnectors": true,
"skipWebFetchPreflight": true,
"env": {
"ENABLE_CLAUDEAI_MCP_SERVERS": "false",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"DISABLE_FEEDBACK_COMMAND": "1"
}
}
是否需要网络代理取决于本机能否直接访问 DeepSeek、GitHub、Claude Code 更新服务及其他实际使用的外部资源。不能仅根据 Base URL 推断“Claude Code 完全不会访问 Anthropic”。应以防火墙或抓包结果为准。
十三、本文的限制
- 测试只覆盖一个 Windows 环境和一个
JLink_MCP仓库; - 测试版本为 CC Switch 3.16.5、Claude Code 2.1.191,后续版本可能变化;
- 没有进行官方 Claude Opus 的完整同条件数值 A/B;
- DeepSeek 服务端模型可能更新,但模型名称不变;
- 测试结论适用于“Claude Code Agent 行为”,不等价于 DeepSeek 的所有代码能力评价。
十四、最终结论
通过 CC Switch 把 DeepSeek 接入 Claude Code,在技术上可以做到:
- API 正常调用;
- 模型正确映射;
- 本地路由和用量统计;
- 低成本使用 DeepSeek Pro/Flash;
- 关闭部分后台流量和额外请求。
但“能接入”不代表“与官方 Claude 模型等价”。本次测试中,DeepSeek Pro 的主要问题不是基础推理能力,而是 Agent 行为:
- 工具集合遵循不严格;
- 停止条件不稳定;
- 过度搜索和验证;
- 达到
max-turns后没有最终答案; - 对复杂上下文和规则冲突更敏感。
因此最现实的策略不是试图用配置把 DeepSeek 伪装成 Opus,而是进行任务分层:
DeepSeek 负责明确、局部、低成本的任务;官方 Claude 或其他强 Agent 模型负责开放式探索、复杂调试和高可靠性任务。
参考资料
更多推荐



所有评论(0)