原典: Troubleshooting thinking / 日本語版
一行要約
thinking の失敗を症状から引く1本。モデルによって 400 で蹴られる thinking.type が違うこと、Fable 5.1・Opus 5.5・Sonnet 5.5 は会話の前方が変わると過去の thinking ブロックを受け付けないことを、エラー文から引ける(検査の仕組みそのものは thinking)。
要点
thinking が「何であるか」を書くのに対し、この文書はエラーメッセージや不可解な応答から原因に降りるための表になっている。
モデル別に、何を受け付けて何を 400 で蹴るか
The table lists what each model supports, what it defaults to, and which
thinking.typevalues it rejects with a 400 error; any value not listed as rejected is accepted.表は、各モデルが何をサポートし、既定が何で、どの
thinking.typeを 400 で蹴るかを並べている。蹴ると書かれていない値は受け付けられる。
| モデル | thinking の種類 | 既定 | 400 で蹴る |
|---|---|---|---|
| Fable 5.1 / Mythos 5.1 / Fable 5 / Mythos 5 | adaptive のみ | 常時オン | "enabled" / "disabled" |
| Mythos Preview | adaptive と extended | 常時オン | "disabled" |
| Opus 5.5 | adaptive のみ | 常時オン | "enabled" / "disabled" |
| Sonnet 5.5 | adaptive と between_tools(※2) | オン | "enabled" / "disabled" |
| Opus 5 | adaptive のみ | オン | "enabled" / "disabled"(※) |
| Opus 4.8 / 4.7 | adaptive のみ | オフ | "enabled" |
| Sonnet 5 | adaptive のみ | オン | "enabled" |
| Opus 4.6 / Sonnet 4.6 | adaptive と extended(非推奨) | オフ | 無し |
| Opus 4.5 / Haiku 4.5 / Sonnet 4.5 | extended のみ | オフ | "adaptive" |
Extended thinking (
thinking.type: "enabled"withbudget_tokens) is deprecated on the Claude 4.6 models (requests using it still succeed). Claude 4.7 and later models do not support it and reject requests that use it, returning a 400 error.extended thinking(
budget_tokensを伴うthinking.type: "enabled")は Claude 4.6 では非推奨(使ったリクエストは今も通る)。Claude 4.7 以降はサポートせず、使ったリクエストを 400 で蹴る。
※ の中身が実運用で効く。Opus 5 は「thinking を切る」と「effort を上げる」を同時にできない。
Claude Opus 5 accepts
"disabled"at efforthighor below; combining it with effortxhighormaxreturns a 400 error. This restriction is enforced on each request.Opus 5 は effort が
high以下のときだけ"disabled"を受け付ける。xhighやmaxと組み合わせると 400。 この制限はリクエストごとに判定される。
取得の原典では「Opus 5 以降に適用」の一節が消え、Opus 5.5 は「Always on」で "disabled" をどの effort でも拒否する。 「後のモデルも high 以下なら切れる」とは読まないこと。
※2 Sonnet 5.5 は "disabled" の代わりに "between_tools" を受け付ける("between_tools" を受け付けるのは Sonnet 5.5 だけ)。事前の thinking を切る値で、effort high 以下でだけ受け付ける。xhigh / max と組み合わせると 400、メッセージごとの effort がその時点のレベルと違っても 400。block_binding は "adaptive" のときしか効かないので、between_tools では履歴を append-only に保つか、編集したターン以降の thinking ブロックを剥がす。
症状から引く
| 症状 | 原因 | 対処 |
|---|---|---|
400 "thinking.type.enabled" is not supported | そのモデルが extended thinking を廃止した | {type: "adaptive"} にして、budget_tokens でなく effort で深さを操る |
400 "thinking.type.disabled" is not supported | thinking が常時オンのモデル(Fable / Mythos / Opus 5.5 / Sonnet 5.5)。または Opus 5 で effort が xhigh / max | thinking を渡さない(Opus 5 なら effort を下げるか thinking を残す。Sonnet 5.5 で事前の thinking を切りたいなら between_tools を effort high 以下で)。思考テキストを出したくないだけなら display: "omitted" |
400 "thinking.type.between_tools" is not supported | Sonnet 5.5 以外に between_tools を送った | Sonnet 5.5 にだけ送る。他のモデルでは thinking を省くか、蹴られない値を使う |
400 output_config.effort 'xhigh' is not supported when thinking is disabled | Sonnet 5.5 で between_tools と effort xhigh / max(between_tools には事前の thinking が無いので「disabled」と言われる) | effort を high 以下に下げる。xhigh / max で走らせたいなら adaptive(thinking を省くか "adaptive")。"enabled" は Sonnet 5.5 では 400 |
400 effort cannot change when thinking is disabled | Sonnet 5.5 で between_tools のまま、メッセージごとの effort をその時点のレベルから変えた(messages.N が変えたメッセージの位置) | そのメッセージの effort を消すか、その時点のレベルに揃える。ターンごとに effort を変えたいなら adaptive |
400 adaptive thinking is not supported | extended しか無いモデル | {type: "enabled", budget_tokens: N} にする |
400 thinking blocks … cannot be modified | 返ってきた assistant ターンを組み直して送り返した | そのまま echo する(redacted_thinking を型で捨てるのが最頻) |
400 Invalid signature in thinking block | Fable 5.1 / Opus 5.5 / Sonnet 5.5 で会話の前方が変わった(または signature 自体が壊れた) | 下記 |
thinking フィールドが空文字 | display の既定 | display: "summarized"。ツール呼び出しの合間に一部のモデルが書く短い状況報告だけ欲しいなら display: "updates"(beta。対応モデルは thinking)。空でもブロックは完全(signature が推論を持つ)なので、そのまま送り返す |
| そもそも thinking ブロックが無いターンがある | adaptive の正常動作 | 必要なら effort を上げる |
本文に tool 呼び出しや <thinking> が漏れる | Opus 5 で thinking を切っている | thinking を戻し、コストは effort で削る |
stop_reason: "max_tokens" で切れる | thinking も max_tokens を食う | max_tokens を上げるか effort を下げる |
| キャッシュヒットが急に 0 になった | thinking 設定と effort がキャッシュ前置の一部 | 会話中は変えない |
| effort を変えても thinking が変わらない | extended のみのモデル | budget_tokens を触る(extended のみで effort に対応する唯一の Opus 4.5 では、effort と予算が組み合わさる) |
Fable 5.1 / Opus 5.5 / Sonnet 5.5 の thinking ブロックは会話に紐付く
過去の thinking ブロックを送り返すとき、Fable 5.1・Opus 5.5・Sonnet 5.5 は「その手前が一字も変わっていないこと」を要求する。ターンの編集・並べ替え・削除、途中で入れて後で消したリマインダ、system や tools の組み直し、クライアント側で直近だけ残す圧縮 —— どれでも壊れる。
The check is enforced for new accounts created on or after a set date, and for any request that sets
thinking.block_binding.prefix_mismatch_behavior. Server-side compaction and context editing never trigger it.この検査は 一定の日以降に作られたアカウントと、
thinking.block_binding.prefix_mismatch_behaviorを設定したリクエストに対して強制される。サーバ側の compaction と context editing はこれを引き起こさない。
Retrying the same request body doesn’t clear the error.
同じリクエストボディで再試行してもエラーは消えない。
エラーメッセージの読み方: 末尾にはたいてい、何が変わったか(system・tools・最初に食い違うメッセージやブロック・欠けた/増えた内容・欠けた/順序が狂った thinking ブロック)を述べる一文が付く。これは人とログのためで、文言は変わりうるのでコードで照合しない。 メッセージが Invalid `signature` in `thinking` block で終わっていれば、前方の変化ではなく signature 自体が検証に落ちた(切り詰め・改変・空で送り返した)ので、prefix_mismatch_behavior は効かない。
対象モデルが読めないモデルのブロックは、このエラーを出さない(API が捨て、beta header があれば input_transformations に報告する)。
つまり直し方は3つしかない。履歴を append-only に保つ(指示を足したいなら system を書き換えず、会話途中の system メッセージを使い、削るのは context-editing と compaction に任せる)か、thinking-binding-controls-2026-08-01 ベータヘッダを付けて prefix_mismatch_behavior を "drop_block" にするか、履歴から thinking と redacted_thinking を両方剥がして1回だけ再送するか(少なくとも名指しされたブロックとそれ以降を、そのターンと以降の全ターンで。各ターンの他のブロックは残す —— 丸ごと落とすと今度は「ブロックを変更した」側の 400 になる)。
「空の thinking」と「thinking が無い」は別の症状
This happens because
displaydefaults to"omitted"on newer models, which returns thinking blocks without their text.新しいモデルでは
displayの既定が"omitted"で、thinking ブロックはテキスト抜きで返る。
This is normal in adaptive mode: Claude skips thinking on requests it judges simple enough to answer directly.
adaptive ではこれが正常。Claude は直接答えられるほど簡単だと判断したリクエストでは thinking を飛ばす。
前者は signature だけが埋まったブロックが返る(display: "summarized" で本文が返る)。後者はブロックそのものが無い。設定ミスを疑う前に、どちらの形か見る。
thinking を切ると tool 呼び出しが本文に漏れる(Opus 5)
This happens on Claude Opus 5 when thinking is disabled, most commonly on tool-heavy workloads such as search. System-prompt rules instructing the model not to think or not to reason increase the tag leakage.
これは Opus 5 で thinking を無効にしたときに起きる。検索のようなツール主体の作業で最も多い。「考えるな」「推論するな」と system プロンプトで指示すると、タグの漏れは増える。
A leaked tool call never runs, and in agentic loops the leaked text stays in the conversation history, so later turns are affected as well.
漏れた tool 呼び出しは実行されない。 そしてエージェントのループでは、その漏れたテキストが会話履歴に残るので、後続のターンにも影響する。
コスト都合で thinking を切るのは筋が悪い、というのがこの節の主張になっている。切らずに effort を下げる。
キャッシュを壊すのは「変えたこと」であって「書いたこと」ではない
Keep the thinking configuration and effort level constant across requests that share a conversation; setting a parameter explicitly to its default is equivalent to omitting it and does not invalidate.
会話を共有するリクエスト間では thinking 設定と effort を一定に保つ。パラメータを明示的に既定値と同じ値にするのは、省略するのと等価で、キャッシュを無効化しない。
thinking のモード切り替え・effort の変更・budget_tokens の変更は、いずれも message のキャッシュ境界を無効化し、モデルが設定をどこに展開するかによっては tools と system の境界まで巻き込む。
そのまま使える具体例
"thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior."disabled" の 400 は、Fable 5.1 / Mythos 5.1 / Fable 5 / Mythos 5 / Opus 5.5 では:
"thinking.type.disabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort" to control thinking behavior.Mythos Preview(thinking 常時オンのモデルのうち、唯一 extended thinking を受け付ける)では:
"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.Sonnet 5.5 では、どの effort でも 400 で、文面が違う(以前の取得で変わった。以前は他のモデルの文面に Use "thinking.type.between_tools" for the lowest thinking setting, or … が続く形だった):
To turn thinking off on this model, send "thinking": {"type": "between_tools"} instead of {"type": "disabled"}. The model does not think before responding. The short updates it writes between tool calls come back as thinking blocks.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` or `redacted_thinking` blocks in the latest assistant message cannot be modified"disabled" の 400 はモデルによって勧める先が違う。 Mythos Preview は "enabled" + budget_tokens(Mythos Preview は受け付ける)を、他の常時オンのモデルは adaptive + effort を勧める。Sonnet 5.5 は between_tools を送るよう勧める(事前には考えず、ツール呼び出しの合間に書く短い更新が thinking ブロックとして返る)。他のモデルで "enabled" を試すと、今度は "enabled" の 400 になる。
原典で言及されている関連文書
- thinking — thinking の総論。設定・保持・キャッシュ・context window
- effort — 400 の対処が繰り返し指す先。深さの操作は effort に寄せる
- thinking-steering-and-cost — thinking の頻度を prompt で操る側とコスト
- compaction / context-editing — 削るのはサーバ側に任せよ、と原典は言う。ただし閾値 compaction の後に自分で直近のターンを差し戻すと、Fable 5.1 / Opus 5.5 ではその thinking が検査に落ちる(compaction-threshold。本文のとおり、前方の検査は Sonnet 5.5 にもかかる)。全部を要約させれば起きない
- prompting-claude-opus-5 — thinking を切ったまま運用する場合の緩和策