できること
思考ブロックの再利用判定
前のターンから送り返した思考ブロックを、現在のモデルが使えるかどうかが決まります。読めないブロックは、エラーにならずにそのリクエストから破棄されます。
履歴の変更を検知
ブロックより前の system・tools・messages が生成時と異なると、そのブロックと以降の思考ブロックは prefix チェックに失敗します。ベータヘッダーを付けると、失敗したブロックを拒否するか破棄するかを選べます。
破棄の内容を確認
ベータヘッダーの下では、思考に対応したモデルのすべてのレスポンスに input_transformations が付き、対象の思考ブロックの path と reason が分かります。
機能解説
概要
前のターンで生成された思考ブロックをリクエストに含めて送り返したとき、モデルがそのブロックを使えるかどうかを決めます。現在のモデルが読めない思考ブロックは、API がエラーを出さずにそのリクエストから破棄します。思考ブロックを含む会話履歴を再送するマルチターンの連携を作る場面に関わる機能です。
モデルとアカウントによる制限
思考ブロックが使えるかどうかは、生成したモデルとアカウントによって決まります。
- Claude Fable 5.1 と Claude Mythos 5.1 が生成した思考ブロックは、生成したモデルかそれより新しいモデルに対してだけ保持されます。それより前のモデルは読めず、前のモデルに再送されたブロックは API が破棄します。
- Claude Fable 5.1 は、Claude Opus 5、Claude Fable 5、Claude Mythos 5 およびそれ以前の Claude モデルの思考ブロックを受け付けます。
- Claude Sonnet 5.5 と Claude Haiku 5.5 が生成した思考ブロックは、生成したアカウントか、それに紐付いたアカウントでだけ機能します。別のアカウントが Claude Sonnet 5.5 のブロックを送ると、API はモデルが見る前にそのブロックを破棄し、リクエストは成功します。このアカウント単位の制限は、それより前のモデルのブロックには影響しません。
API は messages 配列を編集しないため、読めないモデルに対して破棄されたブロックも履歴には残ります。同じ履歴を Claude Fable 5.1 に戻すと、そのブロックは再び読めます。
prefix チェックの対象
prefix は、ブロックより前にある最上位の system プロンプト、tools、messages です。これがブロック生成時と異なると、そのブロックと以降のすべての思考ブロックが prefix チェックに失敗します。
effort・max_tokens・output_config・tool_choice・metadataなど、この 3 つ以外のリクエストパラメータと、cache_controlマーカーはチェックの対象外です。- 思考ブロックは、最も古いもの、最も新しいもの、またはすべてを取り除けます。途中の 1 つを取り除くと、それより後の思考ブロックが無効になります。
- 各レスポンスの
content配列を保存し、thinkingフィールドが空のthinkingブロックも含めて、受け取った順のまま assistant ターンとして送り返します。 - system プロンプトを作り直す代わりに、セッション開始時に
systemを固定し、変更が生じた時点のmessagesにrole: "system"のメッセージを追加する方法があります。 - サーバー側のコンパクションやコンテキスト編集は、送ったとおりの会話を比較するため、編集とは見なされません。
- 会話全体を 1 つの user メッセージに要約し、次の指示と一緒に送るシンプルなコンパクションでは、以前の思考が再送されないため、チェックに失敗する思考が残りません。
preserved thinking に対応したモデルでは、オンデマンドのコンパクション後に逐語で残したターンの思考が有効なまま保たれる場合があります。
無効なブロックの扱いとエラーへの対処
thinking-binding-controls-2026-08-01 ベータヘッダーを付けると、thinking.block_binding.prefix_mismatch_behavior で動作を選べます。
"error": 最初に失敗したブロックを示す 400invalid_request_errorでリクエストを拒否します。"drop_block": 失敗したブロックとそれ以降のすべての思考ブロックを破棄し、リクエストは成功します。
Claude Fable 5.1 では、2026 年 8 月 31 日以降に作成されたアカウントの場合、system プロンプト・tools・それより前のメッセージが変わった後にブロックを再送すると 400 エラーが返ります。ベータヘッダーを付けている場合、それより前に作成され prefix_mismatch_behavior が未設定のアカウントからのリクエストのようにチェックが強制されないリクエストでは、失敗したブロックが input_transformations に thinking_mismatch_allowed として示されます。このブロックは変更されずにモデルに届き、課金の対象になります。
400 エラーを受けたときは、同じ本文を再送しません。応急の対処としてベータヘッダーと prefix_mismatch_behavior: "drop_block" を付けて 1 回だけ再試行し、その選択をセッションに保存して、再起動後も含めて以降のリクエストで送ります。そのうえで、不一致の原因になった編集を修正します。ベータヘッダーや block_binding を送れない場合は、エラーが示したブロックとそれ以降の thinking・redacted_thinking ブロックを取り除いて続行できます。なお、Claude Sonnet 5.5 と Claude Haiku 5.5 では、block_binding は thinking: {"type": "adaptive"} の場合だけ機能します。
使い方
連携コードが prefix を書き換えていないかを手動で確認する流れです。
- コンパクションやツールの変更を含む通常のターンを数回実行し、連携が送るリクエスト本文を記録します。
- 連続する 2 つのリクエストごとに、
system・tools・共有しているmessagesを比べます。新たに追加されたターンの手前までは同一である必要があります。 thinking-binding-controls-2026-08-01ベータヘッダーを付け、prefix_mismatch_behaviorを"drop_block"に設定して、claude-fable-5-1 で通常のマルチターンのセッションを連携経由で実行します。- 連携のすべてのターンで
input_transformationsをログに記録します。 - reason が
"prefix_binding_mismatch"のエントリがあれば、そのターンまでのsystem・tools・messagesの差分を取るか、"error"でリクエストを再送します。返る 400 エラーは、多くの場合、何が変わったかを示す文で終わります。
利用シーン
思考ブロックを含む履歴を再送する既存の連携コードが、prefix を書き換えていないかを点検する場面に向いています。
会話の途中でモデルを切り替える連携で、思考ブロックがどう扱われるかを設計時に確認する場面に使えます。
長くなった会話のコンテキストを縮める方式 (サーバー側のコンパクションかシンプルなコンパクションか) を選ぶ場面に向いています。
複数のアカウントで同じ会話履歴を扱う運用で、Claude Sonnet 5.5 の思考ブロックの扱いを確認する場面に使えます。
ChatGPT・OpenAI の対応する機能
公式リリースノートでは、対応する発表を確認できていません (2026-11-03 時点)。 これは、対応する機能が存在しないことを示すものではありません。
これまでの変更
Claude Sonnet 5.5 の思考ブロックがモデルと会話に結び付けられ、生成したアカウントかそれに紐付いたアカウントでだけ機能するようになりました。
input_transformationsに 2 つ目のエントリ種別thinking_mismatch_allowedが追加されました。preserved thinking に対応したモデルでは、オンデマンドのコンパクション後に逐語で残したターンの思考が有効なまま保たれる場合があります。Claude Fable 5.1 と Claude Mythos 5.1 の思考ブロックを生成モデルかそれより新しいモデルに限って保持する仕組みと、Claude Fable 5.1 での prefix チェックが示されました。2026 年 8 月 31 日以降に作成されたアカウントでは、変更後の再送が 400 エラーになります。
thinking-binding-controls-2026-08-01ベータヘッダーによるinput_transformationsでの報告と、拒否・破棄の選択も加わりました。