Claude cli 接入 DeepSeek
先说结论:Claude CLI 可以直接连接 DeepSeek 官方的 Anthropic API 兼容入口,不需要在本机运行协议转换服务。
本文只保留一条操作主线:把 DeepSeek API Key 放进固定凭证文件,再通过 claude-deepseek 脚本启动 Claude Code。脚本默认使用 deepseek-v4-flash,也可以切换到 deepseek-v4-pro。
本文已经分别验证两个模型,实际返回结果如下:
DIRECT_FLASH_OK
DIRECT_PRO_OK
官方文档:Claude Code | DeepSeek API Docs
文中的 Key 都是占位符,替换成自己的即可。不要把真实 Key 写进 Git、截图、博客或共享日志。
环境
| 组件 | 本文实测版本 |
|---|---|
| 操作系统 | macOS(Apple Silicon) |
| Claude Code | 2.1.193 |
| Shell | zsh |
| DeepSeek 模型 | deepseek-v4-flash、deepseek-v4-pro |
| 官方兼容入口 | https://api.deepseek.com/anthropic |
开工前先确认 Claude Code 已安装:
claude --version
command -v claude
本文最终链路如下:

一、为什么现在可以直接连接
Claude Code 发出的是 Anthropic Messages API 请求。DeepSeek 官方已经提供相同格式的兼容入口:
https://api.deepseek.com/anthropic
官方 Claude Code 接入文档明确使用下面两个环境变量:
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN=<DeepSeek API Key>
因此,请求链路可以直接简化为:
Claude Code -> DeepSeek Anthropic-compatible API -> DeepSeek V4
需要注意,兼容接口不等于能力完全相同。DeepSeek 官方兼容性文档中,部分字段会被忽略,图像、文档以及部分扩展内容类型暂不支持。复杂工具调用、长上下文和特殊 beta 功能仍需在真实项目中逐步验证。
二、保存 DeepSeek API Key
在 DeepSeek 平台创建 API Key 后,把它放进独立文件。本文统一使用 dotenv 格式:
vim ~/.env.deepseek
文件内容:
DEEPSEEK_API_KEY=<YOUR_DEEPSEEK_API_KEY>
收紧文件权限:
chmod 600 ~/.env.deepseek
stat -f '%Sp %N' ~/.env.deepseek
macOS 预期输出:
-rw------- ~/.env.deepseek
三、创建模型切换脚本
后续只通过 claude-deepseek 启动 Claude Code。这个脚本负责:
- 加载
~/.env.deepseek中的 Key; - 设置 DeepSeek 官方 Anthropic 兼容入口;
- 默认选择
deepseek-v4-flash; - 通过
pro子命令切换到deepseek-v4-pro; - 把其余参数原样传给 Claude Code。
1. 备份旧脚本
如果已经存在同名脚本,先备份:
mkdir -p ~/.local/bin
if [[ -e ~/.local/bin/claude-deepseek ]]; then
cp ~/.local/bin/claude-deepseek \
~/.local/bin/claude-deepseek.bak.$(date +%Y%m%d-%H%M%S)
fi
2. 写入完整脚本
vim ~/.local/bin/claude-deepseek
写入下面的完整内容:
#!/bin/zsh
set -euo pipefail
readonly ENV_FILE="${CLAUDE_DEEPSEEK_ENV:-$HOME/.env.deepseek}"
readonly BASE_URL="https://api.deepseek.com/anthropic"
usage() {
cat <<'EOF'
Usage: claude-deepseek [flash|pro|help] [claude options]
Commands:
flash Start Claude Code with deepseek-v4-flash (default)
pro Start Claude Code with deepseek-v4-pro
help Show this help
Examples:
claude-deepseek
claude-deepseek flash
claude-deepseek pro
claude-deepseek flash -p 'Reply with OK' --output-format text
EOF
}
load_api_key() {
if [[ ! -r "$ENV_FILE" ]]; then
print -u2 "DeepSeek credential file is missing: $ENV_FILE"
return 1
fi
if ! grep -Eq '^[[:space:]]*(export[[:space:]]+)?DEEPSEEK_API_KEY=' "$ENV_FILE"; then
print -u2 "Expected DEEPSEEK_API_KEY=<value> in $ENV_FILE"
return 1
fi
set -a
source "$ENV_FILE"
set +a
if [[ -z "${DEEPSEEK_API_KEY:-}" ]]; then
print -u2 "DEEPSEEK_API_KEY is empty in $ENV_FILE"
return 1
fi
}
run_claude() {
local model="$1"
local claude_bin
shift
claude_bin="$(command -v claude || true)"
if [[ -z "$claude_bin" ]]; then
print -u2 "Claude Code is not installed or is not in PATH"
return 1
fi
load_api_key
unset ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL="$BASE_URL"
export ANTHROPIC_AUTH_TOKEN="$DEEPSEEK_API_KEY"
unset DEEPSEEK_API_KEY
export ANTHROPIC_MODEL="$model"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$model"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$model"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$model"
export CLAUDE_CODE_SUBAGENT_MODEL="$model"
export CLAUDE_CODE_EFFORT_LEVEL="max"
export API_TIMEOUT_MS="600000"
exec "$claude_bin" --model "$model" "$@"
}
command_name="${1:-flash}"
if (( $# > 0 )); then
shift
fi
case "$command_name" in
flash|--flash)
run_claude "deepseek-v4-flash" "$@"
;;
pro|--pro)
run_claude "deepseek-v4-pro" "$@"
;;
help|-h|--help)
usage
;;
*)
print -u2 "Unknown command: $command_name"
usage >&2
exit 2
;;
esac
3. 检查权限和语法
chmod 755 ~/.local/bin/claude-deepseek
zsh -n ~/.local/bin/claude-deepseek
zsh -n 没有输出且退出码为 0,表示语法检查通过。
如果 ~/.local/bin 还不在 PATH 中,在当前终端执行:
export PATH="$HOME/.local/bin:$PATH"
四、启动和切换模型
1. 使用默认模型
进入项目目录后执行:
cd ~/projects/demo-app
claude-deepseek
不带子命令时默认使用 deepseek-v4-flash。Claude Code 界面应显示:
deepseek-v4-flash · API Usage Billing
2. 切换到 Pro
claude-deepseek pro
如果已经进入 Claude Code,先退出当前会话,再执行目标模型命令。不要同时使用 /model 或手动修改 ANTHROPIC_*,避免出现两套模型状态来源。
3. 实际使用演示
下面是在笔记本内置屏的 macOS“终端”独立窗口中,通过官方兼容入口真实进入 Claude Code、选择 deepseek-v4-flash 并完成一次问答的过程。GIF 保留完整 Claude Code 界面,没有裁剪或添加自制标题;演示从不含用户名的通用临时目录启动,画面不包含 API Key。

完整调用流程如下:

五、验证直连结果
先做两个最小文本调用:
claude-deepseek flash \
-p '只回复:DIRECT_FLASH_OK' \
--output-format text
claude-deepseek pro \
-p '只回复:DIRECT_PRO_OK' \
--output-format text
本文实测输出:
DIRECT_FLASH_OK
DIRECT_PRO_OK
这两个命令直接访问 https://api.deepseek.com/anthropic,本机不需要额外监听端口,也没有后台代理进程。
六、常见问题
1. command not found: claude-deepseek
ls -l ~/.local/bin/claude-deepseek
export PATH="$HOME/.local/bin:$PATH"
确认后重新执行:
claude-deepseek
2. 返回 401 或鉴权失败
检查凭证文件是否存在正确变量:
grep '^DEEPSEEK_API_KEY=' ~/.env.deepseek
stat -f '%Sp %N' ~/.env.deepseek
不要把命令输出贴到公开渠道,因为输出中可能包含完整 Key。
3. 返回 404
官方地址必须包含 /anthropic:
https://api.deepseek.com/anthropic
只写 https://api.deepseek.com 不是本文使用的 Anthropic 兼容入口。
4. 模型没有按预期切换
统一使用脚本子命令:
claude-deepseek flash
claude-deepseek pro
不要在同一会话中再叠加 /model 或手动导出另一组模型变量。
5. 文本正常,但复杂工具行为不稳定
协议格式兼容不代表模型行为完全一致。建议按下面的顺序扩大使用范围:
- 简单文本调用;
- 隔离目录中的单个文件工具;
- 测试仓库中的小任务;
- 真实项目。
七、安全与使用边界
~/.env.deepseek权限设为600;- 不要把 Key 写进脚本、Shell history、Git 或截图;
- 脚本只从固定凭证文件读取 Key;
- 代码和提示词会直接发送到 DeepSeek API;
- 调用会消耗 DeepSeek 额度;
- 首次使用工具能力时先在隔离目录验证。
快速参考
固定文件和地址
DeepSeek Key: ~/.env.deepseek
启动脚本: ~/.local/bin/claude-deepseek
官方入口: https://api.deepseek.com/anthropic
默认启动和模型切换
claude-deepseek # deepseek-v4-flash
claude-deepseek flash # deepseek-v4-flash
claude-deepseek pro # deepseek-v4-pro
三条关键结论
Claude Code -> 发送 Anthropic Messages API 请求
DeepSeek -> 官方提供 Anthropic-compatible API
claude-deepseek -> 加载 Key、选择模型并启动 Claude Code

浙公网安备 33010602011771号