DEV Community

Cover image for DeepSeek V4 Pro: ChatCompletions、Anthropic Messages、Responses API 3種のAPI形式を徹底比較
Akira
Akira

Posted on Originally published at apidog.com

DeepSeek V4 Pro: ChatCompletions、Anthropic Messages、Responses API 3種のAPI形式を徹底比較

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つの思考モードです。

今すぐApidogを試す

重要なのは仕様だけではありません。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-prohttps://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.chunkdata: [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)
Enter fullscreen mode Exit fullscreen mode

既存の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)
Enter fullscreen mode Exit fullscreen mode

この形式を選ぶ場面

以下に該当する場合は、ChatCompletionsから始めるのが最短です。

  • OpenAI SDKをすでに利用している
  • LangChainスタイルのフレームワークを使っている
  • ChatCompletions対応の社内抽象化レイヤーがある
  • まず単純なチャット補完やツール呼び出しを実装したい

リクエスト構造はApidogでChatGPT APIをテストする方法と同様で、主にホストとモデル名が変わります。

フォーマット2:Anthropic Messages

Anthropic Messagesは見た目がChatCompletionsに近いものの、移行時に見落としやすい差分があります。

実装上の主な違い

  1. システムプロンプトはmessages配列に含めず、トップレベルのsystemで指定します。
  2. max_tokensは必須です。
  3. ツール定義はフラットで、namedescriptioninput_schemaを直接指定します。
  4. ツール呼び出しは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)
Enter fullscreen mode Exit fullscreen mode

コンテンツブロックを走査する

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)
Enter fullscreen mode Exit fullscreen mode

ストリーミングでは、均一なテキストチャンクではなく、message_startcontent_block_deltamessage_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
Enter fullscreen mode Exit fullscreen mode

この形式を選ぶ場面

以下の場合は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
  }'
Enter fullscreen mode Exit fullscreen mode

Responses APIを選ぶべき理由

この形式には、エージェント実装で役立つ3つの特性があります。

  1. サーバーサイドの会話状態

    会話履歴全体を毎回再送信する代わりに、previous_response_idで前の応答を参照できます。

  2. 型付き出力アイテム

    テキスト、推論、ツール呼び出しなどが別々の型付きアイテムとして返されます。エージェント側でアイテム種別ごとに処理を分けやすくなります。

  3. 意味を持つストリーミングイベント

    response.output_text.deltaresponse.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_startcontent_block_deltamessage_stop response.output_text.deltaなどのライフサイクルイベント
会話状態 クライアント側で履歴を再送信 クライアント側で履歴を再送信 前の応答を参照するサーバーサイド状態に対応
適した用途 OpenAI対応ツール・フレームワーク Claudeネイティブのツール・エージェント エージェントループ、Codexスタイル、状態を持つワークフロー

同じモデルを使っていても、違うのはワイヤーレベルの契約です。実装前に仕様を読むだけでなく、実際のリクエストとレスポンスを保存して比較することをおすすめします。

1つのApidogプロジェクトで3形式をテストする

3形式の違いを確実に把握するには、同じプロンプトを送信し、生のレスポンスとSSEイベントを比較します。

1. フォルダを分ける

1つのプロジェクトに、次の3フォルダを作成します。

deepseek-v4-pro/
├── chat-completions/
├── anthropic-messages/
└── responses/
Enter fullscreen mode Exit fullscreen mode

各フォルダには、少なくとも次の3リクエストを保存します。

├── basic-completion
├── tool-calling
└── streaming
Enter fullscreen mode Exit fullscreen mode

2. 環境変数を共通化する

環境に以下の変数を定義します。

DEEPSEEK_API_KEY
BASE_URL
ANTHROPIC_BASE
MODEL
Enter fullscreen mode Exit fullscreen mode

推奨値の例です。

DEEPSEEK_API_KEY={{あなたのAPIキー}}
BASE_URL=https://api.deepseek.com
ANTHROPIC_BASE=https://api.deepseek.com/anthropic
MODEL=deepseek-v4-pro
Enter fullscreen mode Exit fullscreen mode

MODELdeepseek-v4-flashに切り替える場合も、環境変数を1つ変更するだけです。

3. 同一プロンプトでレスポンス構造を比較する

たとえば、全フォーマットに次の質問を送ります。

冪等性キーを2つの文で説明してください。
Enter fullscreen mode Exit fullscreen mode

レスポンスの読み取り位置を比較してください。

フォーマット 主なテキストの取得位置
ChatCompletions choices[0].message.content
Messages content内のtextブロック
Responses 型付き出力アイテム

4. SSEストリームを確認する

各リクエストでstream: trueを設定し、イベント形式の違いを確認します。

  • ChatCompletions: chat.completion.chunk[DONE]
  • Messages: message_startcontent_block_deltamessage_stop
  • Responses: response.output_text.deltaresponse.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"
Enter fullscreen mode Exit fullscreen mode

移行前に確認するポイントは次の2つです。

  1. コア仕様以外のパラメーターが期待どおり動作するか、テストコレクションで確認する
  2. レスポンス処理がcontentだけでなくreasoning_contentも許容できるようにする

Anthropicから移行する場合

主に以下を差し替えます。

  • ベースURL
  • APIキー
  • モデル名

Messages形式そのものは維持されるため、max_tokens、コンテンツブロック、型付きストリームイベントを正しく処理しているクライアントなら、ロジック変更を抑えられます。

環境変数対応のエージェントなら、前述のANTHROPIC_BASE_URLANTHROPIC_AUTH_TOKENANTHROPIC_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)