DeepSeek APIを選ぶ理由

DeepSeekは、非常にコストパフォーマンスの高い大規模モデルAPIサービスを提供し、同種の製品よりもはるかに低い価格で最高レベルの推論能力を提供します。そのAPIはOpenAI形式と互換性があり、移行コストが非常に低く、個人開発者や小規模チームにとって最適な選択肢です。

登録とAPIキーの取得

DeepSeek公式サイトでアカウントを登録した後、コンソールの「API Keys」ページで新しいAPIキーを作成します。キーはコードにハードコードせず、環境変数に保存することをお勧めします:

# Linux/macOS
export DEEPSEEK_API_KEY="sk-your-api-key-here"

# Windows PowerShell
$env:DEEPSEEK_API_KEY="sk-your-api-key-here"

SDKのインストールと最初の呼び出し

pip install openai

from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.deepseek.com"
)

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "あなたは役立つAIアシスタントです"},
        {"role": "user", "content": "DeepSeekを一言で紹介してください"}
    ],
    temperature=0.7,
    max_tokens=200
)

print(response.choices[0].message.content)

モデル選択ガイド

DeepSeekは2つの主力モデルを提供しています:

  • deepseek-chat:一般的な対話モデルで、日常のQ&A、テキスト生成、翻訳などのタスクに適しています。応答が速く、コストが低い
  • deepseek-reasoner:深い推論モデルで、数学、プログラミング、論理的推論など、深い思考を必要とする複雑なタスクに適しています

簡単なタスクにはdeepseek-chat、複雑な推論にはdeepseek-reasonerを使用すると、コストを50%以上節約できます。

ストリーミング出力の実装

stream = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "AIについての詩を書いてください"}],
    stream=True
)

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

コンテキスト管理のベストプラクティス

DeepSeekは128Kのコンテキストウィンドウをサポートしていますが、適切なコンテキスト管理により効果が大幅に向上し、コストを削減できます:

  • マルチターン対話:直近の5〜10ターンを保持し、それ以上は要約に置き換える
  • システムプロンプト:messages配列の最初の要素に配置し、ターン数にカウントしない
  • トークン制御:tiktokenライブラリを使用してトークン数を推定し、制限を超えないようにする

エラーハンドリングとリトライ

import time
from openai import RateLimitError, APIError

def call_with_retry(messages, max_retries=3):
    for attempt in range(max_retries):
        try:
            return client.chat.completions.create(
                model="deepseek-chat",
                messages=messages
            )
        except RateLimitError:
            wait = 2 ** attempt
            print(f"レート制限、{wait}秒後に再試行...")
            time.sleep(wait)
        except APIError as e:
            if attempt == max_retries - 1:
                raise
            time.sleep(1)

result = call_with_retry([{"role": "user", "content": "こんにちは"}])

次のステップ

APIの基本呼び出しを習得したら、Function Calling、JSONモード出力、ストリーミング処理、マルチターン対話管理などの高度な機能をさらに学ぶことができます。DeepSeek APIの完全なドキュメントは公式サイトで参照できます。