この記事では、deepseek-v4-pro-0813の使用ノートと注意点を説明します。AIHubMixでは、このモデルはチャット完了、レスポンス、およびClaude互換メッセージAPIを通じて利用可能です。詳細については、DeepSeek公式APIドキュメントもご覧ください。
各セクションの「確認済み」結論とサンプルレスポンスは、2026-08-13にAIHubMix APIs(チャット完了 / レスポンス / メッセージ)で実際に行われた呼び出しから得られたものです。「確認済み」とマークされていない仕様項目は、DeepSeekの公式ドキュメントからのものです。
1. モデルの位置付けと仕様の概要
V4 ProはDeepSeekのV4世代のハイエンドTierです(軽量版のdeepseek-v4-flashはその兄弟です)。リリースラインは2026-04-24のDeepSeek-V4プレビューに遡り、0813はDeepSeekが現在のビルドに割り当てたモデルバージョンラベルです。生の仕様を超えて、4つの点がそれを際立たせています:
- スパースフロンティアモデル:合計1.6Tパラメータ / 49Bアクティブ(MoE、すなわち専門家の混合アーキテクチャ — 各推論パスは専門家ネットワークのサブセットのみを点灯させます:合計パラメータは知識容量を決定し、アクティブパラメータは呼び出しごとの計算コストを決定します)。モデルカードにはCSA+HCAハイブリッドアテンション、mHC、Muonオプティマイザがリストされています。
- MITの下でのオープンウェイト:
deepseek-ai/DeepSeek-V4-ProはMITライセンスの下でHuggingFaceに公開されており(最も許可の多いオープンソースライセンスの1つ — 商業利用とクローズドソースの再配布が許可されています)、自己ホスティングが可能です。このサイズのモデルに対してMITは一般的ではありません。モデルカードの自己ホスティングノートは、Think Max(最高の思考レベル)で実行する際に≥384Kトークンのコンテキストウィンドウを示唆しています — これは自己ホスティングのためのデプロイメントガイダンスであり、ホストAPIの仕様ではありません。 - マルチプロトコルサポートはファーストパーティであり、サードパーティの翻訳ではない:DeepSeek自体がOpenAIチャットAPI、Anthropic互換エンドポイント(
/anthropic、これはclaude-opus*をこのモデルにマッピングします)、およびレスポンスAPIを提供しています(DeepSeekはフォーマットに対するネイティブサポートを説明しており、Codex用の適応があります)。また、FIM(フィルインザミドル)完了を別のエンドポイントでベータ機能として提供しており、これは3つのAIHubMix APIsの一部ではありません。 - キャッシュヒットとキャッシュミスの価格差は約120倍:DeepSeekの公開価格メカニズムは、キャッシュヒットが$0.003625/M、キャッシュミスが$0.435/M(出力$0.87/M)であり、キャッシングは自動でパラメータを設定する必要はありません。長いプレフィックス(システムプロンプト、長文書)を再利用するワークロードでは、そのギャップが請求書を支配します。実際の小売価格はモデルページに表示されているものです。
| 項目 | 値 |
|---|---|
| AIHubMixでのモデル名 | deepseek-v4-pro-0813 |
| コンテキストウィンドウ | 1Mトークン(1,000,000) |
| 最大出力 | 公式の文言はMAX OUTPUT MAXIMUM: 384K(正確なトークン数とデフォルトは公開されていません) |
| 入力モダリティ | テキストのみ。レスポンス互換ページでは、画像およびファイル入力はサポートされていないと明示的に述べています;メッセージページでは、type="image"ブロックがサポートされていないと明示的にマークされています;チャット完了では、ユーザーメッセージcontentは文字列のみを受け入れ、マルチモーダルコンテンツパーツはありません。 |
| 思考モード | ハイブリッド(思考 / 非思考)、デフォルトで思考オン |
| 思考レベル | reasoning_effortはlow / high / maxを受け入れ、デフォルトはhigh;mediumとxhighは互換性のためにhighにマッピングされています。 |
| 利用可能なAPI | チャット完了、レスポンス、メッセージ(Claude互換) |
確認済み:max_tokensを超えると、検証によって拒否され、静かに切り捨てられることはありません —max_tokens=9999999を送信するとHTTP 400が返され、エラーボディにはフィールド名と上限393216が示されます。
# max_tokens=9999999 -> HTTP 400
"...max_tokens... 393216"
❗ 画像はエラーを引き起こしませんが、削除されます:レスポンスAPIの公式文言は「画像およびファイル入力はサポートされていません(input_imageパーツはエラーを引き起こしませんが、プレースホルダーテキストに置き換えられます)」です —input_imageパーツはリクエストを失敗させず、プレースホルダーテキストに置き換えられます。チャット完了では、ユーザーメッセージcontentは文字列のみを受け入れ、メッセージではtype="image"ブロックがサポートされていないとマークされています。マルチモーダルルーティングを構築する際には、「エラーなし」をモデルが実際に画像を見た証拠として扱わないでください。
2. 思考をオフにするにはどうすればよいですか? 3つのAPI、3つのフィールド形状
V4 Proはデフォルトで思考します:パラメータを全く送信しないと、レスポンスは思考コンテンツを返します。これをオフにするには、3つのAPIそれぞれで異なるフィールド形状を使用します。
チャット完了
トップレベルのthinkingオブジェクトを使用します。
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "2 + 2は何ですか?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# 思考オン(デフォルト):message.reasoning_contentが存在し、reasoning_tokens = 43
# 思考オフ(無効):reasoning_contentが存在せず、reasoning_tokensが存在しない
確認済み:thinking.type="disabled"を使用すると、message.reasoning_contentとusage.completion_tokens_details.reasoning_tokensが一緒に消え、スイッチが効果を発揮したことが確認されます。
レスポンス
レスポンスには別のスイッチはありません;思考をオフにするには、レベルをnoneに設定します。
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="2 + 2は何ですか?",
reasoning={"effort": "none"},
)
# effort="none":usage.output_tokens_details.reasoning_tokens = 0
# output[0]はメッセージアイテムそのもので(推論アイテムなし)
# effort未設定:出力は常に推論アイテムから始まる
確認済み:reasoning.effort="none"はデフォルトレベルと明確に異なります(思考トークンがゼロに落ち、reasoning出力アイテムが消えるため)、これが効果を発揮したことが確認されます。
メッセージ
チャット完了と同じ名前と形状:トップレベルのthinkingオブジェクト。
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com",
)
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
messages=[{"role": "user", "content": "2 + 2は何ですか?"}],
extra_body={"thinking": {"type": "disabled"}},
)
# 思考オン(デフォルト):content = [thinkingブロック, テキストブロック]
# 思考オフ(無効):content = [テキストブロック]
確認済み:無効にすると、thinkingブロックが完全に消え、textブロックのみが残ります。
思考レベルについて:lowとmaxは、テスト中にチャット完了で200を返しました(highがデフォルトで、フィールドが省略された場合に適用されます)が、思考トークンのカウントは同じ質問に対してレベル間で単調な違いを示さず(簡単な質問:low=43 / max=27;難しい質問:low=114 / max=92)、レスポンスには何もエコーされません — レベルは受け入れられますが、レスポンスからは区別できる信号は観察できません。レスポンスでは、noneレベル(思考オフ)のみがレスポンス側から確認できます。
3. なぜマルチターンの会話が突然400を返すのか? 思考履歴はそのまま返さなければならない
これはこのモデルで最も一般的なトリップワイヤーです:思考モードでは、マルチターンの会話は前のターンの思考コンテンツをそのまま返さなければならず、さもなければリクエストは拒否されます。劣化することもなく、品質が低下することもなく — 硬いHTTP 400です。
3つのAPIは異なるフィールド名の下で同じ思考コンテンツを持っています:
| API | パスバック形状 | 不足時のエラーボディ |
|---|---|---|
| チャット完了 | アシスタントメッセージのreasoning_contentフィールド |
思考モードでは |
| レスポンス | 入力配列内のtype="reasoning"を持つ出力アイテム |
思考モードでは |
| メッセージ | アシスタントコンテンツブロック内のthinkingブロック |
思考モードでは |
確認済み(トリガー条件):この検証は、ツールを持つマルチターンリクエストで一貫して発生します(モデルがツール呼び出しを行い、その後ツール結果が返されます)。ツールなしの単純なマルチターンリクエストでは、モデルが直接回答する場合、今回のテストでは検証が発生せず、リクエストは200を返しました。言い換えれば、ツールオーケストレーション(エージェント / 関数呼び出しワークロード)が最もヒットしやすいので、思考コンテンツを会話状態の一部として保持し、再生することを考慮してください。
チャット完了
# マルチターン:前のアシスタントメッセージをそのまま返す、reasoning_contentを含む
messages = [
{"role": "user", "content": "1 + 1は何ですか? 結果を覚えておいてください。"},
{
"role": "assistant",
"content": "2",
"reasoning_content": "<前のレスポンスからのreasoning_content>",
},
{"role": "user", "content": "結果に1を足してください。"},
]
# reasoning_contentを削除すると -> HTTP 400 invalid_request_error
確認済み:歴史的なアシスタントメッセージにreasoning_contentが欠けていると400が返されます;それを追加すると、同じリクエストが200を返し、正しく続行されます。レスポンス
# マルチターン:入力 = 前の入力 + response.output(推論アイテムを含む) + 新しいメッセージ
input = previous_input + response.output + [
{"role": "user", "content": "結果に1を足してください。"}
]
# type="reasoning"アイテムをフィルタリングすると -> HTTP 400
確認済み:response.outputをそのままスライスバックするだけで済みます。履歴を構築する際にtype == "message"で出力アイテムをフィルタリングすると、reasoningアイテムが削除され、400を引き起こします — これが最も一般的な方法です。
メッセージ
# マルチターン:レスポンス.contentをそのままアシスタントメッセージとして返す
messages = [
{"role": "user", "content": "パリの天気はどうですか?"},
{"role": "assistant", "content": response.content}, # thinking + tool_useブロック
{"role": "user", "content": [tool_result_block]},
]
# thinkingブロックを削除すると -> HTTP 400
確認済み:コンテンツ配列からthinkingブロックを削除すると400が返されます(error.typeがinvalid_request_errorに設定されます)。
4. ツール呼び出し
各APIは独自のプロトコル形状でツールを宣言します;形状は互換性がありません。
チャット完了
ネストされた形状(functionオブジェクトがname / parametersをラップしています)。名前付き関数tool_choiceが呼び出しを強制します。
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "パリの天気はどうですか?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "都市の天気を取得",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
tool_choice={"type": "function", "function": {"name": "get_weather"}},
)
# 観察された:finish_reason "tool_calls", tool_calls[0].function.arguments = {"city": "Paris"}
❗ 確認済み:tool_choice: "required"は思考がオンの間は使用できません — それは400を返します思考モードではこのtool_choiceはサポートされていません;思考を無効にすると(thinking.type="disabled")、同じリクエストが200を返します。特定の呼び出しを強制する必要がある場合は、代わりに名前付き関数tool_choiceを使用してください(上記のように、これは思考がオンの状態でも機能します)、またはまず思考をオフにしてからrequiredを使用します。
レスポンス
フラットな形状(type / name / parametersが同じレベルにあります)。
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="パリの天気はどうですか?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "都市の天気を取得",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# 観察された出力アイテム:["reasoning", "function_call"]; arguments = {"city": "Paris"}
確認済み:チャット完了のネストされた形状(function: {...})をレスポンスにコピーすると400が返されます — フラットな形状を使用してください。tool_choice: "required"はチャットと同じ思考モードの制限を受けます。
メッセージ
Anthropicネイティブ形状(input_schema)で、tool_choice: {"type": "any"}で呼び出しを強制します。
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{
"name": "get_weather",
"description": "都市の天気を取得",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
tool_choice={"type": "any"},
messages=[{"role": "user", "content": "パリの天気はどうですか?"}],
)
# 観察された:コンテンツにはtool_useブロックが含まれ、name = get_weather、input = {"city": "Paris"}
❗ 並列ツール呼び出しはDeepSeekの設計によりオフにできません — 公式のAnthropic互換ページでは、tool_choice行でdisable_parallel_tool_useは無視されますと述べられており、レスポンスページでもparallel_tool_calls | 無視されます(並列ツール呼び出しは常に有効です)と述べられています。テスト結果も一致します:disable_parallel_tool_use: trueで2つの都市について同時に尋ねても、2つのtool_useブロックが返されます。直列実行が必要な場合は、最初の呼び出しを取るか、クライアント側でキューに入れてください。
ツール数とコンテキストコスト:単一のリクエストで200の関数定義を送信しても、通常の回答が返され、カウント検証に引っかかることはありません(このパスで観察された;より高いカウントはテストされていません)。しかし、そのリクエストのprompt_tokensは6,105に達しました — ツール定義は完全にコンテキストに入り、請求されます。ツールが多い場合は、すべてを無条件に宣言するのではなく、シナリオごとにツールセットをトリムしてください。5. 構造化出力
チャット完了
response_formatはJSONモードをサポートしています。
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "{"a": 1}をJSONとして返してください。"}],
response_format={"type": "json_object"},
)
# 観察されたレスポンスコンテンツ:{"a":1}
確認済み:出力は有効なJSONです。
レスポンス
JSONスキーマをtext.formatで宣言し、strictモードをサポートします。
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="キーaの下に数値1を返してください。",
text={
"format": {
"type": "json_schema",
"name": "extract",
"strict": True,
"schema": {"type": "object", "properties": {"a": {"type": "integer"}}, "required": ["a"]},
}
},
)
# 観察された出力テキスト:{"a":1}
確認済み:出力は与えられたスキーマに厳密に準拠しています。
メッセージ
メッセージ(Anthropic)プロトコルにはresponse_format / text.formatに相当するものはありません。通常の回避策は、ツールにスキーマを持たせることです — 目的のスキーマがinput_schemaであるツールを宣言し、tool_choice: {"type": "any"}を設定し、tool_useブロックのinputから構造化された結果を読み取ります。このテストラウンドではそのパターンを特に検証していません;厳密なスキーマ保証が必要な場合は、チャット完了またはレスポンスを優先してください。
6. コンテキストキャッシングを有効にするにはどうすればよいですか? できません、自動です
コンテキストキャッシング(同一のプレフィックスが再利用され、キャッシュされた部分は低い料金で請求される)はデフォルトでオンであり、パラメータは必要ありません。同じ長いプレフィックスを持つ2回目のリクエストは、usageの下でAPIごとに異なるフィールド名でヒットを報告します。キャッシングの詳細と現在の価格については、モデルページを参照してください;クロスモデルキャッシング戦略とヒット率技術については、プロンプトキャッシングプラクティスを参照してください。
チャット完了
# 同一の長いプレフィックスを持つ2回の呼び出しの使用
"prompt_tokens_details": {"cached_tokens": 640} # 最初の呼び出し:0
確認済み:同じチャネルで同じ長いプレフィックスを持つ2回の連続呼び出しでcached_tokensが0から640に移動しました。レスポンス
# 同一の長い指示を持つ2回目の呼び出しの使用
"input_tokens_details": {"cached_tokens": 896} # 最初の呼び出し:0
メッセージ
# すでにウォームアップされた長いシステムプレフィックスを持つ呼び出しの使用
"cache_read_input_tokens": 896
確認済み:上記のプレフィックスは、同一の内容を持つレスポンスリクエストによってウォームアップされ、最初のメッセージ呼び出しはすぐに896に達しました — コンテンツプレフィックスに基づいてキャッシングが行われ、プロトコルの表面間で共有されることと一致しています。
7. logprobs:チャットは2つのチャネルを返します
logprobs(対数確率 — モデルの候補トークンごとの信頼度詳細)は、2つのAPIで異なる形状で返され、パースコードはそれらを別々に処理する必要があります。
チャット完了
completion = client.chat.completions.create(
model="deepseek-v4-pro-0813",
messages=[{"role": "user", "content": "こんにちは。"}],
logprobs=True,
top_logprobs=2,
)
# 観察された:choices[0].logprobsには2つの配列が含まれています
# logprobs.content[] -> 最終回答のトークン
# logprobs.reasoning_content[] -> 思考テキストのトークン
❗ 確認済み:チャットはcontentとreasoning_contentの両方の対数確率を返します。標準のOpenAIレスポンス形状に従ってlogprobs.contentのみを読み取るコードは、エラーを引き起こすことはありませんが、思考チャネルを静かに見逃します;コードがlogprobsの下に単一の配列を想定している場合は、最初に形状チェックを追加してください。
レスポンス
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="こんにちは。",
top_logprobs=3,
)
# 観察された:最終メッセージアイテムのみにlogprobs
# output[-1].content[0].logprobs[]にはlogprob + top_logprobsの詳細
確認済み:レスポンスは最終テキストアイテムにのみlogprobsを添付します — チャットで見られるデュアルチャネル形状はありません。
メッセージ
メッセージ(Anthropic)プロトコルには相当するフィールドはありません。トークンレベルの確率詳細が必要な場合は、チャット完了またはレスポンスを使用してください。
8. どのAPIがウェブを検索できますか?
ウェブ検索はサーバーサイドツールであり(取得はサーバー上で実行され、クライアントはリクエストを自ら発行することはありません)、テストではレスポンスAPIとメッセージAPIの両方で実際に実行されます。
レスポンス
response = client.responses.create(
model="deepseek-v4-pro-0813",
input="Pythonの最新の安定版は何ですか?",
tools=[{"type": "web_search"}],
)
# 観察された出力アイテムのシーケンス:
# ["reasoning", "web_search_call", "reasoning", "message"]
確認済み:web_search_callアイテムが出力シーケンスに現れ、サーバーが実際に取得を実行したことを意味します。メッセージ
response = client.messages.create(
model="deepseek-v4-pro-0813",
max_tokens=1024,
tools=[{"type": "web_search_20250305", "name": "web_search"}],
messages=[{"role": "user", "content": "Pythonの最新の安定版は何ですか?"}],
)
# 観察されたコンテンツブロックのシーケンス:
# ["thinking", "server_tool_use", "web_search_tool_result", "thinking", "text"]
# usage.server_tool_use.web_search_requests = 1
確認済み:usage.server_tool_use.web_search_requestsは1をカウントします — 取得リクエストが実際に発生し、メーターが計測されました。チャット完了
ウェブ検索はチャットではトリガーできません。DeepSeekの公式チャットAPIリファレンスには、リクエストスキーマのどこにも検索ツールフィールドが含まれていません(これはフィールドリストを1つずつ確認することによって確立された欠如です;DeepSeekはサポートを否定する明示的な声明を出していません)。サーバーサイド検索の明示的な公式サポート声明があるAPIはレスポンス(web_search)であり、公式のメッセージ互換ページでも検索関連のコンテンツブロックがリストされています。
# 3つのコントロールグループ、同じ質問がライブ情報を必要とし、すべてHTTP 200:
# 検索フィールドなし -> "取得できません", annotations = null
# B web_search_options -> "取得できません", annotations = null, usageはAと同じ
# C enable_search -> "取得できません", annotations = null, usageはAと同じ
確認済み:web_search_optionsやenable_searchを送信してもエラーは発生しませんが、何も取得できません — レスポンスにはannotations(ウェブ検索が実行されたときにレスポンスに付随する引用リスト)が含まれず、usageはコントロールグループとフィールドごとに一致します。ウェブアクセスが必要な場合は、レスポンスまたはメッセージAPIを使用してください。
9. 使用ノート:DeepSeekの設計と私たちの道の逸脱
以下のすべてはHTTP 200を返しますが、直感に反して動作します。原因は異なります、そしてそれに対する対処法も異なるため、別々にリストされています:最初のグループはDeepSeekがモデルを設計した方法であり、プロバイダーを変更しても変わりません;2番目のグループはAIHubMixパス上の現在の動作であり、私たちはそれに取り組んでいます。
9.1 DeepSeekの設計による
| 動作 | 公式文言 | 対処法 |
|---|---|---|
| レスポンスはセッション状態やメタデータを保持しない | 公式のレスポンス互換ページでは、行ごとにstore | サポートされていません。レスポンスは常にstore: falseを持ちます、metadata | サポートされていません、safety_identifier | サポートされていません(これら4つのフィールドのうち、userのみがサポートされています)。テスト結果も一致します:リクエストは200を返しますが、metadataはnullであり、safety_identifierは欠如し、storeは常にfalseです。 |
リクエスト相関データをクライアント側で保持し、サーバー側の保持に依存しないでください。 |
| 思考モードではサンプリングパラメータが効果を持たない | DeepSeekは明示的にtemperatureとtop_pが思考モードでは静かに無効であると述べています。テストでは、両方とも200を返し、何もエコーされず、レスポンス形状に変化はありません。 |
思考モードで出力の安定性のためにサンプリングパラメータに依存しないでください;決定論が必要な場合は構造化出力を使用してください。 |
| プレフィックスの継続 / FIMは公式のベータエンドポイントのみで利用可能 | 公式のprefixの説明は「(ベータ)…この機能を使用するにはbase_url="https://api.deepseek.com/beta"を設定する必要があります」となっており、FIM完了も同様にベータ機能です。AIHubMixのプロダクションで確認済み:標準エンドポイントに対してprefix: trueを送信すると200が返されますが、プレフィックスは静かに破棄されます。公式文言と一致しています。 |
制御された出力形式のために、構造化出力(セクション5)またはstop切り捨てを使用してください。 |
| 並列ツール呼び出しは無効にできない | セクション4を参照:DeepSeekはレスポンスとAnthropicの両ページでスイッチが無視され、並列呼び出しが常にオンであると述べています。 | 直列実行が必要な場合は、クライアント側で呼び出しをキューに入れてください。 |
9.2 AIHubMixパス上の現在の動作
| 動作 | テスト結果 | 対処法 |
|---|---|---|
レスポンスエラーオブジェクトの非標準type |
4xxレスポンスのerror.typeはAihubmix_api_errorであり、メッセージの同じクラスのエラーは標準のinvalid_request_errorを返します。 |
HTTPステータスコードに基づいて分岐し、error.type文字列に基づいて分岐しないでください。 |
| メッセージでは思考トークンが0としてカウントされる | レスポンスにはthinkingブロックが含まれていますが、usage.output_tokens_details.thinking_tokensは常に0であり、実際に生成された思考コンテンツと矛盾します;統合するAnthropic契約の下では、そのフィールドは必須であり、output_tokens以下であるべきです。 |
思考コストの計算には、チャットでのcompletion_tokens_details.reasoning_tokensまたはレスポンスでのoutput_tokens_details.reasoning_tokensを使用してください。 |
メッセージはmodelをdeepseek-v4-proとしてエコーする |
リクエストはdeepseek-v4-pro-0813を送信し、レスポンスはdeepseek-v4-proをエコーします。原因は命名です:DeepSeekの公式APIモデル名はdeepseek-v4-proのみであり、0813はそのバージョンラベルです。 |
レスポンスのmodelフィールドをモデルルーティングチェックや使用の帰属の唯一の基準としないでください。 |
9.3 DeepSeekによって未定義、したがってどちらの判決もなし
reasoning_effortのenumの外に値を送信すると(例:bogus_xyz)、200が返され、通常の回答が返され、エラーは発生せず、観察可能な効果もありません。このパスは現在reasoning_effort enumを検証していないことは明らかです。何が不明なのは、それがすべきかどうかです:DeepSeekは法的なenumを公開していますが、不正なレベルが拒否されるべきかどうかは決して述べていません。したがって、これは公式の動作とも、私たちのパスの欠陥とも見なされません。安全なクライアント側のアプローチ:レベルを自分で検証し、APIがそれをキャッチすることに依存しないでください。
10. 機能 × APIサポートマトリックス
以下のセルは、各APIのパラメータ / フィールドのスペルを示しています。DeepSeekの明示的な文言としてマークされている場合を除き、すべての結論は2026-08-13にAIHubMixプロダクションAPIに対して行われた実際の呼び出しから得られたものです。
| 機能 | チャット完了 | レスポンス | メッセージ |
|---|---|---|---|
| 基本チャット / システム指示 | ✅ messages |
✅ input + instructions |
✅ messages + トップレベルのsystem |
| ストリーミング | ✅ stream + stream_options |
✅ stream(response.created … response.completed) |
✅ stream(message_start … message_stop) |
| 出力上限 | ✅ max_tokens(超過時400、上限393216) |
✅ max_output_tokens |
✅ max_tokens |
| 思考の無効化 | ✅ thinking: {"type": "disabled"} |
✅ reasoning: {"effort": "none"} |
✅ thinking: {"type": "disabled"} |
| 思考レベル | 🟡 reasoning_effortが受け入れられ、区別信号はなし |
✅ reasoning.effort(noneのみ確認可能) |
🟡 output_config.effortが受け入れられ、何もエコーされない |
| 思考コンテンツの返却 | ✅ reasoning_contentフィールド |
✅ reasoning出力アイテム |
✅ thinkingコンテンツブロック |
| 必須の思考履歴パスバック | ✅ reasoning_contentが欠けている → 400 |
✅ reasoningアイテムが欠けている → 400 |
✅ thinkingブロックが欠けている → 400 |
| ツール呼び出し | ✅ ネストされたtools + 名前付きtool_choice |
✅ フラットなtools |
✅ input_schema + tool_choice: {"type":"any"} |
requiredでの呼び出しの強制 |
❗ 思考がオンの間は400;まず思考を無効にしてください | ❗ 左と同じ | ✅ {"type": "any"} |
| 並列ツール呼び出し(無効にできない) | ➖ 公式チャットAPIにはそのようなフィールドはありません | ❗ DeepSeekはparallel_tool_callsが無視され、並列呼び出しが常にオンであると述べています |
❗ DeepSeekはdisable_parallel_tool_useが無視されると述べています;テストでも2つのtool_useブロックが返されます |
| 構造化出力 | ✅ response_format(json_object) |
✅ text.format(json_schema + strict) |
➖ プロトコルフィールドはなし;ツールにスキーマを持たせる |
| 自動キャッシュヒットメーター | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ usage.cache_read_input_tokens |
| logprobs | ❗ デュアルチャネル:content + reasoning_content |
✅ 最終テキストアイテムのみにtop_logprobs |
➖ |
| ウェブ検索 | ➖ 公式チャットAPIには検索フィールドがない;送信しても取得できない | ✅ tools: [{"type": "web_search"}] |
✅ web_search_20250305 |
| ストップシーケンス | ✅ stop |
➖ プロトコルにストップシーケンスフィールドはなし(max_output_tokensのみが長さを制限します) |
✅ stop_sequences(stop_reason: "stop_sequence") |
凡例:✅ 検証済みの動作 · 🟡 受け入れられたが確認できない · ❗ 注意が必要(上記のノートを参照) · ➖ このAPIにはそのような概念はない
FAQ
AIHubMixでdeepseek-v4-pro-0813はどのAPIをサポートしていますか?
チャット完了(/v1/chat/completions)、レスポンス(/v1/responses)、およびClaude互換メッセージAPI(/v1/messages)です。
なぜマルチターンの会話が突然400を返すのか?
最も一般的な原因は、思考履歴が返されなかったことです。思考モードでは、前のターンの思考コンテンツをそのまま再生する必要があります:チャットの場合はアシスタントメッセージのreasoning_content、レスポンスの場合はtype="reasoning"出力アイテム、メッセージの場合はthinkingコンテンツブロックです。ツールを使用したマルチターンでは、これが最も影響を与えます — 多くのフレームワークは履歴を構築する際に出力アイテムをtype == "message"でフィルタリングし、推論アイテムが削除されます。
思考をオフにできますか?
はい。チャットまたはメッセージでthinking: {"type": "disabled"}を送信し、レスポンスではreasoning: {"effort": "none"}を送信します。一度オフにすると、思考コンテンツと思考トークンの両方が消えます。
3つのreasoning_effortレベルは異なりますか?low / high / maxはすべて受け入れられます(デフォルトはhigh;mediumとxhighは互換性のためにhighにマッピングされています)。テストでは、同じ質問に対する思考トークンのカウントはレベル間で単調な違いを示さず、何もエコーされないため、呼び出し側からは違いを確認できません。レスポンスのnoneレベル(思考オフ)のみが明確な観察可能な違いを生み出します。
なぜtool_choice: "required"が400を返すのか?
その値は思考がオンの間は受け入れられません(エラーボディには思考モードではこのtool_choiceはサポートされていませんと表示されます)。思考がオンの状態で特定の呼び出しを強制するには、名前付き関数tool_choice({"type": "function", "function": {"name": "..."}})を使用するか、まず思考を無効にしてからrequiredを使用してください。
コンテキストキャッシングを有効にするにはどうすればよいですか?
できません — 自動です。安定した不変のコンテンツ(システムプロンプト、知識スニペット、ツール定義)をリクエストの先頭に置くと、ヒットカウントが使用量に報告されます:チャットではprompt_tokens_details.cached_tokens、レスポンスではinput_tokens_details.cached_tokens、メッセージではcache_read_input_tokensです。
価格とリアルタイムのステータスについては、deepseek-v4-pro-0813モデルページを参照してください;他のモデルについては、モデルギャラリーをご覧ください。
関連するハンズオンガイド:Kimi K3ハンズオンガイド(新しいパラメータと3つのAPIサポートマトリックス)およびGPT-5.6プロンプトキャッシングと請求の変更。




