思考のトラブルシューティング
最も一般的な思考の失敗を診断して修正します:設定に関する400エラー、空または欠落した思考ブロック、max_tokensによる停止、キャッシュミス。
このページでは、思考を設定する際、または思考ブロックをラウンドトリップする(返された思考ブロックを後続のリクエストで送り返す)際に最もよく発生する失敗について説明します。最初のセクションでは、各モデルがサポートする思考設定と拒否する設定を対応付けています。それ以降の各セクションは、観察される症状から始まるため、エラーメッセージや予期しないレスポンスをその原因と修正方法に直接照らし合わせることができます。思考の仕組みについては、思考の概要を参照してください。
モデル別の思考サポート、デフォルト、および拒否される設定
思考設定エラーのほとんどは、リクエスト内の thinking.type の値とモデルがサポートするものとの不一致です。ほとんどのモデルでは、思考は thinking: {type: "adaptive"} として実行され、多くのモデルではデフォルトでオンになっています。一部の以前のモデルでは、代わりに「extended thinking」(拡張思考)を使用します。これは thinking: {type: "enabled", budget_tokens: N} として設定されるレガシーの手動モードです。詳細は拡張思考を参照してください。
「Extended thinking」(拡張思考)(thinking.type: "enabled" と budget_tokens の組み合わせ)は、Claude 4.6モデルでは非推奨です(これを使用するリクエストは引き続き成功します)。Claude 4.7以降のモデルはこれをサポートしておらず、これを使用するリクエストを拒否して400エラーを返します。思考をサポートするClaude 4.5以前のモデルでは、拡張思考が利用可能な唯一の思考モードです。Claude Mythos Previewは両方のモードをサポートしています。両方のモードが利用可能な場合は、代わりにアダプティブ思考を使用してください。
この表は、各モデルがサポートするもの、デフォルト、および400エラーで拒否する thinking.type の値を示しています。拒否されると記載されていない値はすべて受け入れられます。
| モデル | 思考タイプ | デフォルト | 400で拒否 |
|---|---|---|---|
| Claude Fable 5.1 | アダプティブのみ | 常にオン | "enabled"、"disabled" |
| Claude Mythos 5.1 | アダプティブのみ | 常にオン | "enabled"、"disabled" |
| 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" |
1 enabled と budget_tokens はこれらのモデルで引き続き動作しますが、非推奨です。代わりにアダプティブ思考を使用してください。
2 Claude Opus 5 は、effort が high 以下の場合に "disabled" を受け入れます。effort xhigh または max と組み合わせると400エラーが返されます。この制限は Claude Opus 5 以降のモデルに適用され、各リクエストで強制されます。
常にオン と記載されたモデルでは思考をオフにできません。オン と記載されたモデルはデフォルトで思考しますが、thinking: {type: "disabled"} を受け入れます。
以前の Claude 4 モデル(Claude Opus 4.1、Claude Sonnet 4、Claude Opus 4)は拡張思考のみをサポートします。利用可能状況についてはモデルの非推奨を参照してください。Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5 は、Anthropic が明示的に許可しない限り、ゼロデータ保持の下では利用できません。
400エラーで "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 で思考の深さを調整してください。アダプティブ思考への移行で変換手順を説明しています。
400エラーで "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.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Mythos Preview は "disabled" を拒否します。Claude Mythos Preview を除くこれらすべてのモデルは、エラーテキストが提案する "thinking.type.enabled" も拒否します。
thinking パラメータを省略してください。これらのモデルは設定なしで思考します。レスポンスから思考テキストを除外することが目的だった場合は、思考を無効にする代わりに display: "omitted" を使用してください。思考の表示の制御を参照してください。
"disabled" に対する400エラーは Claude Opus 5 でも発生する可能性があります。Claude Opus 5 は effort が high 以下の場合にのみ thinking: {type: "disabled"} を受け入れ、effort xhigh または max との組み合わせは拒否されます。effort レベルを下げるか、思考をオンのままにしてください。
400エラーでアダプティブ思考がサポートされていないと表示される
リクエストが400エラーで失敗し、メッセージは次のとおりです。
adaptive thinking is not supported on this modelこれは、モデルが拡張思考のみをサポートしているために発生します(モデル別設定表を参照)。
代わりに thinking: {type: "enabled", budget_tokens: N} を使用してください。設定については拡張思考を参照してください。
400エラーで思考ブロックを変更できないと表示される
ツール結果を返すリクエストが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 での正しいコードについてはツールおよびマルチターンワークフローにおける思考の実例ラウンドトリップを参照してください。
400エラーで思考ブロックの署名が無効であると表示される
以前の思考ブロックを再送する Claude Fable 5.1 へのリクエストが400 invalid_request_error で失敗し、メッセージは次のとおりです。
messages.{i}.content.{j}: Invalid `signature` in `thinking` block. The block is bound to a different conversation. Remove the block, or set `thinking.block_binding.prefix_mismatch_behavior` to "drop_block".リクエストが thinking-binding-controls-2026-08-01 ベータヘッダーを送信していなかった場合、メッセージには That setting requires the `thinking-binding-controls-2026-08-01` value in the `anthropic-beta` header. が追加されます。メッセージの末尾に、変更された最初のメッセージを示す文が付くこともあります。メッセージに理由の節がまったくない場合は、ブロックの内容が変更されています。400エラーで思考ブロックを変更できないと表示されるを参照してください。
Claude Fable 5.1 では、API は再送された思考ブロックを、それに先行する system プロンプト、tools、およびメッセージが変更されていない間のみ受け入れます。このエラーは、リクエスト間で会話の前方の何かが変更されたことを意味します。編集、並べ替え、または削除されたターン、挿入されて後に削除されたターンごとのリマインダー、再構築された system プロンプトまたは tools 配列、あるいは最近のターンとその思考をそのまま保持したクライアント側のコンパクションなどです。このチェックは、2026年8月31日以降に作成された新規アカウント、および thinking.block_binding.prefix_mismatch_behavior を設定するすべてのリクエストに対して強制されます。サーバー側のコンパクションおよびコンテキスト編集がこれをトリガーすることはありません。
修正するには、履歴を追記専用に保ってください。以前のターンは送受信したとおりに正確に渡し、system や tools を編集する代わりに会話途中のシステムメッセージで指示を追加し、トリミングはサーバー側のコンテキスト編集またはコンパクションに任せてください。同じリクエストボディを再試行してもエラーは解消されません。無効化された推論なしでこのリクエストを続行するには、thinking-binding-controls-2026-08-01 ベータヘッダーを送信し、thinking.block_binding.prefix_mismatch_behavior を "drop_block" に設定してください。あるいは、履歴からすべての thinking ブロックと redacted_thinking ブロックを削除し(最低限、指定されたブロックと、そのターンおよびそれ以降のすべてのターンにおけるそれ以降のすべてのブロック)、各ターンの他のブロックはそのまま残して、一度だけ再試行してください。
対象モデルが読み取れないモデルからのブロックがこのエラーを生成することはありません。API はそれを削除し、ベータヘッダーの下では input_transformations で報告します。
レスポンスの thinking フィールドが空である
レスポンスには thinking ブロックが含まれていますが、その thinking フィールドは空文字列で、signature フィールドのみが設定されています。
これは、新しいモデルでは display のデフォルトが "omitted" であり、テキストなしで思考ブロックが返されるために発生します。
要約された思考テキストを受け取るには、思考設定で display: "summarized" を設定してください。モデルごとのデフォルトについては思考の表示の制御を参照してください。推論ではなく、一部のモデルがツール呼び出しの間に書く短いステータス行のみが必要な場合は、代わりに display: "updates"(ベータ)を設定してください。ツール呼び出し間の進捗更新を参照してください。
一部のターンで思考ブロックが表示されない
思考が設定されているにもかかわらず、一部のレスポンスに thinking ブロックがまったく含まれていません。
これはアダプティブモードでは正常です。Claude は、直接回答できるほど単純だと判断したリクエストでは思考をスキップします。
より頻繁に、またはより深く思考させたい場合は、effort を上げるか、プロンプトで誘導してください。Claude が思考する頻度の調整を参照してください。
ツール呼び出しや XML タグがテキスト出力に現れる
レスポンスが 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 を変更しても、思考の頻度や深さが変わりません。
これは、effort が主要な思考の調整手段となるのはアダプティブモードのみであるために発生します。拡張思考のみのモデルでは、思考の深さは代わりに budget_tokens で設定されます。
それらのモデルでは budget_tokens を調整するか、モデルがどのモードで実行されているかを確認してください。思考と effortを参照してください。effort をサポートする唯一の拡張思考のみのモデルである Claude Opus 4.5 では、effort は予算と組み合わされます。予算のルールと調整を参照してください。
次のステップ
概要:思考とは何か、設定方法、およびツール、キャッシング、ストリーミングとの相互作用。
思考設定の400エラーとその正確なサーバーメッセージを含む、完全なエラーリファレンス。
budget_tokens リクエストを effort を使用したアダプティブ思考に変換します。
Was this page helpful?