Claude Code 连 DeepSeek
不止改个 Base URL
子代理请求因格式冲突被拒 400,模型名对不上导致行为异常。
本代理在中间做了协议适配——一行命令本地启动,无需手写配置。
✓ 主 agent
✓ 子 agent & 并行
✓ 扩展思考
✓ SSE 流式
/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
──────────────────────────────────────────
$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 轮换
- 历史用量统计 + 限流
- 团队共享场景