2026-04-15

Python で DeepSeek V4 を使う:ゼロから本番まで

DeepSeek V4 は OpenAI 互換 API を提供しているので、Python 側は新しい SDK を覚える必要がありません。標準の openai パッケージで、base URL と API キーを切り替えるだけで動きます。本記事ではインストールから最初のチャット呼び出し、ストリーミング、function calling、そして大規模利用時の tokens コスト管理までを解説します。

1. SDK のインストールと API キーの設定

DeepSeek 専用パッケージは不要です。公式 openai Python SDK がそのまま使えます。API キーは必ず環境変数に置き、コードへのハードコードは避けてください。

API キーは DeepSeek 公式コンソールで発行するか、/pricing の割引ルートで同一スペックのものをより安く入手できます。DEEPSEEK_API_KEY としてシェルに登録しておきます。

pip install "openai>=1.40.0" python-dotenv
echo "DEEPSEEK_API_KEY=sk-..." >> .env

2. 最初の chat completion 呼び出し

OpenAI クライアントを作り、base_url を DeepSeek のエンドポイントに向けます。chat.completions.create は OpenAI と完全に同じで、model 名だけ変えます。deepseek-chat が汎用、deepseek-reasoner が推論特化です。

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()

client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com/v1",
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a concise technical assistant."},
        {"role": "user", "content": "Write a Python one-liner to flatten a nested list."},
    ],
    temperature=0.2,
)

print(response.choices[0].message.content)
print("tokens used:", response.usage.total_tokens)

3. 低遅延な UI のためのストリーミング

チャット UI や CLI、エージェントループでは tokens を生成し次第表示したいはずです。stream=True を渡し、返ってくる chunk を逐次処理します。各 chunk は OpenAI 互換の delta オブジェクトです。

stream = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "Explain MoE in 3 sentences."}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

4. Function calling(tool use)

DeepSeek V4 は OpenAI スタイルの tool use に対応しています。JSON Schema を宣言し、モデルが tool 呼び出しを判断、アプリ側で実行して結果を次のターンに返す、という流れです。V3 と比べて明らかに安定しました。

モデルが返してくる引数は必ずバリデーションしてから実行してください。ユーザー入力と同じ扱いです。

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "Weather in Tokyo?"}],
    tools=tools,
)

call = response.choices[0].message.tool_calls[0]
# call.function.name == "get_weather"
# call.function.arguments == '{"city":"Tokyo"}'

5. tokens コストを抑えるコツ

DeepSeek は入力 tokens と出力 tokens を別々に課金します。出力は入力の約 2 倍。system prompt と会話履歴はすべて入力 tokens に加算されるので、長い会話でそのまま使い続けると請求額がすぐ膨らみます。

実用的な 3 つの工夫:system prompt を短く安定させる(キャッシュしやすい)、6k tokens を超えたら履歴を要約、max_tokens に上限をつける。量が多ければ /pricing の割引公式キーで単価をさらに下げられます。

FAQ

DeepSeek 専用の Python SDK は必要ですか?

不要です。標準 openai パッケージに加え、LangChain・LlamaIndex・Instructor など OpenAI 互換のライブラリもそのまま使えます。

deepseek-chat と deepseek-reasoner の使い分けは?

まずは deepseek-chat。数学・厳密なロジック・長い連鎖推論が必要になったら deepseek-reasoner に切り替えます。

非同期で呼びたい

AsyncOpenAI を使うだけで、API 形状は同じです。そのまま await できます。

割引のある API キーはどこで?

/pricing に公式仕様と同じ割引キーがあります。エンドポイントも context window も公式準拠です。

Python × DeepSeek V4 は、2026 年現在もっとも費用対効果の高い LLM スタックと言っていい組み合わせです。既存の SDK、GPT-4o に伍する品質、個人や小規模チームでも現実的に支払える価格帯。