「zero data retention」(ゼロデータ保持)、すなわちZDRがこの機能にどのように適用されるかについては、APIとデータ保持を参照してください。
このページでは、思考の設定時や思考ブロックのラウンドトリップ(返された思考ブロックを後のリクエストで送り返すこと)における最も一般的な失敗について説明します。最初のセクションでは、各モデルがサポートする思考設定と拒否する設定を対応付けています。その後のセクションはそれぞれ、観察される症状から始まるため、エラーメッセージや予期しないレスポンスを原因と修正方法に直接照合できます。思考の仕組みについては、思考の概要を参照してください。
思考設定のエラーのほとんどは、リクエスト内の thinking.type の値とモデルがサポートするものとの不一致です。現行モデルでは、思考は thinking: {type: "adaptive"} として実行され、最新のモデルではデフォルトで有効になっています。一部の以前のモデルでは、代わりに拡張思考を使用します。これは thinking: {type: "enabled", budget_tokens: N} として設定されるレガシーの手動モードです。
拡張思考(budget_tokensを伴うthinking.type: "enabled")は、Claude 4.6モデルでは非推奨です(これを使用するリクエストは引き続き成功します)。Claude 4.7以降のモデルはこれをサポートしておらず、使用するリクエストを拒否して400エラーを返します。思考をサポートするClaude 4.5以前のモデルでは、拡張思考が唯一利用可能な思考モードです。Claude Mythos Previewは両方のモードをサポートしています。両方のモードが利用可能な場合は、代わりに適応思考を使用してください。
以下の表は、各モデルがサポートするもの、デフォルト、および400エラーで拒否される thinking.type の値を示しています。拒否として記載されていない値はすべて受け入れられます。
| モデル | 思考タイプ | デフォルト | 400で拒否 |
|---|---|---|---|
| Claude Fable 5 | アダプティブのみ | 常に有効 | "enabled"、"disabled" |
| Claude Mythos 5 | アダプティブのみ | 常に有効 | "enabled"、"disabled" |
| Claude Mythos Preview | アダプティブ、拡張 | 常に有効 | "disabled" |
| Claude Opus 5 | アダプティブのみ | 有効 | "enabled"、"disabled"2 |
| Claude Opus 4.8 | アダプティブのみ | 無効 | "enabled" |
| Claude Opus 4.7 | アダプティブのみ | 無効 | "enabled" |
| Claude Sonnet 5 | アダプティブのみ | 有効 | "enabled" |
| Claude Opus 4.6 | アダプティブ、拡張(非推奨)1 | 無効 | なし |
| Claude Sonnet 4.6 | アダプティブ、拡張(非推奨)1 | 無効 | なし |
| Claude Opus 4.5 | 拡張のみ | 無効 | "adaptive" |
| Claude Haiku 4.5 | 拡張のみ | 無効 | "adaptive" |
| Claude Sonnet 4.5 | 拡張のみ | 無効 | "adaptive" |
| Claude Opus 4.1(非推奨) | 拡張のみ | 無効 | "adaptive" |
1 これらのモデルでは enabled と budget_tokens は引き続き動作しますが、非推奨です。代わりにアダプティブ思考を使用してください。
2 Claude Opus 5 は、effort が high 以下の場合に "disabled" を受け入れます。effort xhigh または max と組み合わせると400エラーが返されます。この制限は Claude Opus 5 以降のモデルに適用され、各リクエストで強制されます。
「常に有効」とマークされたモデルは思考をオフにできません。「有効」とマークされたモデルはデフォルトで思考しますが、thinking: {type: "disabled"} を受け入れます。
以前の Claude 4 モデル(Claude Sonnet 4 および Claude Opus 4)は拡張思考のみをサポートしています。それらの利用可能性についてはモデルの非推奨化を参照してください。Claude Fable 5 と Claude Mythos 5 はゼロデータ保持では利用できません。
"thinking.type.enabled" がサポートされていないと表示されるリクエストが400エラーで失敗し、次のメッセージが表示されます:
"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.これは、リクエストしたモデルが拡張思考を削除したために発生します(各モデルが拒否する設定を参照)。
リクエストを thinking: {type: "adaptive"} に切り替え、budget_tokens の代わりに effort で思考の深さを制御してください。アダプティブ思考への移行で変換手順を説明しています。
"thinking.type.disabled" がサポートされていないと表示されるリクエストが400エラーで失敗し、次のメッセージが表示されます:
"thinking.type.disabled" is not supported for this model. Thinking defaults to adaptive mode when not specified; use "thinking.type.enabled" with "budget_tokens" for extended thinking.これは思考が常に有効なモデルで発生します:Claude Fable 5、Claude Mythos 5、Claude Mythos Preview は "disabled" を拒否します。Claude Fable 5 と Claude Mythos 5 では、エラーテキストが提案する "thinking.type.enabled" も適用されません。これらのモデルはそれも拒否します。
thinking パラメータを省略してください。これらのモデルは設定なしで思考します。思考テキストをレスポンスに含めないことが目的であれば、思考を無効にする代わりに display: "omitted" を使用してください。思考の表示の制御を参照してください。
"disabled" での400エラーは Claude Opus 5 でも発生する可能性があります。このモデルは effort が high 以下の場合にのみ thinking: {type: "disabled"} を受け入れます。effort xhigh または max との組み合わせは拒否されます。effort レベルを下げるか、思考を有効のままにしてください。
リクエストが400エラーで失敗し、次のメッセージが表示されます:
adaptive thinking is not supported on this modelこれは、モデルが拡張思考のみをサポートしているために発生します(各モデルが拒否する設定を参照)。
代わりに thinking: {type: "enabled", budget_tokens: N} を使用してください。設定については拡張思考を参照してください。
ツール結果を返すリクエストが400 invalid_request_error で失敗し、メッセージに次の内容が含まれます:
`thinking` or `redacted_thinking` blocks in the latest assistant message cannot be modifiedマルチターンおよびツール使用の会話では、以前のアシスタントメッセージを thinking および redacted_thinking ブロックを含めてAPIに送り返し、APIはそれらが変更されずに到着したことを検証します。このエラーは、送り返したアシスタントメッセージがAPIが返したものと異なる場合に発生します。最も多いのは、コードがコンテンツブロックをタイプでフィルタリングして redacted_thinking ブロックを削除している場合や、アシスタントメッセージをそのまま返す代わりに再構築している場合です。
思考ブロックを含めて、アシスタントのターンをそのまま送り返してください。ルールについては思考ブロックの保持を、すべてのSDKでの正しいコードについてはツールおよびマルチターンワークフローでの思考のラウンドトリップの実例を参照してください。
レスポンスに thinking ブロックが含まれていますが、その thinking フィールドが空文字列で、signature フィールドのみに値が入っています。
これは、新しいモデルでは display のデフォルトが "omitted" であり、テキストなしで思考ブロックが返されるために発生します。
要約された思考テキストを受け取るには、思考設定で display: "summarized" を設定してください。モデルごとのデフォルトについては思考の表示の制御を参照してください。
思考が設定されているにもかかわらず、一部のレスポンスに thinking ブロックがまったく含まれていません。
これはアダプティブモードでは正常です:Claude は、直接回答できるほど単純だと判断したリクエストでは思考をスキップします。
思考をより頻繁に、またはより深く行わせたい場合は、effort を上げるか、プロンプトで誘導してください。Claude が思考する頻度の制御を参照してください。
レスポンスが tool_use ブロックを出力する代わりにツール呼び出しをテキストに書き込んだり、表示されるテキストに <thinking> やその他の内部XMLタグを含めたりすることがあります。漏れたツール呼び出しは実行されず、エージェントループでは漏れたテキストが会話履歴に残るため、後のターンにも影響します。
これは Claude Opus 5 で思考が無効になっている場合に発生し、検索などのツールを多用するワークロードで最も一般的です。モデルに思考や推論をしないよう指示するシステムプロンプトのルールは、タグの漏れを増加させます。
思考を再度有効にし(デフォルト)、代わりに低い effort レベルを使用してトークンコストを制御してください。統合で思考を無効にしたままにする必要がある場合は、思考を無効にして実行するのプロンプトによる緩和策を適用してください。
stop_reason: "max_tokens" で停止するレスポンスが stop_reason: "max_tokens" で終了し、多くの場合テキストブロックが切り詰められているか欠落しています。
これは、思考トークンが max_tokens にカウントされるため、長い思考パスがテキストレスポンスの完了前に予算を消費してしまうことで発生します。
思考とテキストの両方に余裕を持たせるために max_tokens を上げるか、Claude が思考に費やす量を減らすために effort を下げてください。コスト制御および思考とコンテキストウィンドウを参照してください。
以前はキャッシュにヒットしていたリクエストで cache_read_input_tokens がゼロになります。
これは、思考設定と effort レベル(またはそのデフォルト)がキャッシュされたプロンプトプレフィックスの一部であるため、いずれかを変更すると新しいプレフィックスが開始されることで発生します。思考モードの切り替え、effort 値の変更、budget_tokens の変更はすべてメッセージキャッシュのブレークポイントを無効化し、モデルが設定をレンダリングする場所によっては、ツールおよびシステムプロンプトのブレークポイントも無効化する可能性があります。
会話を共有するリクエスト間では、思考設定と effort レベルを一定に保ってください。パラメータをデフォルト値に明示的に設定することは、省略することと同等であり、無効化は発生しません。思考とプロンプトキャッシングを参照してください。
effort を変更しても、思考の頻度や深さが変わりません。
これは、effort が思考の主要な制御手段となるのはアダプティブモードのみであるために発生します。拡張思考のみのモデルでは、思考の深さは代わりに budget_tokens で設定されます。
それらのモデルでは budget_tokens を調整するか、モデルがどのモードで実行されているかを確認してください。思考と effortを参照してください。effort をサポートする唯一の拡張思考のみのモデルである Claude Opus 4.5 では、effort は予算と組み合わされます。予算のルールとチューニングを参照してください。
概要:思考とは何か、設定方法、ツール、キャッシング、ストリーミングとの相互作用。
思考設定の400エラーとその正確なサーバーメッセージを含む、完全なエラーリファレンス。
budget_tokens リクエストを effort を使用したアダプティブ思考に変換します。
Was this page helpful?