原典: 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.type values 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 5adaptive のみ常時オン"enabled" / "disabled"
Mythos Previewadaptive と extended常時オン"disabled"
Opus 5.5adaptive のみ常時オン"enabled" / "disabled"
Sonnet 5.5adaptive と between_tools(※2)オン"enabled" / "disabled"
Opus 5adaptive のみオン"enabled" / "disabled"(※)
Opus 4.8 / 4.7adaptive のみオフ"enabled"
Sonnet 5adaptive のみオン"enabled"
Opus 4.6 / Sonnet 4.6adaptive と extended(非推奨)オフ無し
Opus 4.5 / Haiku 4.5 / Sonnet 4.5extended のみオフ"adaptive"

Extended thinking (thinking.type: "enabled" with budget_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 effort high or below; combining it with effort xhigh or max returns 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 supportedthinking が常時オンのモデル(Fable / Mythos / Opus 5.5 / Sonnet 5.5)。または Opus 5 で effort が xhigh / maxthinking を渡さない(Opus 5 なら effort を下げるか thinking を残す。Sonnet 5.5 で事前の thinking を切りたいなら between_tools を effort high 以下で)。思考テキストを出したくないだけなら display: "omitted"
400 "thinking.type.between_tools" is not supportedSonnet 5.5 以外に between_tools を送ったSonnet 5.5 にだけ送る。他のモデルでは thinking を省くか、蹴られない値を使う
400 output_config.effort 'xhigh' is not supported when thinking is disabledSonnet 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 disabledSonnet 5.5 で between_tools のまま、メッセージごとの effort をその時点のレベルから変えた(messages.N が変えたメッセージの位置)そのメッセージの effort を消すか、その時点のレベルに揃える。ターンごとに effort を変えたいなら adaptive
400 adaptive thinking is not supportedextended しか無いモデル{type: "enabled", budget_tokens: N} にする
400 thinking blocks … cannot be modified返ってきた assistant ターンを組み直して送り返したそのまま echo する(redacted_thinking を型で捨てるのが最頻)
400 Invalid signature in thinking blockFable 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 display defaults 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 を切ったまま運用する場合の緩和策