DevOps / CI/CD

DeepSeek V4-Flash-0731のthinking無効化が効かない?

DeepSeek V4-Flash-0731のthinking無効化が効かない?

設定ファイルではthinkingを無効にしたのに、レスポンスへreasoning_contentが残り、処理時間やAPI使用量も増えています。

最短の解決策は、アプリの設定画面や呼び出しコードではなく、最終的に送信されたJSONでthinking.typedisabledになっているかを確認することです。OpenAI SDK経由なら、thinkingはextra_body内に渡します。直結では無効なのに本番だけ有効なら、SDKラッパー、共有ゲートウェイ、AI Agentの子リクエストを順に調べます。

最終更新:2026年8月2日。DeepSeek公式の更新履歴、Thinking Modeガイド、Chat Completions APIリファレンス、料金ページを再確認しています。

この切り分けが必要な開発者

対象は、DeepSeek V4-Flash-0731へ移行した後もreasoning_contentを受け取っているアプリ開発者です。OpenAI SDKや互換フレームワークを使い、コード上ではthinkingを無効にしているケースを想定しています。

モデルゲートウェイや共通SDKを管理するプラットフォーム担当者にも有効です。主リクエストでは無効化できているのに、複数段階のAI Agentで総使用量が増えているチームも対象になります。

DeepSeekの公式資料では、API上のモデルIDはdeepseek-v4-flashで、モデルバージョンはDeepSeek-V4-Flash-0731です。旧deepseek-chatdeepseek-reasonerは、2026年7月24日15:59 UTC以降に利用できなくなると案内されています。(api-docs.deepseek.com)

reasoning_contentが残る本当の原因

まず、現在のレスポンスに推論内容が生成されたのかを確認します。画面に表示された文字列だけでは判断できません。次の3つが混同されやすいからです。

  • 現在のAPI応答に含まれるreasoning_content
  • データベースや会話履歴に保存された過去の推論フィールド
  • ストリーミング解析側が以前のバッファを再表示している状態

判定には、同じ呼び出しのリクエストID、モデル名、応答時刻、usageをそろえます。ログに残った古いレスポンスではなく、設定変更後に発生した現在のリクエストを対象にしてください。

DeepSeek公式リファレンスでは、thinkingの既定値はenabledです。disabledを明示していないリクエストは、アプリ側の設定名が「無効」でも、API上で無効化されたとは扱えません。thinking時の推論内容は、通常のcontentとは別のreasoning_contentとして返されます。(api-docs.deepseek.com)

OpenAI SDKではどこへ渡すのか

OpenAI SDKでDeepSeek V4を呼び出す場合、thinkingの指定場所が最初の確認点です。アプリ独自の設定オブジェクトや、SDKが認識しないトップレベル引数へ入れても、最終JSONへ反映されないことがあります。

最小限の直結サンプルは、次のような形です。APIキーや入力文は実際のログへ残さず、検証用に伏せてください。

response = client.chat.completions.create(
    model="deepseek-v4-flash",
    messages=[{"role": "user", "content": "脱敏済みの固定入力"}],
    extra_body={"thinking": {"type": "disabled"}},
)

重要なのは、この関数呼び出しを記録することではありません。HTTPクライアントやリクエストインターセプターで、実際に出ていったJSONを確認します。期待する形は、少なくとも次の3点を含みます。

  • modeldeepseek-v4-flash
  • thinking.typedisabled
  • アプリ独自の設定名ではなく、APIが受け取る位置にthinkingが存在する

DeepSeekのThinking Modeガイドも、OpenAI SDKではthinkingをextra_body内へ渡すよう説明しています。(api-docs.deepseek.com)

注意:コード上にthinking=Falseが見えていても、SDKがその引数をJSONへ変換した証拠にはなりません。入力、適配後、HTTP送信後の3段階を分けて記録してください。

SDKラッパーとゲートウェイの比較

SDKラッパーで消える場合

二次ラッパーや社内共通SDKが、許可された引数だけを残す実装になっていると、extra_body全体または内部のthinkingが削除されます。

次の順で同じ固定入力を比較します。

  1. アプリが共通SDKへ渡した引数
  2. 共通SDKがOpenAI SDKへ渡した引数
  3. HTTP層で記録した最終送信JSON

1にはdisabledがあるのに2で消えていれば、ラッパーのホワイトリストが原因です。2まで残っていて3で消えるなら、SDKバージョン、リクエストフック、シリアライザーを確認します。

共有ゲートウェイで上書きされる場合

本番だけreasoning_contentが発生するなら、モデル名を変えて試す前に、ゲートウェイの書き換え処理を確認します。テナント、環境変数、タスク種別、モデル別ポリシーが、既定値としてenabledを注入していることがあります。

比較対象は、次の3経路です。

  • DeepSeek公式エンドポイントへの直結
  • テスト用ゲートウェイ経由
  • 本番ゲートウェイ経由

各経路で、実際のmodelthinking.typeを保存します。最初に差が出た経路が、調査対象です。公式料金ページでは入力・出力トークンの合計を課金対象と説明しているため、thinkingの有無を推測で判断せず、レスポンスのusageも同じリクエストIDで照合します。(api-docs.deepseek.com)

AI Agentの隠れた子リクエスト

主リクエストだけを確認しても、AI Agent全体のthinkingが無効になったとは限りません。計画作成、ツール呼び出し、結果整理、失敗時の再試行は、それぞれ別のAPI呼び出しになっている場合があります。

DeepSeek公式ガイドでは、ツール呼び出しを含むthinkingモードで、後続リクエストへreasoning_contentを渡す手順が説明されています。したがって、入口の呼び出しにだけdisabledを追加しても、フレームワークが生成する子リクエストまで同じ設定になるとは限りません。(api-docs.deepseek.com)

確認時は、画面上の合計ではなく呼び出し木を分解します。

  • 親リクエストのモデル、thinking、usage
  • プランニング用子リクエストのモデル、thinking、usage
  • ツール実行後の再開リクエスト
  • タイムアウトや失敗後の再試行
  • ストリーミング終了時の最終usage

reasoning_contentが親にはなく、子リクエストだけに存在するなら、原因は入口設定ではなく継承処理です。遅延や費用の増加も、主応答1回の問題と決めつけず、呼び出し数と各リクエストのusageで分けてください。

隔離回放の合格条件

本番へ修正を出す前に、脱敏済みの固定入力を使って3経路を回放します。直結、既存SDK、ゲートウェイの順に比較すると、どこでパラメータが消えたかを説明しやすくなります。

  • [ ] すべての経路でmodeldeepseek-v4-flashになっている
  • [ ] 最終送信JSONにthinking.type: disabledがある
  • [ ] SDK入力とHTTP送信後のJSONを別々に保存している
  • [ ] 現在のレスポンスに新しいreasoning_contentがない
  • [ ] Agentの親・子・再試行リクエストを呼び出し木で確認している
  • [ ] 各リクエストのusageと応答時間を同じIDで追跡している
  • [ ] ストリーミング解析の残留バッファを破棄して再表示を確認している

回放の合格条件は「画面に推論が表示されない」だけでは不十分です。最終JSON、レスポンスフィールド、Agentの子リクエスト設定が一致して初めて、修正が有効になったと判断できます。

なお、DeepSeekの料金ページにはピーク・オフピーク料金の導入予定が記載されていますが、2026年8月2日時点では実施日が公式発表待ちです。移行後の費用差を説明するときは、未発表の割増条件を確定情報として扱わないでください。(api-docs.deepseek.com)

既存環境とMac検証環境の選び方

手元の共有開発環境だけで回放すると、SDKのバージョン、環境変数、ゲートウェイ設定、Agent実行プロセスが混ざりやすくなります。担当者ごとに設定が異なり、再現時だけ別のthinking値が送られることもあります。

既存環境の弱点は、主に次の4点です。

  • 本番用環境変数がローカル検証へ混入する
  • 共通SDKの更新前後を分離しにくい
  • Agentの子プロセスや再試行処理を追いにくい
  • 同じ固定入力を複数経路で再現しにくい

一方、Mac上にSDK、ゲートウェイ、ログ取得用の実行環境を分けて用意すると、直結回放と本番相当回放を同じ手順で比較できます。長期の大量処理や物理インターフェースが必要なチームには自前環境が向きますが、移行直後の短期検証、SDK互換性確認、Agentの設定伝播テストなら、必要な期間だけレンタルする方が環境を固定しやすい場合があります。

ProxyMacのコンソールで利用環境を確認し、接続方法や運用上の制約はヘルプページで先に確認してください。複数日から数週間だけ回放する場合は、日本向けMacレンタル料金と必要期間を照合すると、常設環境を増やすべきか判断しやすくなります。

現在の共有環境を使い続ける方法は初期費用を増やしにくい反面、設定の混入、再現性不足、子リクエストの追跡漏れが残ります。DeepSeek V4-Flash-0731のthinking無効化が効かない問題を短期間で切り分けるなら、まず独立したMac環境で最終出## 送信JSONを固定し、その結果を本番ゲートウェイへ比較展開する流れが安全です。

AI開発の検証環境に、ProxyMacのMacを

ProxyMacなら、遠隔から利用できるMac環境でAIツールや開発用SDKの動作を確認できます。
設定ファイルやSDKラッパー、ゲートウェイごとの違いを実際のmacOS環境で比較できます。