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-flashdeepseek-v4-pro
官方兼容入口 https://api.deepseek.com/anthropic

开工前先确认 Claude Code 已安装:

claude --version
command -v claude

本文最终链路如下:

Claude CLI 直连 DeepSeek V4 的架构

一、为什么现在可以直接连接

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。这个脚本负责:

  1. 加载 ~/.env.deepseek 中的 Key;
  2. 设置 DeepSeek 官方 Anthropic 兼容入口;
  3. 默认选择 deepseek-v4-flash
  4. 通过 pro 子命令切换到 deepseek-v4-pro
  5. 把其余参数原样传给 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 Code 2.1.193 直连 deepseek-v4-flash 的完整终端演示

完整调用流程如下:

Claude CLI 通过官方兼容入口调用 DeepSeek V4 的流程

五、验证直连结果

先做两个最小文本调用:

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. 文本正常,但复杂工具行为不稳定

协议格式兼容不代表模型行为完全一致。建议按下面的顺序扩大使用范围:

  1. 简单文本调用;
  2. 隔离目录中的单个文件工具;
  3. 测试仓库中的小任务;
  4. 真实项目。

七、安全与使用边界

  1. ~/.env.deepseek 权限设为 600
  2. 不要把 Key 写进脚本、Shell history、Git 或截图;
  3. 脚本只从固定凭证文件读取 Key;
  4. 代码和提示词会直接发送到 DeepSeek API;
  5. 调用会消耗 DeepSeek 额度;
  6. 首次使用工具能力时先在隔离目录验证。

快速参考

固定文件和地址

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
posted @ 2026-07-13 18:43  Hello_worlds  阅读(36)  评论(0)    收藏  举报