DeepSeek-V4-Pro-0813は2026年8月12日に一般提供を開始しました。常に最新のdeepseek-v4-proモデルIDでhttps://api.deepseek.comから利用でき、低コスト版としてdeepseek-v4-flashも提供されています(Unite.AIによるGA発表の報道)。主な仕様は、1Mトークンのコンテキストウィンドウ、最大384K出力、ツール呼び出し、構造化出力、そしてreasoning_contentで推論トレースを返す3つの思考モードです。
重要なのは仕様だけではありません。V4 Proは、同じモデルに対して3つのAPI方言を提供します。
- OpenAI ChatCompletions
- Anthropic Messages
- DeepSeek Responses API
つまり、既存のOpenAI SDKコード、Claude向けに作ったエージェント、Codexスタイルのエージェントループを、それぞれの既存フォーマットを維持したままDeepSeek V4 Proに接続できます。
この記事では、各フォーマットの実装例、リクエスト構造の違い、移行時の注意点、そして単一のApidogプロジェクトで3形式を比較テストする手順を紹介します。アカウント設定と最初のAPI呼び出しは、DeepSeek V4 APIの使用方法を参照してください。
要約
-
deepseek-v4-proはhttps://api.deepseek.comでGAされており、deepseek-v4-flashは低価格で同じインターフェースを共有します。 - OpenAI ChatCompletions、Anthropic Messages、DeepSeek Responses APIの3形式を利用できます。
- 仕様は1Mコンテキスト、最大384K出力、ツール呼び出し、構造化出力、
reasoning_contentです。 - 料金は入力1Mトークンあたり$0.435(キャッシュミス)、$0.003625(キャッシュヒット)、出力1Mトークンあたり$0.87です。
- フォーマットごとに、システムプロンプトの配置、
max_tokens、ツールスキーマ、ストリーミングイベントが異なります。 - Apidogでは、共有環境変数を使って同じプロンプトを3形式に送信し、生レスポンスを比較できます。
なぜ1つのモデルが3つのAPI方言を提供するのか
これはエコシステム互換性のためです。
| フォーマット | 主な対象 |
|---|---|
| OpenAI ChatCompletions | OpenAI SDK、既存フレームワーク、社内ライブラリ |
| Anthropic Messages | Claude向けエージェント、Claude Code、Anthropic SDK |
| Responses API | Codexスタイルのエージェント、状態を持つ多段階ワークフロー |
既存コードの変更量を最小化できる点が実用上の利点です。たとえばChatCompletions互換クライアントなら、基本的にはbase_url、APIキー、モデル名を置き換えるだけです。
V4 Proはアグリゲーターにも掲載されています。詳細はdeepseek-v4-pro-0813のOpenRouterページを参照してください。ただし、本記事で扱う3フォーマットはDeepSeekのファーストパーティAPIに関するものです。
V4ファミリー全体の概要はDeepSeek V4の使用方法で確認できます。
フォーマット1:OpenAI ChatCompletions
OpenAI ChatCompletionsは、既存のOpenAI互換コードを移行しやすいフォーマットです。
- システムプロンプトは
role: "system"のメッセージとして渡す - 会話は
messages配列で渡す -
max_tokensは任意 - ツールはネストされた
function形式で定義する - ストリーミングは
chat.completion.chunkとdata: [DONE]を使う
Python SDKで呼び出す
from openai import OpenAI
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com",
)
response = client.chat.completions.create(
model="deepseek-v4-pro",
messages=[
{
"role": "system",
"content": "あなたは正確な技術文書作成者です。"
},
{
"role": "user",
"content": "冪等性キーを2つの文で説明してください。"
}
],
)
print(response.choices[0].message.content)
既存のopenai SDKをそのまま使えるため、新しい認証方式やSDKの導入は不要です。
reasoning_contentを処理する
思考モードが有効な場合、推論トレースは通常のcontentとは別にreasoning_contentで返されます。レスポンスパーサーが追加フィールドを無視または保存できるようにしておきましょう。
message = response.choices[0].message
print("回答:", message.content)
if getattr(message, "reasoning_content", None):
print("推論トレース:", message.reasoning_content)
この形式を選ぶ場面
以下に該当する場合は、ChatCompletionsから始めるのが最短です。
- OpenAI SDKをすでに利用している
- LangChainスタイルのフレームワークを使っている
- ChatCompletions対応の社内抽象化レイヤーがある
- まず単純なチャット補完やツール呼び出しを実装したい
リクエスト構造はApidogでChatGPT APIをテストする方法と同様で、主にホストとモデル名が変わります。
フォーマット2:Anthropic Messages
Anthropic Messagesは見た目がChatCompletionsに近いものの、移行時に見落としやすい差分があります。
実装上の主な違い
- システムプロンプトは
messages配列に含めず、トップレベルのsystemで指定します。 -
max_tokensは必須です。 - ツール定義はフラットで、
name、description、input_schemaを直接指定します。 - ツール呼び出しは
tool_useコンテンツブロック、ツール結果はtool_resultコンテンツブロックで扱います。
Python SDKで呼び出す
import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["DEEPSEEK_API_KEY"],
base_url="https://api.deepseek.com/anthropic", # 現在のパスはDeepSeek公式ドキュメントで確認
)
message = client.messages.create(
model="deepseek-v4-pro",
max_tokens=8192,
system="あなたは正確な技術文書作成者です。",
messages=[
{
"role": "user",
"content": "冪等性キーを2つの文で説明してください。"
}
],
)
print(message.content[0].text)
コンテンツブロックを走査する
Messages APIの応答は単一文字列ではなく、コンテンツブロックのリストです。テキストだけを取り出す実装では、ブロック種別を確認してください。
for block in message.content:
if block.type == "text":
print(block.text)
elif block.type == "tool_use":
print("ツール名:", block.name)
print("入力:", block.input)
ストリーミングでは、均一なテキストチャンクではなく、message_start、content_block_delta、message_stopなどの型付きSSEイベントを受け取ります。
認証ヘッダーもAnthropic仕様に従います。互換エンドポイントの最新情報はDeepSeek APIドキュメントを確認してください。
Claude Code系のツールを向ける
環境変数から設定を読むツールなら、次のように切り替えられます。
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=$DEEPSEEK_API_KEY
export ANTHROPIC_MODEL=deepseek-v4-pro
この形式を選ぶ場面
以下の場合はMessages形式が適しています。
- Claude向けに構築されたエージェントを利用している
- Anthropic SDKを中心に実装している
- Claude Codeを含むClaudeネイティブのツール群を使っている
- ClaudeとDeepSeekを同じハーネスでA/Bテストしたい
Messagesリクエストの基本構造は、Claude Opus 5 APIガイドで扱う形式と同じです。
フォーマット3:DeepSeek Responses API
Responses APIは、エージェントと多段階ワークフロー向けの最新インターフェースです。
ChatCompletionsのように単一のmessages配列を送るのではなく、主に以下のトップレベルフィールドを使います。
-
instructions: システムレベルの指示 -
input: 文字列または型付きアイテムのリスト -
previous_response_id: 前の応答を参照する場合に使う -
stream: ストリーミング有無
curlで呼び出す
curl https://api.deepseek.com/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $DEEPSEEK_API_KEY" \
-d '{
"model": "deepseek-v4-pro",
"instructions": "あなたはAPIレビューエージェントです。簡潔にしてください。",
"input": "このOpenAPIの差分をレビューし、破壊的変更をすべてリストしてください:[ここに差分]",
"stream": false
}'
Responses APIを選ぶべき理由
この形式には、エージェント実装で役立つ3つの特性があります。
サーバーサイドの会話状態
会話履歴全体を毎回再送信する代わりに、previous_response_idで前の応答を参照できます。型付き出力アイテム
テキスト、推論、ツール呼び出しなどが別々の型付きアイテムとして返されます。エージェント側でアイテム種別ごとに処理を分けやすくなります。意味を持つストリーミングイベント
response.output_text.deltaやresponse.completedなど、ライフサイクルを表すイベントを処理できます。
ツール呼び出しでは、function_callおよびfunction_call_output形式のアイテムを扱います。詳細な実装仕様はapi-docs.deepseek.comを正としてください。
この形式を選ぶ場面
- 多段階のエージェントループを構築する
- Codexスタイルの統合を行う
- サーバー管理の状態を利用したい
- テキスト、ツール、推論を型ごとに明示的に処理したい
単純なチャット補完だけが目的なら、ChatCompletionsの方が実装は簡単です。
3つのフォーマットの比較
| 項目 | OpenAI ChatCompletions | Anthropic Messages | DeepSeek Responses API |
|---|---|---|---|
| エンドポイント | POST /chat/completions |
Anthropic互換ベース(/anthropic)のPOST /v1/messages
|
POST /responses |
| リクエスト形式 |
messages配列。システムプロンプトは先頭メッセージ |
トップレベルsystem + user/assistantのターン |
トップレベルinstructions + input
|
| 出力上限 | 任意の最大トークン数 |
max_tokens必須 |
Responses仕様に基づく任意の上限 |
| ツール定義 |
function配下にparametersを持つネスト形式 |
input_schemaを持つフラット形式 |
Responses仕様に基づくフラットなエントリ |
| ツール結果 |
role: "tool"メッセージ |
tool_resultコンテンツブロック |
function_call_outputアイテム |
| ストリーミング |
chat.completion.chunk、[DONE]で終了 |
message_start、content_block_delta、message_stop
|
response.output_text.deltaなどのライフサイクルイベント |
| 会話状態 | クライアント側で履歴を再送信 | クライアント側で履歴を再送信 | 前の応答を参照するサーバーサイド状態に対応 |
| 適した用途 | OpenAI対応ツール・フレームワーク | Claudeネイティブのツール・エージェント | エージェントループ、Codexスタイル、状態を持つワークフロー |
同じモデルを使っていても、違うのはワイヤーレベルの契約です。実装前に仕様を読むだけでなく、実際のリクエストとレスポンスを保存して比較することをおすすめします。
1つのApidogプロジェクトで3形式をテストする
3形式の違いを確実に把握するには、同じプロンプトを送信し、生のレスポンスとSSEイベントを比較します。
1. フォルダを分ける
1つのプロジェクトに、次の3フォルダを作成します。
deepseek-v4-pro/
├── chat-completions/
├── anthropic-messages/
└── responses/
各フォルダには、少なくとも次の3リクエストを保存します。
├── basic-completion
├── tool-calling
└── streaming
2. 環境変数を共通化する
環境に以下の変数を定義します。
DEEPSEEK_API_KEY
BASE_URL
ANTHROPIC_BASE
MODEL
推奨値の例です。
DEEPSEEK_API_KEY={{あなたのAPIキー}}
BASE_URL=https://api.deepseek.com
ANTHROPIC_BASE=https://api.deepseek.com/anthropic
MODEL=deepseek-v4-pro
MODELをdeepseek-v4-flashに切り替える場合も、環境変数を1つ変更するだけです。
3. 同一プロンプトでレスポンス構造を比較する
たとえば、全フォーマットに次の質問を送ります。
冪等性キーを2つの文で説明してください。
レスポンスの読み取り位置を比較してください。
| フォーマット | 主なテキストの取得位置 |
|---|---|
| ChatCompletions | choices[0].message.content |
| Messages |
content内のtextブロック |
| Responses | 型付き出力アイテム |
4. SSEストリームを確認する
各リクエストでstream: trueを設定し、イベント形式の違いを確認します。
- ChatCompletions:
chat.completion.chunkと[DONE] - Messages:
message_start、content_block_delta、message_stop - Responses:
response.output_text.delta、response.completedなど
SSEのデバッグ方法は、SSEでAPIレスポンスをストリーミングする方法も参考になります。
5. アサーションを追加する
保存済みリクエストには、統合コードが実際に依存する項目のアサーションを追加します。
- テキストコンテンツのパス
- ツール呼び出しIDの位置
- 停止理由
-
reasoning_contentの有無 - ストリーム完了イベント
これにより、DeepSeek側のスナップショット更新後も、同じコレクションを再実行して互換性を検証できます。
移行時の注意点
OpenAIから移行する場合
変更する基本項目は3つです。
client = OpenAI(
api_key="YOUR_DEEPSEEK_API_KEY",
base_url="https://api.deepseek.com",
)
model = "deepseek-v4-pro"
移行前に確認するポイントは次の2つです。
- コア仕様以外のパラメーターが期待どおり動作するか、テストコレクションで確認する
- レスポンス処理が
contentだけでなくreasoning_contentも許容できるようにする
Anthropicから移行する場合
主に以下を差し替えます。
- ベースURL
- APIキー
- モデル名
Messages形式そのものは維持されるため、max_tokens、コンテンツブロック、型付きストリームイベントを正しく処理しているクライアントなら、ロジック変更を抑えられます。
環境変数対応のエージェントなら、前述のANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODELを設定します。
Responses APIへ移行する場合
Responses APIへの移行は単純な設定変更ではありません。ChatCompletionsやMessagesとはリクエストモデルが異なるため、リクエスト層の変更が必要です。
以下の機能が必要な場合に選択してください。
- サーバーサイド状態
- 前の応答IDを使った会話継続
- 型付き出力アイテム
- イベント駆動のエージェントオーケストレーション
単に「新しいAPIだから」という理由だけで選ぶ必要はありません。
FAQ
新規プロジェクトではどのフォーマットを選ぶべきですか?
最も広いツール互換性を求めるならChatCompletionsを選びます。ClaudeネイティブのスタックならMessages、多段階エージェントでサーバー管理状態が必要ならResponses APIが適しています。
Claude CodeをDeepSeek V4 Proに向けられますか?
はい。ANTHROPIC_BASE_URLをDeepSeekのAnthropic互換エンドポイントに設定し、DeepSeek APIキーを認証トークンとして設定し、モデルをdeepseek-v4-proに指定します。
ツール呼び出しと構造化出力はすべてのフォーマットで使えますか?
モデルは両方をサポートしています。ただし、各フォーマットでツールスキーマの表現が異なります。
- ChatCompletions: ネストされた
functionオブジェクト - Messages:
input_schema - Responses:
function_callおよびfunction_call_outputアイテム
デプロイ前に、利用するフォーマットごとのスキーマをテストコレクションで検証してください。
Top comments (0)