DeepSeekをそこら中に:格安クラウドの頭脳をClaude Codeとローカルエージェント基盤に配線する

公開日
2026年7月11日
著者
Jacob Lloyd — プロジェクト完了後、AIの支援を受けて執筆
読了時間
約14分で読めます

かんたんに言うと: 格安のクラウドAIサービス「DeepSeek」を、手持ちのAIツールに組み込んで使う方法のガイドです。そのままコピーして使える設定を3パターン紹介し、秘密のアクセスキーを安全に隠すコツも解説。1メッセージあたりほんの数銭で、高性能なAIを活用できます。

うちではいま、DeepSeekが3つの役割を担っています。エージェント基盤の頭脳、Claude Code CLIのバックエンド、そしてフォールバックはしごのクラウド段。配線に必要だったのはJSON少々と環境変数いくつか、あとはひと晩を溶かしたsystemdのエスケープバグが1件です。

tl;dr

  • これは何:DeepSeekの有料クラウドAPIを、マルチエージェント自宅基盤の頭脳として、そしてClaude Code CLIの差し替えバックエンドとして使う話。「自前のGPUで動かそう」系の記事ではありません。
  • 費用:安いモデルなら1メッセージあたり1円のさらに何分の一か。サブスクは不要で、必要なのはAPIキーだけです。
  • 必要なもの:DeepSeekのAPIキー、OpenAI形式のchat completionsを話せる何か、そしてClaude Codeの小技を使うならsystemd。
  • 得られるもの:コピペで使える設定3つ、クラウドとローカルの使い分けリスト、そしてキーをpsにもsystemctl showにもログにも残さないシークレット管理の小技。

最終的にこうなる

手順の前に、全体像から。うちではエージェントゲートウェイのOpenClawを動かしていて、チャットUIの後ろに8体の名前つきエージェント、さらに本格的なコーディング用にそのエージェントたちが起動するClaude Code CLIがいます。その両方をDeepSeekが支えています。

パターン役割コスト
1. エージェントの頭脳ゲートウェイ設定のプロバイダーとしてDeepSeekを登録。どのエージェントもprimaryにもfallbackにも指定できる$0.14〜$0.87 / 100万トークン
2. Claude Codeのバックエンドsystemdのdrop-inでCLIをDeepSeekのAnthropic互換エンドポイントに向ける。再インストール不要トークン単価は同じ
3. フォールバックはしごどの仕事をDeepSeekに、どれをローカルモデルに回すかの判断リストローカルで済めば$0

すべてを可能にしているのは、この一点。DeepSeekはhttps://api.deepseek.com/anthropicAnthropic互換エンドポイントを用意しています。Claudeと話せるように作られたもの(Claude Code CLI含む)なら、環境変数だけでそこに向けられます。ラッパースクリプトもフォークも不要です。

パターン1:DeepSeekをエージェントの頭脳にする

ゲートウェイ設定にプロバイダーブロックを1つ。実物です(キーは伏せてあります):

"deepseek": {
  "baseUrl": "https://api.deepseek.com/v1",
  "api": "openai-completions",
  "apiKey": "CHANGE_ME",
  "timeoutSeconds": 450,
  "models": [
    {
      "id": "deepseek-v4-pro",
      "name": "deepseek-v4-pro",
      "reasoning": true,
      "input": ["text"],
      "cost": { "input": 0.435, "output": 0.87,
                "cacheRead": 0.003625, "cacheWrite": 0.435 },
      "contextWindow": 1000000,
      "maxTokens": 384000
    },
    {
      "id": "deepseek-v4-flash",
      "name": "deepseek-v4-flash",
      "reasoning": true,
      "input": ["text"],
      "cost": { "input": 0.14, "output": 0.28,
                "cacheRead": 0.0028, "cacheWrite": 0.14 },
      "contextWindow": 1000000,
      "maxTokens": 384000
    }
  ]
}

あとは各エージェントがprimaryモデルとフォールバックチェーンを選ぶだけです:

"model": {
  "primary": "deepseek/deepseek-v4-flash",
  "fallbacks": ["deepseek/deepseek-v4-pro", "vllm/google/gemma-4-31b"]
}

このルーティングでメッセージが届くと、こう流れます:

実際のロスターがこちら。ほとんどのエージェントはDeepSeek先発でローカルに退避しますが、Doxyだけはわざと逆にしてあります:

エージェントプライマリフォールバック
Bits(メインチャット)DeepSeek flashDeepSeek pro → ローカル gemma-4-31b
BrainsDeepSeek proローカル gemma-4-31b
FlashDeepSeek flashDeepSeek pro → ローカル
Hermes(デプロイ担当)DeepSeek proDeepSeek flash → ローカル
Alpha(家族用セーフ)DeepSeek flashDeepSeek pro → ローカル
Doxy(ローカル主力)ローカル 120BDeepSeek flash (逆張り:ローカルが先発)
betaローカルDeepSeek flash → DeepSeek pro
Charley(画像担当)ローカル gemma-31bDeepSeek pro → DeepSeek flash

ここで効いてくるのがCharleyです。このDeepSeekエントリはテキスト専用("input": ["text"])なので、チェーンがどうなっていようと画像仕事はローカルに残ります。エイリアス(ds-flashds-brain)を使えば、設定を書き換えずに会話の途中でモデルを切り替えられます。

次の2つの設定は、サボると確実に噛みつかれます:

  • 推論モデルには"reasoning": trueが必須。推論モデルは本回答の前にreasoning_contentをストリームします。このフラグがオフだと、ゲートウェイには沈黙にしか聞こえず、モデルが固まったと判断して390秒あたりでターンを打ち切ります。なぜ知っているかは、聞かないでください。
  • timeoutSecondsは引き上げること。デフォルトのリクエストタイムアウトは120秒。長い推論はあっさり超えて、ランダムに「失敗」します。うちは450で解決しました。プロバイダー設定はホットリロードされるので、ゲートウェイの再起動は不要です。

パターン2:Claude Code CLIをDeepSeekで動かす

Claude Code CLIは環境変数からANTHROPIC_BASE_URLANTHROPIC_MODELANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEYを読みます。そしてDeepSeekの/anthropicエンドポイントはClaudeと同じワイヤーフォーマットを話します。つまりCLIの向き先を変えるには、ゲートウェイが各Claude Codeサブプロセスに渡す環境を変えるだけ。CLI本体は素のインストールのままです。

ファイルの正体はsystemdのユーザーdrop-inです。うちでは自作の小さなGTKアプリが4つのモード(Local LM Studio / DeepSeek / Anthropic Cloud / Off)を切り替えて生成していますが、手書きできる程度の短さです:

# ~/.config/systemd/user/openclaw-gateway.service.d/60-subagent-routing.conf
[Service]
# Routes Claude Code CLI sub-processes to DeepSeek's Anthropic-compatible
# endpoint. The key is NOT copied here: $$DEEPSEEK_API_KEY is systemd's escape
# for a literal $DEEPSEEK_API_KEY, which bash expands at runtime from the
# gateway EnvironmentFile -- the secret never enters the unit or the argv.
Environment="ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic"
Environment="ANTHROPIC_MODEL=deepseek-v4-pro"
ExecStart=
ExecStart=/usr/bin/bash -c 'export ANTHROPIC_AUTH_TOKEN="$$DEEPSEEK_API_KEY"; export ANTHROPIC_API_KEY="$$DEEPSEEK_API_KEY"; exec node /path/to/openclaw/dist/index.js gateway --port 18789'

キーそのものの置き場所はただ1か所、サービスのEnvironmentFile(~/.openclaw/gateway.systemd.env、chmod 600)です。中身はDEEPSEEK_API_KEY=CHANGE_MEの1行だけ。

$$ の罠(この記事が存在する理由そのもの)

最初は$1個で書きました。結果は散々でした。unitファイルの中の$VARは、起動時にsystemd自身が展開します。つまりキーがコマンドラインに直接焼き込まれ、psでも/proc/<pid>/cmdlineでもsystemctl showでも丸見えになります。シークレットの置き場所としては、なかなかの最悪さです。

$$VARはsystemdにおけるリテラルの$VARのエスケープです。systemdは文字列に触らずそのまま渡し、実行時にbashが展開します。参照先はEnvironmentFileがすでに読み込んでおいた環境。結果として、シークレットはchmod 600のファイル1つにだけ存在し、それ以外のどこにも現れません。unitファイルにも、systemctl showにも、どのargvにも。systemdとbashで組んだ貧乏シークレットマネージャーですが、ちゃんと仕事をします。

実運用で踏んだ罠、続き:

  • 認証系の変数は両方セットする。CLIのバージョンによってANTHROPIC_AUTH_TOKENを読むものとANTHROPIC_API_KEYを読むものがあり、片方だけだとコイントスになります。
  • ANTHROPIC_MODELを固定する。固定しないと、CLIおなじみのsonnet/opusエイリアスがそのままDeepSeekのエンドポイントに送られて404になります。
  • drop-inは本物のAnthropicキーを覆い隠します。CLI全体をひとつの環境が支配します。私は「本物のClaudeにつなぐ」エイリアスが黙って壊れたときに、それを学びました。
  • 先に空のExecStart=を書く。上書き行の前のあの空行がないと、systemdは元のコマンドを置き換えず、追記扱いにします。
  • パッケージ更新でラッパーが置き去りになることがあります。drop-inは起動コマンドをハードコードしているので、本来のExecStartが変わる更新が来たらdrop-inの再生成が必要です。うちのジェネレーターはunitのFragmentPathから正規のコマンドを読み、すでに$$DEEPSEEK_API_KEYを含むものの二重ラップは拒否します。
  • 最後にリロード:systemctl --user daemon-reload && systemctl --user restart <service>

経路全体をエンドツーエンドで確かめるなら、CLIを飛ばしてcurlで:

curl https://api.deepseek.com/anthropic/v1/messages \
  -H "x-api-key: $DEEPSEEK_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"deepseek-v4-pro","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

"type":"message"が返ってくれば、Anthropic互換の経路はまるごと本当に動いています。

パターン3:DeepSeekとローカル、実際の使い分け

両方あるからといって、何でもクラウドに投げるわけではありません。100万トークンあたりの単価はこんな感じです。スケール感のためにClaudeの定価も添えておきます(Opus $5/$25、Sonnet $3/$15、Haiku $1/$5):

選択肢入力出力備考
DeepSeek flash$0.14$0.28キャッシュ読み取り$0.0028。チャット番の仕事なら1日数円
DeepSeek pro$0.435$0.87「考える」用の上位モデル。それでもSonnetの7〜17分の1
ローカル(同一マシン)$0$0電気代のみ

より大きな驚きは速度でした。ローカルの100B級モデルではターンのタイムアウトを20〜30まで引き上げる羽目になり、1台のGPUマシンを2エージェントで共有すると互いに詰まります。DeepSeekは数秒で返してきます。450秒の上限が効いたのは最悪ケースの推論くらい。もうひとつの差はコンテキストで、ローカル勢の約128kに対して100万トークン。なので長いエージェントセッションや大規模コードベースのコーディング仕事は、デフォルトでDeepSeek行きです。画像は逆方向で、うちのDeepSeekエントリはテキスト専用なので、「この画像を見て」はローカルの視覚モデルに残ります。

プライバシーについて実際に使っている経験則はひとつだけ。メールに書けないものは、クラウドにも送らない。

フォールバックチェーンは双方向に効きます。ここが一番のお気に入りです。クラウド先発のエージェントはネットやAPIが死ぬとローカルモデルに降り、ローカル先発の主力はローカルサーバーが混んでいたり落ちていたりするとDeepSeek flashに退避します。誰も完全には沈黙しません。

罠の一覧(短縮版)

reasoning: trueフラグ、120秒のタイムアウト、$$エスケープ、そしてdrop-inが本物のAnthropicキーを覆い隠す件は、いずれもパターン1と2の中で触れました。あと2つだけ:

  • 空でないプラグインallowlistは厳格です。OpenClawでは、有効化済みでもplugins.allowに載っていないプロバイダーエントリは一切ロードされません。エラーなし、警告なし、ただの沈黙です。
  • ここでのDeepSeekはテキスト専用です。画像仕事を投げる前に、モデルエントリの"input"を確認してください。

APIキーもクラウド課金もなしの完全ローカル派でいきたい?それも書いてあります:DeepSeekをローカルで動かす:4ステップガイドOllamaDockerOpen WebUIで、DeepSeekの蒸留モデルを自分のGPUで動かす話です。あちらは初心者向けの道。こちらは、重い仕事がGPUの手に余るようになっても、プライベートなものは家に置いておきたい人向けです。


← AIとローカルLLMをもっと見る