Claude Code 连 DeepSeek
不止改个 Base URL

子代理请求因格式冲突被拒 400,模型名对不上导致行为异常。
本代理在中间做了协议适配——一行命令本地启动,无需手写配置。

✓ 主 agent ✓ 子 agent & 并行 ✓ 扩展思考 ✓ SSE 流式
CLIENT Claude Code PROXY · :8787 DeepSeek Proxy UPSTREAM DeepSeek 清洗 · 映射 子代理兼容 模型名映射 fallback 容灾
/why

两个问题,一个代理

不是配置不对。是 DeepSeek 的 Anthropic 实现和 Claude Code 的请求格式有系统性差异。

子代理请求被拒 400
Claude Code 子代理同时携带 thinking: { type: "disabled" } 和 reasoning_effort。DeepSeek 认为矛盾——关了思考就不该设 effort,直接拒绝。所有子代理和并行 agent 不可用。
→
发出前自动清洗
检测到 thinking.type === "disabled" 时删除冲突字段。只处理子代理(disabled),主代理扩展思考(enabled)完全不受影响。最小化干预。
模型名对不上,行为异常
Claude Code 以 claude-sonnet-4-6 发请求,上游返回 deepseek-v4-pro。Claude Code 依赖响应中的模型名做后续决策——不认识的名字会导致状态机紊乱。
→
双向模型名映射
请求侧映射为上游模型名,响应侧映射回来——JSON 直接替换字段,SSE 流逐事件边界缓冲后处理。Claude Code 完全感知不到上游的真实模型名。

/pipeline  一次请求穿过代理

 🔐 
认证
Bearer / key
→
 🔀 
路由
exact > prefix
→
 ✅ 
校验
内容块能力
→
 🧹 
清洗
thinking 冲突
→
 🔄 
映射
模型名映射
→
 📡 
转发
连接池/超时
→
 🛡️ 
容灾
5xx/429 切换
/start

三行命令跑起来

不需要 .env 文件。克隆、启动、打开管理后台——API Key 和路由全在 Web 页面配置。

$git clone https://github.com/qipeijun/claude-code-deepseek-proxy.git
$cd claude-code-deepseek-proxy && npm install && npm start

──────────────────────────────────────────
Claude Code DeepSeek Proxy
admin → http://127.0.0.1:8787/admin
──────────────────────────────────────────
STEP 2

管理后台填入上游信息

打开 admin,填 DeepSeek 地址和 Key,验证连通性。一键添加路由规则,设为当前并保存。

 上游连接
Base URLapi.deepseek.com/anthropic
API Keysk-●●●●●●●●●●●●●●●●
路由claude-sonnet → deepseek-v4-pro
设为当前并保存
STEP 3

设 Claude Code 客户端

把 Anthropic Base URL 指向代理。如果在 admin 设了鉴权密码,API Key 填那个密码。

export ANTHROPIC_BASE_URL="http://127.0.0.1:8787" # 若设了鉴权:export ANTHROPIC_API_KEY="你的密码"
/options

两种上游方式

直连延迟最低。加网关可以获得 Key 管理和用量统计。

方案 A · 推荐

直连 DeepSeek
  • 延迟最低,一跳直达
  • 配置最简单:地址 + Key
  • 个人开发首选

方案 B

经 New API 网关
  • Web 界面管理多 Key 轮换
  • 历史用量统计 + 限流
  • 团队共享场景