"adaptive thinking is not supported"エラーの原因と対処法
Claude 4.5以前のモデルにthinking type adaptiveを送ると400エラーになる。原因のモデル区分と、budget_tokens方式への戻し方を整理する。
"adaptive thinking is not supported on this model"は何のエラーか
thinking: {"type": "adaptive"} を含むリクエストが、モデル側でadaptive thinkingに対応していないときに返る400 invalid_request_errorです。エラーメッセージは次の1行だけです。
adaptive thinking is not supported on this model原因は明確です。adaptive thinkingは新しい世代のモデルから使えるようになった仕組みで、extended thinkingしか対応しない旧世代モデルにadaptiveを指定すると、このエラーになります。対象はClaude 4.5以前でthinkingに対応するモデル(Claude Opus 4.5・Claude Haiku 4.5・Claude Sonnet 4.5、およびそれより前のClaude Opus 4.1・Claude Sonnet 4・Claude Opus 4)です。これらのモデルは"adaptive"を拒否し、"enabled"(budget_tokens指定の従来方式)だけを受け付けます。
adaptive thinkingとextended thinkingの違い
adaptive thinkingは、ほとんどの新しいモデルが対応するthinkingの既定方式です。budget_tokensを手動で指定する代わりにeffortパラメータで思考の深さを調整します。多くのモデルではデフォルトで有効になっています。
extended thinkingは、thinking: {"type": "enabled", "budget_tokens": N}で予算をトークン数で直接指定する旧方式です。Claude 4.5以前のthinking対応モデルはこちらしかサポートしません。2方式の位置付けはthink toolとextended thinkingの使い分けでも整理しています。
両方式を新しいモデルと古いモデルの両方に対応させたい実装では、モデルIDで分岐してthinkingパラメータの中身を切り替える必要があります。
モデル別のthinkingサポート早見表
| モデル | 対応するthinking | 既定 | "adaptive"を送ると |
|---|---|---|---|
| Claude Fable 5.1 / Mythos 5.1 / Fable 5 / Mythos 5 | 対応するthinkingadaptiveのみ | 既定常時オン | "adaptive"を送ると問題なし(既定と同じ) |
| Claude Mythos Preview | 対応するthinkingadaptive・extended両方 | 既定常時オン | "adaptive"を送ると問題なし |
| Claude Opus 5 / Sonnet 5 | 対応するthinkingadaptiveのみ | 既定オン | "adaptive"を送ると問題なし |
| Claude Opus 4.8 / 4.7 | 対応するthinkingadaptiveのみ | 既定オフ | "adaptive"を送ると問題なし(要effort) |
| Claude Opus 4.6 / Sonnet 4.6 | 対応するthinkingadaptive・extended両方(extendedは非推奨) | 既定オフ | "adaptive"を送ると問題なし |
| Claude Opus 4.5 / Haiku 4.5 / Sonnet 4.5 | 対応するthinkingextendedのみ | 既定オフ | "adaptive"を送ると400エラー |
表の最終行がこの記事の対象です。Claude 4.5世代のモデルにadaptive thinkingを送ると、他のモデルでは通る同じリクエストがここでだけ400を返します。
対処法 — budget_tokens付きのenabledに戻す
このエラーが出たら、thinkingパラメータを次の形に書き換えます。
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-5-20250929",
"max_tokens": 2048,
"thinking": {
"type": "enabled",
"budget_tokens": 4096
},
"messages": [
{"role": "user", "content": "この設計の妥当性を検討してください"}
]
}'typeを"enabled"に戻し、effortではなくbudget_tokensでトークン数を直接指定します。
budget_tokensには制約があります。max_tokensより小さい値であることが必須です。thinkingに使ったトークンもその会話ターンのmax_tokensに含まれるため、最終応答の分の余白を残して設計する必要があります(interleaved thinkingを使う場合はこの制約の対象外)。この制約があるため、max_tokens: 0によるキャッシュのプリウォーミングとextended thinkingは併用できません。budget_tokensの値がmax_tokensを超えて「Thinking budget exceeds」エラーになるケースは、別記事で扱っています。
Claude Opus 4.5に限ってはeffortも併用します。extended thinkingのみ対応するモデルの中で唯一effortパラメータに対応しており、effortが応答全体の傾向を、budget_tokensがthinkingの深さを別々に制御します。Haiku 4.5・Sonnet 4.5ではeffortは使えず、budget_tokensだけで調整します。
extended thinkingへ戻す動機は、エラーを消すことだけではありません。手動で予算を固定できるぶん、レイテンシの予測しやすさやthinkingコストの厳密な制御が必要なワークロードでは、旧世代モデルのbudget_tokens方式そのものが実運用上の利点になります。Prompt Cachingの仕組みと組み合わせる場合は注意が必要で、リクエスト間でbudget_tokensの値を変えるとキャッシュのブレークポイントが無効になります。値はthinkingブロックとしてプロンプトに描画されるため、budget_tokensを頻繁にチューニングする実装ではキャッシュヒット率が落ちる副作用が出ます。
Claude Sonnet 4.6での実測が公式に載っています。同じbudget_tokens(4,000トークン)で2回目のリクエストを送るとキャッシュがヒットし(cache_read_input_tokens: 1370)、3回目に予算を8,000トークンへ変えるとキャッシュが再生成されます(cache_creation_input_tokens: 1370, cache_read_input_tokens: 0)。運用上の教訓はシンプルで、キャッシュを効かせたい会話ではbudget_tokensを一度決めたら変えないことです。
会話の途中でthinkingを切り替えたいときの制約
extended thinkingには、adaptive thinkingには無い制約が1つ増えます。thinking対応リクエストの最後のassistantターンは、必ずthinkingブロックで始まる必要があります。adaptive thinkingではこの要件がなくなりますが、旧世代モデルで動かす限りは意識しておく必要があります。ターンをまたいでthinkingの設定(オン/オフやbudget_tokensの値)を変えることも、プロンプトキャッシュを無効化する操作として扱われます。
複数モデルを併用する実装ではどう分岐するか
同じアプリケーションでClaude 4.5世代と新しいモデルの両方を呼び分ける場合、モデルIDを見てthinkingオブジェクトの形を丸ごと切り替えるのが確実です。「新しいモデルにもbudget_tokensを送れば動くはず」という判断はできません。Claude 4.7以降は逆にextended thinking("enabled")そのものを拒否するため、双方向に非互換です。片方の方式で全モデルをカバーしようとすると、どちらの世代かで必ずどちらかのエラーに当たります。
すでにadaptive thinking前提で実装していて、Claude 4.5世代へのフォールバックを追加する場合は、モデルの世代を判定してからthinkingパラメータを組み立てる分岐を通す設計にします。effortを使うコードパスとbudget_tokensを使うコードパスを両方持たせ、モデルIDの世代判定だけをスイッチにするのが最小の変更で済みます。
将来モデルを切り替えるときの逆方向の書き換え
新しいモデルへ移行する予定があるなら、budget_tokensからeffortへの書き換え方も知っておくと二度手間になりません。公式の移行マッピングはシンプルです。
| extended thinking(旧) | adaptive thinking(新) |
|---|---|
thinking: {"type": "enabled", "budget_tokens": 10000} | adaptive thinking(新)thinking: {"type": "adaptive"} |
思考深度はbudget_tokensで直接指定 | adaptive thinking(新)思考深度はoutput_config: {"effort": "high"}で指定 |
interleaved-thinking-2025-05-14ベータヘッダーが必要 | adaptive thinking(新)不要(adaptiveは自動で割り込み思考を行う。ヘッダーを送っても無視される) |
budget_tokensを削除してthinking: {"type": "adaptive"}に置き換え、深度制御をoutput_config.effortへ移すだけの変更です。ただし挙動そのものが変わる点には注意が必要です。固定予算では毎回thinkingが走りますが、adaptiveではモデルが入力の難度に応じてthinkingするかどうか自体を判断し、簡単な入力ではthinkingを省略することがあります。また、Claude Opus 4.5と4.6以降の番号を持つモデルは前ターンのthinkingブロックを文脈に保持して入力トークンとして課金しますが、Sonnet 4.5・Haiku 4.5などそれ以前のモデルは保持しない、という差もあります。
"thinking.type.enabled" is not supportedとの違い
似た文言のエラーに"thinking.type.enabled" is not supported for this modelがあります。これは逆方向のエラーで、Claude 4.7以降のモデルに旧方式の"enabled"(extended thinking)を送ったときに発生します。
| エラー文言 | 発生条件 | 対処 |
|---|---|---|
adaptive thinking is not supported on this model | 発生条件旧世代モデルに"adaptive"を送った | 対処"enabled" + budget_tokensに戻す |
"thinking.type.enabled" is not supported for this model | 発生条件Claude 4.7以降に"enabled"を送った | 対処"adaptive" + effortに変える |
どちらのエラーも文言が似ているうえに対処が正反対なので、エラーメッセージの主語(adaptiveかenabledか)を必ず確認してから直します。
まとめ
adaptive thinking is not supported on this modelは、Claude Opus 4.5・Haiku 4.5・Sonnet 4.5などextended thinkingしか対応しないモデルにthinking: {"type": "adaptive"}を送ったときの400エラーです。対処はthinking: {"type": "enabled", "budget_tokens": N}への書き換えの一択で、effortパラメータはこれらのモデルでは使えません。複数世代のモデルを併用するなら、モデルIDでの分岐を実装に組み込んでおくと、今後のモデル切り替えでも同じエラーを繰り返さずに済みます。
よくある質問
effortパラメータをClaude 4.5世代でも使えるようにする方法はあるか
Claude Opus 4.5だけ例外的に対応しています。extended thinkingのみのモデルの中で唯一effortを受け付け、budget_tokensと併用します。Haiku 4.5・Sonnet 4.5ではeffortは使えないため、思考の深さはbudget_tokensの値だけで調整します。
エラーが出てもthinkingパラメータ自体を省略すれば動くか
モデルによります。Claude 4.5世代はthinkingの既定がオフのモデルが多く、thinkingを省略すれば通常のリクエストとして通ります。ただしその場合はthinkingが働かないため、意図的にextended thinkingを使いたいなら省略ではなく"enabled"への書き換えが必要です。
ツール呼び出しの合間にもthinkingさせたい(interleaved thinking)場合はどうなるか
Claude 4.5世代でinterleaved thinkingを使うには、interleaved-thinking-2025-05-14ベータヘッダーとthinking: {"type": "enabled", "budget_tokens": N}を組み合わせます。interleaved thinkingを使う場合に限り、budget_tokensはmax_tokensを超えてよいという例外があります。ただしClaude Haiku 4.5はinterleaved thinking自体に対応しておらず、ベータヘッダーを送っても受理はされるものの効果はありません(Claude APIはサポート対象外のモデルでもヘッダー自体はエラーにせず無視します)。対応はツール呼び出しがMessages API経由であることが前提です。Claude Sonnet 4.6・Claude Opus 4.6のように4.6世代へ移行する予定があるなら、Sonnet系はベータヘッダーのまま動くもののadaptive thinkingへの移行が推奨、Opus系はそもそも手動モードでの割り込み思考自体が無くadaptiveでしか使えない、という世代差も踏まえて設計します。