DeepSeek API 完全ドキュメント
DeepSeek API の包括的なガイド:基本呼び出しから高度な機能まで、Chat Completions、Streaming、Function Calling、R1 推論モデル、Token 計算、エラー処理、多言語 SDK サンプルを網羅。OpenAI SDK と互換性があり、移行コストはゼロです。
学習を始めるAPI 概要
DeepSeek API は OpenAI と完全互換のインターフェース形式を提供します。任意の OpenAI SDK を直接使用して呼び出すことができ、base_url と api_key を変更するだけです。
Base URL と認証
レート制限
| リクエスト頻度 (RPM) | デフォルト 500 回/分(公式に連絡して引き上げ可能) |
| 同時接続数 | デフォルト 100 同時リクエスト |
| Token レート (TPM) | デフォルト 500,000 TPM |
サポートモデル
| モデル名 | API パラメータ値 | 説明 |
|---|---|---|
| DeepSeek V3 | deepseek-chat |
フラッグシップ対話モデル、一般的なシナリオに最適 |
| DeepSeek R1 | deepseek-reasoner |
推論強化モデル、数学/論理/プログラミング向け |
価格表
| モデル | 入力 (100万トークンあたり) | 出力 (100万トークンあたり) | コンテキストウィンドウ |
|---|---|---|---|
| deepseek-chat (V3) | $0.27 (キャッシュヒット $0.07) | $1.10 | 160K |
| deepseek-reasoner (R1) | $0.55 (キャッシュヒット $0.14) | $2.19 | 128K |
Chat Completions API
Chat Completions は DeepSeek API の中核となるインターフェースで、テキスト対話、コード生成、コンテンツ作成など、すべての対話シナリオをサポートします。OpenAI Chat Completions API 形式と互換性があります。
API エンドポイント
リクエストパラメータ
| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|---|---|---|---|---|
| model | string | はい | - | モデル ID: deepseek-chat または deepseek-reasoner |
| messages | array | はい | - | 対話メッセージのリスト。各メッセージは role と content を含む |
| temperature | float | いいえ | 1.0 | サンプリング温度。範囲 0~2。高いほどランダム、低いほど決定的 |
| top_p | float | いいえ | 1.0 | 核サンプリングパラメータ。範囲 0~1。temperature と top_p はどちらか一方のみ調整することを推奨 |
| max_tokens | integer | いいえ | 4096 | 最大出力トークン数。V3 は最大 8K、R1 は最大 32K |
| stream | boolean | いいえ | false | ストリーミング出力(SSE)を有効にするかどうか |
| frequency_penalty | float | いいえ | 0 | 頻度ペナルティ、範囲 -2〜2。正の値は繰り返しコンテンツの確率を下げます。 |
| presence_penalty | float | いいえ | 0 | 存在ペナルティ、範囲 -2〜2。正の値は新しいトピックを話すことを促進します。 |
| stop | string/array | いいえ | null | 停止語、最大16個。停止語に遭遇すると出力を直ちに終了します。 |
| tools | array | いいえ | null | Function Calling ツール定義リスト。 |
レスポンス形式
finish_reason の一般的な値:stop(正常終了)、length(max_tokens 制限に達した)、content_filter(コンテンツがフィルタリングされた)、tool_calls(関数呼び出しがトリガーされた)。
多輪会話
DeepSeek API は messages 配列を通じて多輪会話を実現します。各リクエストで完全な会話履歴をモデルに送信し、モデルはコンテキストに基づいて会話の意図を理解し、一貫性のある応答を返します。
メッセージロール
| role | 説明 |
|---|---|
| system | システムプロンプト。会話のスタイル、役割、境界、ルールを設定するために使用します。messages 配列の最初の要素に配置します。 |
| user | ユーザーメッセージ。ユーザーが入力した質問や指示です。 |
| assistant | アシスタントメッセージ。モデルが以前に生成した応答です。会話のコンテキストを維持するために、過去の assistant メッセージも一緒に送信する必要があります。 |
多輪会話の例
コンテキストウィンドウ管理
DeepSeek V3 は 160K トークンのコンテキストウィンドウをサポートし、R1 は 128K をサポートします。会話履歴が長くなりすぎた場合は、コンテキスト管理が必要です:
- スライディングウィンドウ:最新の N ターンのみを保持し、最も古いメッセージを破棄します。
- 要約圧縮:モデルを使用して初期の会話の要約を生成し、元のメッセージを置き換えます。
- 重要なメッセージの保持:システムプロンプトとユーザーの核心的な質問は常に保持し、中間の会話のみを切り詰めます。
- トークンカウント:各リクエストの前に総トークン数を推定し、コンテキストウィンドウを超えないようにします。
ストリーミング出力
ストリーミング出力により、モデルはトークンごとに結果を返すため、ユーザーは完全な応答を待つことなく、生成中のコンテンツをリアルタイムで確認できます。長文生成やチャットアプリケーションでは、ストリーミングによってユーザーエクスペリエンスが大幅に向上します。
SSE形式の説明
DeepSeekのストリーミング出力は、Server-Sent Events (SSE) プロトコルに基づいています。各チャンクは data: で始まり、\n\n で終わります。各チャンクにはJSONオブジェクトが含まれ、その中の choices[0].delta.content フィールドに増分テキストが含まれます。
Pythonストリーミング例
JavaScript (Node.js) ストリーミング例
SSEストリームの解析方法
SDKを使用せず、HTTPリクエストで直接ストリーミングデータを取得する場合は、SSE形式を手動で解析する必要があります:
- レスポンスボディを1行ずつ読み取り、各行は
data:で始まります data: [DONE]が現れたらストリームの終了です- dataの後のJSON文字列を解析し、
choices[0].delta.contentを抽出します - 空行は異なるイベント(チャンク)を区切るために使用されます
Function Calling(関数呼び出し)
Function Calling により、モデルは外部関数をいつ呼び出すかをインテリジェントに決定し、ユーザーの自然言語を構造化された関数パラメータに変換できます。これは AI Agent やツール呼び出しシナリオを構築するための核となる機能です。
ツール定義形式
リクエストの tools パラメータで利用可能な関数を定義します。各関数には name、description、parameters(JSON Schema 形式)が必要です。
Function Calling のワークフロー
- リクエスト送信:ユーザーメッセージと tools 定義を一緒に DeepSeek API に送信します
- モデルの判断:モデルが関数を呼び出す必要があるか判断します。必要な場合、finish_reason="tool_calls" と関数呼び出し情報を返します
- 関数の実行:開発者はモデルが返した関数名とパラメータに基づいて、自分のコードで対応する関数を実行します
- 結果の返却:関数の実行結果を tool ロールのメッセージとして messages に追加し、再度モデルに送信します
- モデルの応答:モデルは関数の結果に基づいて、最終的な自然言語の応答を生成します
Python 完全な例
DeepSeek R1 (Reasoner) API
DeepSeek R1 は推論強化モデルで、数学、プログラミング、論理的推論などのシナリオで優れた性能を発揮します。API 呼び出し方法は deepseek-chat とほぼ同じですが、独自の思考プロセス出力があります。
R1 API エンドポイント
思考プロセス (reasoning_content)
R1 モデルは最終回答を生成する前に、内部推論を行います。ストリーミング出力では、推論プロセスは reasoning_content フィールドで返され、推論完了後にのみ content フィールドが返されます。
R1 と Chat API の違い
| 特徴 | deepseek-chat (V3) | deepseek-reasoner (R1) |
|---|---|---|
| コンテキストウィンドウ | 160K tokens | 128K tokens |
| 最大出力 | 8K tokens | 32K tokens (推論を含む) |
| 推論プロセス | 公開されない | reasoning_content で公開 |
| temperature | サポート (0~2) | サポートなし(固定推論戦略) |
| Function Calling | サポート | ツール呼び出しには V3 の使用を推奨 |
| 適用シナリオ | 一般的な対話、コンテンツ作成、翻訳 | 数学の証明、アルゴリズム設計、論理的推論 |
R1 のベストプラクティス
- R1 は複雑な system prompt を必要とせず、簡潔な指示で最良の結果が得られます
- 推論プロセスは tokens を消費するため、max_tokens を十分に設定してください(推奨 8000+)
- 非ストリーミング呼び出しでは、reasoning_content は完全なレスポンスに含まれます
- 単純な対話には、コストとレイテンシーを節約するために V3 の使用を推奨します。複雑な推論タスクにのみ R1 を使用してください
トークン計算
トークン計算を理解することは、APIコストの管理とコンテキストウィンドウの管理の鍵です。DeepSeekはOpenAI互換のトークナイザーを使用しており、正確な計算にはtiktokenライブラリを使用できます。
トークン推定ルール
| コンテンツタイプ | トークン推定 |
|---|---|
| 英語テキスト | 1トークン ≈ 英語4文字、または約0.75語 |
| 中国語テキスト | 中国語1文字 ≈ 1.5〜2トークン |
| コード | 1トークン ≈ コード3〜4文字(インデントや記号によって異なる) |
tiktokenを使用した正確な計算
コンテキストウィンドウとmax_tokens制限
| モデル | コンテキストウィンドウ | 最大出力トークン |
|---|---|---|
| deepseek-chat (V3) | 160,000トークン | 8,192トークン(デフォルト4,096) |
| deepseek-reasoner (R1) | 128,000トークン | 32,768トークン(推論プロセスを含む) |
ヒント
各リクエストのtotal_tokensはprompt_tokens + completion_tokensです。prompt_tokens + max_tokensがモデルのコンテキストウィンドウ上限を超えないようにしてください。実際の消費量はAPIが返すusageフィールドで確認できます。
エラーコードと例外処理
DeepSeek API のエラーコードと例外処理戦略を理解し、アプリケーションを本番環境で安定かつ信頼性の高いものにします。
HTTP ステータスコード
| ステータスコード | 意味 | 説明と対処法 |
|---|---|---|
| 200 | 成功 | リクエストが正常に処理されました |
| 400 | リクエスト形式エラー | パラメータ形式が不正、必須フィールドの欠落、JSON 解析失敗など。リクエストボディの形式を確認してください。 |
| 401 | 認証失敗 | API キーが無効、期限切れ、または未指定。Authorization ヘッダーを確認してください。 |
| 402 | 残高不足 | アカウント残高がこのリクエストを完了するのに十分ではありません。platform.deepseek.com でチャージしてください。 |
| 429 | レート制限 | リクエスト頻度が制限を超えています。リクエスト頻度を下げるか、公式に連絡して割り当てを増やしてください。 |
| 500 | サーバー内部エラー | DeepSeek サーバーの一時的な障害。指数バックオフを使用して再試行することをお勧めします。 |
| 503 | サービス利用不可 | サーバーが混雑しているかメンテナンス中です。待ってから再試行してください。最大待機時間は 60 秒を推奨します。 |
エラーレスポンス形式
再試行戦略:指数バックオフ
多言語 SDK サンプル
DeepSeek API は OpenAI SDK と互換性があるため、任意の言語の OpenAI クライアントライブラリを使用できます。以下は主要言語の完全なサンプルコードです。
Python (openai パッケージ)
Node.js (openai パッケージ)
curl
Go
Java
ベストプラクティス
DeepSeek API 使用時の重要なベストプラクティスをまとめ、本番環境で DeepSeek モデルを効率的・安定的・経済的に使用するのに役立てます。
1. System Prompt の設計
- 役割を明確に定義する:モデルに「あなたは誰か」を伝える(例:「あなたはプロの Python プログラミングアシスタントです」)
- 出力形式を設定する:モデルに特定の形式(JSON、Markdown テーブル、コードブロックなど)で出力するよう要求する
- 行動の境界を制約する:モデルにできないことを明確に伝える(例:「不確かな情報を推測しないでください」)
- 簡潔に保つ:system prompt が長すぎるとコンテキストウィンドウを占有するため、200〜500文字に抑えることを推奨
2. Temperature の調整
| Temperature | 適用シナリオ |
|---|---|
| 0.0 ~ 0.3 | コード生成、数学計算、データ抽出、翻訳 — 正確さと一貫性が必要なシナリオ |
| 0.5 ~ 0.8 | コンテンツ作成、ブレインストーミング、一般的な会話 — 創造性と一貫性のバランス |
| 0.9 ~ 1.5 | クリエイティブライティング、ストーリー生成、詩 — 多様性と創造性が高い必要があるシナリオ |
3. コンテキストウィンドウの最適化
- 必要な会話履歴のみを渡し、無駄な往復メッセージを避ける
- 長いドキュメントには RAG を使用し、全文を直接連結しない
- system prompt を利用して永続的な指示を伝え、各ユーザーメッセージで繰り返さない
- usage.total_tokens を監視し、コンテキストウィンドウの上限に近づいたら早期に警告する
4. コスト管理
- max_tokens を適切に設定し、不要な長い出力による浪費を避ける
- キャッシュヒットを活用して入力コストを削減:繰り返される system prompt や履歴メッセージはキャッシュ割引の対象
- 簡単なタスクには小さな max_tokens と低い temperature を使用する
- 開発段階でトークンカウントツールを使用してコストを見積もり、予算アラートを設定する
- API キーの月間消費制限を設定し、予期しない超過を防ぐ
5. 並行リクエスト管理
- コネクションプールを使用して HTTP 接続を再利用し、ハンドシェイクのオーバーヘッドを削減する
- リクエストキューを実装し、同時実行数を制限(デフォルト100)以内に制御する
- バッチタスクには非同期呼び出しを使用する(Python asyncio / Node.js Promise.all)
- 429 エラーの頻度を監視し、同時実行数を動的に調整する
- リクエストの種類に応じて異なる優先度キューを設定する
DeepSeek の他のチュートリアル
DeepSeek の使用方法、デプロイ、モデル知識をさらに探求します。