思考
Claudeの思考の仕組みを理解します。思考を有効にする方法、思考出力の読み取り方、effortによる思考の深さの調整、そしてツール、キャッシング、ストリーミングと組み合わせた思考の使い方を説明します。
1回のパスで回答するモデルは、最初の試行ですべてを正しく行う必要があります。下書きも、確認も、途中での方針転換もできません。証明、厄介なバグ、長時間のエージェントタスクでは、最初のアプローチが最善とは限りません。
「thinking」(思考)は、この制約を取り除きます。思考が有効な場合、Claudeは回答する前に自分の言葉で問題に取り組みます。何が求められているかを言い換え、さまざまなアプローチを試し、中間結果を確認し、うまくいかない道筋は放棄します。この事前の思考は、応答の前に thinking コンテンツブロックとして届き、Claudeはそれをもとに最終的な回答を生成します。そのため思考は、数学、コーディング、分析、長時間実行されるエージェント型の作業といった複雑なタスクのパフォーマンスを向上させます。こうしたタスクでは、回答の品質が中間作業に左右されます。思考がなければ、その中間作業は応答そのものに圧縮されるか、省略されてしまいます。
思考にはコストがかかります。Claudeが推論に費やすトークンは、思考テキストが返されない場合でも出力トークンとして課金され、レスポンステキストとともにmax_tokensにカウントされます。このページでは、API全体での思考の動作について説明します。具体的には、思考の有効化、出力の読み取り、そしてツール、「streaming」(ストリーミング)、キャッシング、「context window」(コンテキストウィンドウ)との相互作用の管理を扱います。
思考の仕組み
特定のリクエストでClaudeが思考するかどうか、またどの程度深く思考するかは、思考の設定とリクエストの複雑さによって決まります。
応答における事前思考は次のようになります。1つ以上のthinkingコンテンツブロックがtextブロックの前に届きます。思考ブロックは、それに続くtextブロックと同様に生成されたコンテンツですが、正規の応答とは分離されています。各思考ブロックにはsignatureフィールドも含まれています。これは完全な推論の暗号化されたコピーであり、マルチターンおよびツール使用の会話では変更せずにそのまま返します(思考の暗号化を参照):
{
"content": [
{
"type": "thinking",
"thinking": "Let me break this down. The question has two parts, so I'll start with the simpler one and use its result to constrain the second...",
"signature": "WaUjzkypQ2mUEVM36O2Txu...."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}このテキストが常に表示されるとは限らず、表示されるものが生の思考の連鎖であることは決してありません。思考ブロック内のテキストはClaudeの推論の要約です。思考設定のdisplayフィールドは、その要約を返すかどうかを制御します。"summarized"は要約を返し、多くのモデルでデフォルトである"omitted"は、thinkingフィールドが空の思考ブロックを返します。いずれの場合も、ブロックの課金は同じであり、マルチターンの会話で返す方法も同じです。モデルごとのデフォルトと詳細については、思考表示の制御を参照してください。
Claudeがツールを使用する場合、ツール呼び出しの間にも思考が現れることがあります。ツール使用と思考を参照してください。完全な応答形式については、Messages APIリファレンスを参照してください。
思考の設定
ほとんどのモデルでは、思考はデフォルトで有効になっているか、パラメータを1つ設定するだけで有効になります。次の表は、リクエストが送信できる各thinking値に対して各モデルがどのように動作するかを示しています。400エラーはAPIがリクエストを拒否することを意味し、思考のトラブルシューティングに各エラーとその修正方法が記載されています。
| モデル | thinkingフィールドなし | "adaptive" | budget_tokens付きの"enabled" | "between_tools" | "disabled" |
|---|---|---|---|---|---|
| Claude Opus 5.5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 400エラー |
| Claude Sonnet 5.5 | 適応型思考 | 適応型思考 | 400エラー | high effort以下で事前思考オフ | 400エラー |
| Claude Haiku 5.5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | high effort以下で思考オフ |
| Claude Fable 5.1 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 400エラー |
| Claude Mythos 5.1 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 400エラー |
| Claude Fable 5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 400エラー |
| Claude Mythos 5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 400エラー |
| Claude Opus 5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | high effort以下で思考オフ |
| Claude Sonnet 5 | 適応型思考 | 適応型思考 | 400エラー | 400エラー | 思考オフ |
| Claude Opus 4.8 | 思考オフ | 適応型思考 | 400エラー | 400エラー | 思考オフ |
| Claude Opus 4.7 | 思考オフ | 適応型思考 | 400エラー | 400エラー | 思考オフ |
| Claude Mythos Preview | 適応型思考 | 適応型思考 | 拡張思考 | 400エラー | 400エラー |
| Claude Opus 4.6 | 思考オフ | 適応型思考 | 拡張思考(非推奨) | 400エラー | 思考オフ |
| Claude Sonnet 4.6 | 思考オフ | 適応型思考 | 拡張思考(非推奨) | 400エラー | 思考オフ |
| Claude Opus 4.5 | 思考オフ | 400エラー | 拡張思考 | 400エラー | 思考オフ |
| Claude Sonnet 4.5 | 思考オフ | 400エラー | 拡張思考 | 400エラー | 思考オフ |
| Claude Haiku 4.5 | 思考オフ | 400エラー | 拡張思考 | 400エラー | 思考オフ |
表中の「high effort以下」とは、リクエストがlow、medium、highのeffortでは機能し、xhighまたはmaxでは400エラーを返すことを意味します。
Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5.5、Claude Sonnet 5、Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Haiku 5.5では、思考はすでに有効になっており、設定は不要です。これらのモデルではdisplayのデフォルトが"omitted"であるため、オプトインするまで思考テキストは非表示になります。次の例のように、thinking: {"type": "adaptive", "display": "summarized"}でオプトインしてください。
Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6、Claude Sonnet 4.6では、thinking: {type: "adaptive"}を設定するまで思考はオフです。この設定により、Claudeはリクエストに基づいて、いつ、どの程度深く思考するかを判断します。同じリクエストでモデル文字列を差し替えるだけで、これらのモデルでも思考が有効になります。次の例では、思考テキストが表示されるようにdisplay: "summarized"を設定し、余裕のあるmax_tokensを使用しています:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5-5",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
)
for block in response.content:
match block.type:
case "thinking":
print(f"\nThinking: {block.thinking}")
case "text":
print(f"\nResponse: {block.text}")この例を実行すると、要約された思考が出力され、その後に回答が出力されます:
Thinking: Use Euclidean algorithm.
1071 = 2*462 + 147
462 = 3*147 + 21
147 = 7*21 + 0
GCD = 21
Response: ## Finding GCD of 1071 and 462
I'll use the **Euclidean algorithm**, repeatedly dividing and taking remainders...思考トークンはmax_tokensにカウントされるため、思考と応答テキストの両方に十分な余裕を残せるよう高めに設定してください。ステアリングページのコスト制御と思考とコンテキストウィンドウを参照してください。
思考をオフにする
思考がデフォルトで有効になっているClaude Sonnet 5では、思考をオフにできます:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=4096,
thinking={"type": "disabled"},
messages=[{"role": "user", "content": "Summarize this article in one sentence."}],
)Claude Opus 5も思考がデフォルトで有効になっており、effortがhigh以下の場合にthinking: {type: "disabled"}を受け付けます。xhighまたはmaxのeffortでは思考をオフにできません。thinking: {type: "disabled"}とこれらのeffortレベルを組み合わせたリクエストは400エラーを返します。この制限はリクエストごとに適用されます。思考が無効な場合、Claude Opus 5はまれにツール呼び出しをプレーンテキストとして出力したり、表示される出力に内部XMLタグを含めたりすることがあります。プロンプトによる緩和策については、思考を無効にして実行するを参照してください。
Claude Sonnet 5.5も思考がデフォルトで有効になっており、thinking: {type: "disabled"}を400エラーで拒否します。事前思考をオフにするには、代わりにthinking: {type: "between_tools"}を送信してください。これはClaude Sonnet 5.5で最も低い思考設定であり、effortがhigh以下の場合に受け付けられます。モデルは引き続きツール呼び出し間の進捗更新を返します。ツールがない場合、Claude Sonnet 5でのdisabledと同様に、応答にはテキストのみが含まれます。プロンプトのガイダンスについては、事前思考なしでの実行を参照してください。
Claude Haiku 5.5も思考がデフォルトで有効になっており、effortがhigh以下の場合にthinking: {type: "disabled"}を受け付けます。xhighまたはmaxのeffortでは、その組み合わせは400エラーを返します。思考を減らすには、まずeffortレベルを下げてください。思考がオフの場合、JSON出力も要求すると、モデルが必要なツール呼び出しをスキップすることがあります。思考がオフの間は、有効なレベルと異なるメッセージごとのoutput_config.effortも400エラーを返します。エフォートを使用して思考を制御するとJSON出力と独自のツールで適応型思考を使用するを参照してください。
Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Opus 5.5、Claude Mythos Previewはthinking: {type: "disabled"}を拒否します。これらのモデルでは思考をオフにできません。
リクエストを送信する前にモデルが"disabled"を受け付けるかどうかを確認するには、Models APIからそのcapabilities.thinking.types.disabled.supported値を読み取ってください。このフィールドについてはModels APIの使用で説明しています。
モデルが拡張思考のみをサポートしている場合(モデルごとの設定表を参照)、代わりにtype: "enabled"とbudget_tokens値で設定してください。その設定については拡張思考ページで説明しています。また、いずれかの思考設定で400エラーが返された場合は、思考のトラブルシューティングで各エラーメッセージとその修正方法を確認できます。
思考出力の読み取り
思考表示の制御
思考設定のdisplayフィールドは、APIレスポンスで思考コンテンツがどのように返されるかを制御します。displayは両方のモードで機能し、type: "adaptive"またはtype: "enabled"と一緒に設定します。次の値を受け付けます:
"summarized":思考ブロックには要約された思考テキスト、つまりClaudeの推論の読みやすい要約が含まれます。これはClaude Opus 4.6、Claude Sonnet 4.6、およびそれ以前のモデルでのデフォルトです。"omitted":思考ブロックはthinkingフィールドが空の状態で返されます。signatureフィールドには、マルチターンの継続性のために暗号化された完全な思考が引き続き含まれます(思考の暗号化を参照)。これはClaude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5.5、Claude Sonnet 5、Claude Opus 4.8、Claude Opus 4.7、Claude Mythos Preview、Claude Haiku 5.5でのデフォルトです。"updates"(ベータ):推論ブロックは"omitted"と同様にthinkingフィールドが空の状態で返され、一部のモデルがツール呼び出しの間に書く短い進捗更新は読み取り可能なテキストとして返されます。ベータヘッダーthinking-display-updates-2026-08-18が必要です。
アプリケーションが思考コンテンツをユーザーに表示しない場合は、display: "omitted"を設定してください。主な利点は、ストリーミング時に最初のテキストトークンまでの時間が短縮されることです。サーバーは思考トークンのストリーミングを完全にスキップし、署名のみを配信するため、最終的なテキスト応答のストリーミングがより早く始まります。
display: "omitted"の場合、レスポンスにはthinkingフィールドが空のthinkingブロックが含まれます:
{
"content": [
{
"type": "thinking",
"thinking": "",
"signature": "EosnCkYICxIMMb3LzNrMu..."
},
{
"type": "text",
"text": "The answer is 12,231."
}
]
}省略された思考を扱う際は、次の点に留意してください:
- 完全な思考トークンに対して引き続き課金されます。省略によって削減されるのはレイテンシであり、コストではありません。
- マルチターンの会話で思考ブロックを返す場合は、変更せずにそのまま返してください。サーバーは
signatureを復号して、プロンプト構築のために元の思考を再構築します(思考ブロックの保持を参照)。往復させた省略ブロックのthinkingフィールドに配置したテキストは無視されます。 displayはthinking.type: "disabled"(表示するものがないため)およびthinking.type: "between_tools"(Claude Sonnet 5.5のみ)では無効です。後者は他のフィールドを受け付けません。between_toolsでは、display: "updates"の場合と同様に、進捗更新は引き続き要約テキスト付きで返されます(進捗更新を参照)。thinking.type: "adaptive"を使用していて、モデルが単純なリクエストに対して思考をスキップした場合、displayに関係なく思考ブロックは生成されません。display: "omitted"でストリーミングする場合、思考テキストはストリーミングされません。各思考ブロックは空のthinking文字列を持つthinking_deltaをストリーミングし、その後にsignature_deltaをストリーミングします。display: "updates"の場合、テキストを含むthinking_deltaイベントをストリーミングするのは進捗更新ブロックのみです。イベントシーケンスについては思考のストリーミングを参照してください。
要約された思考
displayが"summarized"の場合、受け取る思考テキストは生の思考の連鎖ではなく、Claudeの完全な思考プロセスの要約です。「summarized thinking」(要約された思考)は、悪用を防ぎながら、思考による知能面の利点をすべて提供します。生の思考の連鎖を返すdisplay設定はありません。
要約された思考を扱う際は、次の点に留意してください:
- 課金されるのは、要約トークンではなく、元のリクエストによって生成された完全な思考トークンです。課金される出力トークン数は、レスポンスで確認できるトークン数と一致しません。
- Claude Opus 4.6、Claude Sonnet 4.6、およびそれ以前のモデルでは、思考出力の最初の数行がより詳細で、プロンプトエンジニアリングの目的に特に役立つ詳細な推論が提供されます。Claude Mythos Previewは最初のトークンから要約するため、その思考ブロックにはこの詳細な前置きは表示されません。
- 要約は、追加のレイテンシを最小限に抑えながらClaudeの思考プロセスの主要なアイデアを保持するため、要約は届き次第ストリーミングできます。
- 要約は、リクエストで対象とするモデルとは異なるモデルによって処理されます。思考モデルは要約された出力を参照しません。
- Anthropicは思考機能の改善に取り組んでいるため、要約の動作は変更される可能性があります。
モデルの推論を確認するには、応答テキストで推論を求めるプロンプトを使用するのではなく、thinkingブロックを読み取ってください。Claude Fable 5.1、Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5.5、Claude Fable 5では、応答テキストの一部としてモデルの内部推論を引き出そうとするリクエストは、stop_details.category: "reasoning_extraction"で拒否される場合があります。フィールドのリファレンスについては拒否カテゴリを、代わりに何を求めるべきかについては推論を思考ブロック内に保つを参照してください。
思考のストリーミング
思考はストリーミングと連携して機能します。思考ブロックはcontent_block_deltaイベント内のthinking_deltaイベントとしてストリーミングされ、ブロックのcontent_block_stopの直前に単一のsignature_deltaイベントが続きます。テキストブロックはその後、通常どおりストリーミングされます。
次の例では、適応型思考を使用して応答をストリーミングし、思考とテキストのデルタを届き次第出力します:
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-opus-5-5",
max_tokens=16000,
thinking={"type": "adaptive", "display": "summarized"},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
) as stream:
for event in stream:
match event.type:
case "content_block_start":
print(f"\nStarting {event.content_block.type} block...")
case "content_block_delta":
delta = event.delta
match delta.type:
case "thinking_delta":
print(delta.thinking, end="", flush=True)
case "text_delta":
print(delta.text, end="", flush=True)ストリーミング後に署名付きの完全な思考ブロックを再構築するには、デルタを自分で連結するのではなく、SDKのメッセージ蓄積ヘルパーであるstream.get_final_message()を使用してください。
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-opus-5-5", "stop_reason": null, "stop_sequence": null}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "thinking", "thinking": "", "signature": ""}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "I need to find the GCD of 1071 and 462 using the Euclidean algorithm.\n\n1071 = 2 × 462 + 147"}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n462 = 3 × 147 + 21\n147 = 7 × 21 + 0\n\nSo GCD(1071, 462) = 21"}}
// Additional thinking deltas...
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "signature_delta", "signature": "EqQBCgIYAhIM1gbcDa9GJwZA2b..."}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "text", "text": ""}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "text_delta", "text": "The greatest common divisor of 1071 and 462 is **21**."}}
// Additional text deltas...
event: content_block_stop
data: {"type": "content_block_stop", "index": 1}
event: message_delta
data: {"type": "message_delta", "delta": {"stop_reason": "end_turn", "stop_sequence": null}}
event: message_stop
data: {"type": "message_stop"}display: "omitted"が設定されている場合、思考ブロックが開き、空のthinking文字列を持つthinking_deltaが届き、単一のsignature_deltaが続いて、ブロックが閉じます。テキストのストリーミングはその直後に始まります:
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"EosnCkYICxIMMb3LzNrMu..."}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}display: "updates"(ベータ)の場合、推論ブロックは"omitted"の場合と同様にストリーミングされます。各進捗更新ブロックは、それが導入するtool_useブロックの前に、そのテキストをthinking_deltaイベントとしてストリーミングします。進捗更新ブロックが開く前に数秒間の一時停止があるのは正常です:
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":"","signature":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"Confirmed the retry path never refreshes the expired token. Editing auth.py to add the refresh call."}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"signature_delta","signature":"Es8CCkYICxIM..."}}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: content_block_start
data: {"type":"content_block_start","index":2,"content_block":{"type":"tool_use","id":"toolu_01D7FLrfh4GYq7yT1ULFeyMV","name":"edit_file","input":{}}}"updates"では、ブロックのthinking_deltaイベントのいずれかが空でないテキストを含んだ時点で、そのブロックを進捗更新として扱ってください。
ストリーミングの一般的な仕組みについては、メッセージのストリーミングを参照してください。
思考とeffort
thinking パラメータは、Claudeが回答する前に思考ブロックで思考するかどうかを制御します。effort パラメータは、Claudeが応答全体にどれだけの労力を費やすかを制御し、アダプティブモードではどのくらいの頻度で、どのくらい深く思考するかも含まれます。effort の値として adaptive を渡さないでください。adaptive は思考モードであり、effortレベルではありません。
各effortレベルが思考の動作に何をもたらすかについては、思考のステアリングページのレベルごとの思考動作の表を参照してください。Effortページでは、各モデルがサポートするレベルを含め、パラメータ自体について説明しています。effortをサポートする唯一の拡張思考専用モデルであるClaude Opus 4.5では、effortはbudget_tokensと組み合わせて機能します。予算のルールと調整を参照してください。
2つの制御がこのように分離されているため、目的に合ったものを選択してください:
- 思考が有効なワークロードでコストやレイテンシを下げたい場合: まず
effortを下げてください。思考を含む応答全体が縮小されます。 - Claudeの思考の頻度が低すぎる、または浅すぎる場合:
effortを上げるか、ステアリングページのClaudeが思考する頻度のステアリングを参照してください。 - 思考を完全にオフにする必要がある場合: それを許可するモデルでは
thinking: {type: "disabled"}を使用してください(モデルごとの設定表を参照)。Claude Sonnet 5.5は"disabled"を拒否します。その最も低い設定はthinking: {type: "between_tools"}で、事前思考をオフにします。 - 支出に厳格な上限が必要な場合:
max_tokensを使用してください。effortはソフトなガイダンスです。max_tokensは厳格な制限です。
ツール使用と思考
思考はツール使用と連携して機能し、Claudeがツールの選択について推論し、ツールの結果を処理できるようにします。2つの制約が適用されます:
- ツール選択の制限(手動モード): 手動の拡張思考(
thinking: {type: "enabled"})を使用したツール使用は、tool_choice: {"type": "auto"}(デフォルト)またはtool_choice: {"type": "none"}のみをサポートします。tool_choice: {"type": "any"}またはtool_choice: {"type": "tool", "name": "..."}を使用するとエラーになります。これらのオプションはツール使用を強制するため、手動の拡張思考と互換性がないからです。適応型思考は、思考がデフォルトで有効なモデルを含め、強制ツール使用をサポートしますが、Claude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5.1、Claude Mythos 5.1は例外です(レスポンスのプリフィルと強制ツール使用を参照)。強制ツール使用が受け付けられる場合、レスポンスはツール呼び出しから始まり、thinkingブロックは含まれません。 - 思考ブロックの保持: ツールの結果を返す際は、アシスタントメッセージの思考ブロックを完全かつ変更されていない状態でAPIに返す必要があります。思考ブロックの保持を参照してください。
ツール使用ループは1つのアシスタントターンです。 モデルの観点からは、アシスタントターンはClaudeが完全な応答を終えるまで完了しません。この応答には複数のツール呼び出しと結果が含まれる場合があります。この一連のシーケンス全体が単一のアシスタントターンです:
User: "What's the weather in Paris?"
Assistant: [thinking] + [tool_use: get_weather]
User: [tool_result: "20°C, sunny"]
Assistant: [text: "The weather in Paris is 20°C and sunny"]ターン全体は単一の思考モードで実行されます。ツール使用ループ中を含め、ターンの途中で思考を切り替えることはできません。拡張(手動)モードでは、APIはさらに、思考が有効なリクエストの最後のアシスタントターンが思考ブロックで始まることを強制します。適応型モードではこれが緩和され、どのアシスタントターンも思考ブロックで始まる必要はありません。
ターン途中の競合は穏やかに処理されます。 ターンの途中で思考を切り替えた場合(たとえば、ツール呼び出しを送信してからその結果を返すまでの間)、APIはエラーを返しません。代わりに、そのリクエストの思考を暗黙的に無効にします。モデルの品質を維持するため、APIは無効なターン構造を生じさせる思考ブロックを削除したり、会話履歴が思考の有効化と互換性がない場合に思考を無効にしたりすることがあります。思考が有効だったかどうかを確認するには、レスポンスにthinkingブロックが存在するかどうかを確認してください。
ターン内ではなく、ターン間で切り替えてください。 各ターンの開始時に思考戦略を計画してください。アシスタントターンを完了してから、次のターンの思考設定を変更します:
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
Assistant: [text: "It's sunny"]
User: "What about tomorrow?"
Assistant: [thinking] + [text: "..."] (thinking enabled - new turn)思考モードを切り替えると、プロンプトキャッシングも無効になります。思考とプロンプトキャッシングを参照してください。
思考ブロックの保持
Claudeがツールを呼び出すと、外部情報を待つためにレスポンスの構築を一時停止します。ツールの結果を返すと、Claudeは同じレスポンスの構築を再開するため、それまでの推論が引き続き存在している必要があります。すべてのthinkingブロックを、それに付随していたtool_useブロックとともに、完全かつ変更されていない状態でAPIに返してください。これが重要な理由は2つあります。
- 推論の継続性: 思考ブロックには、ツールリクエストに至った段階的な推論が記録されています。これらを含めることで、Claudeは中断したところから推論を続けられます。
- コンテキストの維持: ツールの結果はAPI構造上ではユーザーメッセージとして表示されますが、1つの連続した推論フローの一部です。思考ブロックを保持することで、API呼び出しをまたいでそのフローが維持されます。
要約すると、次のとおりです。
- 必須: ツール使用のターン内では、思考ブロックを返してください。
- 推奨: ターン間では、すべてを返してください。
- 許容: ツール使用以外では、以前のターンの思考を省略できます。
古い思考を自分で削除する必要はありません。マルチターン会話ではすべての思考ブロックを返してください。APIが自動的にフィルタリングし、モデルの推論を保持するために必要なブロックを残し、実際にClaudeに提示されたブロックに対してのみ入力トークンを課金します。以前のターンのどのブロックが保持されるかはモデルによって異なります。モデル別の思考ブロックの保持を参照してください。デフォルトを上書きするには、clear_thinking_20251015コンテキスト編集戦略を使用してください。
最新のアシスタントメッセージ内では、連続するthinkingブロックの並びが、元のリクエストでモデルが生成したものと一致している必要があります。並べ替え、編集、一部の削除はできません。これにはredacted_thinkingブロックも含まれます。
すべてのSDKのコードを含む2ターンの完全なウォークスルーについては、ツールおよびマルチターンワークフローでの思考を参照してください。ツールを定義し、思考とツール使用を含むレスポンスを受け取り、ツールの結果とともにアシスタントターンを返す流れを示しています。
インターリーブ思考
「interleaved thinking」(インターリーブ思考)により、Claudeはツール呼び出しの間に思考し、各ツールの結果について推論してから行動できます。インターリーブ思考により、Claudeは次のことができます:
- 次に何をするかを決定する前に、ツール呼び出しの結果について推論する
- 間に推論ステップを挟みながら複数のツール呼び出しを連鎖させる
- 中間結果に基づいて、よりきめ細かな判断を行う
適応型思考では、適応型思考をサポートするすべてのモデルでインターリーブ思考が自動的に有効になります。ベータヘッダーは不要です。Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5.5、Claude Opus 5、Claude Sonnet 5.5、Claude Opus 4.8、Claude Opus 4.7では、ツール呼び出し間の推論は常に思考ブロックに表示されます。Claude Haiku 4.5はインターリーブ思考をサポートしていません。手動の拡張思考を使用するモデルでは、インターリーブにはベータヘッダーが必要であり、思考予算のカウント方法が変わります。モデルごとのルールとプラットフォーム固有のヘッダーの動作については、手動モードでのインターリーブ思考で説明しています。
インターリーブ思考では、思考の割り当ては単一の応答ではなく、アシスタントターン全体にわたることがあります。インターリーブ思考は、Messages APIを通じて使用されるツールでのみサポートされています。
2つのツールを使用するワークフローでインターリーブ思考が何を変えるかを示す実例の比較については、インターリーブ思考によってフローがどのように変わるかを参照してください。
ツール呼び出し間の進捗更新
Claude Fable 5.1、Claude Mythos 5.1、Claude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5では、モデルはツール呼び出しの間に「progress update」(進捗更新)を書くことができます。進捗更新とは、モデルが今見つけたことと次に何をしようとしているかについてのメモであり、推論としてではなく、エージェントを見ている人に向けて書かれたものです。各進捗更新は、独自のsignatureを持つ独自のthinkingブロックとして返され、同じ位置にある推論ブロックとは別になります。それが導入するtool_useまたはserver_tool_useブロックの直前に配置されます。各ツール呼び出しの前に置かれる進捗更新は最大1つであり、モデルはそのいずれもスキップできます。進捗更新はインターリーブ思考ではありません。ツール呼び出しの間に推論ブロックが現れるかどうかにかかわらず表示され、1つの応答に両方が含まれることもあります。
進捗更新ブロックに何が含まれるかはdisplayによって異なります:
display | 推論ブロック | 進捗更新ブロック |
|---|---|---|
"omitted"(これらのモデルでのデフォルト) | 空のthinkingフィールド | 空のthinkingフィールド |
"updates"(ベータ) | 空のthinkingフィールド | 要約テキスト |
"summarized" | 要約テキスト | 要約テキスト(推論ブロックと区別できない) |
Claude Sonnet 5.5では、最も低い思考設定はthinking: {type: "between_tools"}です。これは事前思考をオフにし、各進捗更新はdisplay: "updates"の場合と同様に要約テキスト付きで返されます。between_toolsはeffortがhigh以下の場合にのみ受け付けられます。xhighまたはmaxでは、これを含むリクエストは400エラーを返します。between_toolsは他のフィールドを受け付けません。display、budget_tokens、またはblock_bindingを一緒に送信すると400エラーが返されます。この設定にはベータヘッダーは不要で、Claude Sonnet 5.5を提供するすべてのプラットフォームで機能します。ブロックは変更せずにそのまま返してください。返した進捗更新ブロックは、要約ではなく、モデルが書いた完全なメモをモデルに提供します。
推論を非表示にしたまま、各ステップでユーザーにステータス行を表示するエージェントインターフェースには、display: "updates"を使用してください。この設定では、空でないテキストを持つthinkingブロックはすべて進捗更新であるため、それらのみをレンダリングしてください。これはベータ版であり、ベータヘッダーthinking-display-updates-2026-08-18が必要です(Amazon Bedrock、Google Cloud、またはMicrosoft Foundryで送信する方法については、他のプラットフォームでのベータ機能を参照してください)。ヘッダーがない場合、この値は不明なdisplay値と同じ400 invalid_request_errorで拒否されます。
{
"model": "claude-fable-5-1",
"max_tokens": 16000,
"thinking": { "type": "adaptive", "display": "updates" },
"tools": [
{
"name": "edit_file",
"description": "Replace the contents of a file in the repository.",
"input_schema": {
"type": "object",
"properties": {
"path": { "type": "string" },
"content": { "type": "string" }
},
"required": ["path", "content"]
}
}
],
"messages": [
{
"role": "user",
"content": "The login test fails after an hour of uptime. Find out why and fix it."
}
]
}"updates"では、tool_resultに続く応答の冒頭は次のようになります。最初のブロックは推論であり、"omitted"の場合と同様に空のままです。2番目のブロックはテキストを含むため、進捗更新です。"summarized"では両方のブロックがテキストを含み、"omitted"では両方とも空です。
{
"content": [
{
"type": "thinking",
"thinking": "",
"signature": "EqMBCkYICxIM..."
},
{
"type": "thinking",
"thinking": "Confirmed the retry path never refreshes the expired token. Editing auth.py to add the refresh call.",
"signature": "Es8CCkYICxIM..."
},
{
"type": "tool_use",
"id": "toolu_01D7FLrfh4GYq7yT1ULFeyMV",
"name": "edit_file",
"input": { "path": "auth.py", "content": "..." }
}
]
}進捗更新を扱う際は、次の点に留意してください:
- 進捗更新ブロックは、他の
thinkingブロックと同様に、アシスタントターンの残りの部分とともに変更せずにそのまま返してください。 - 受け取るテキストは進捗更新の要約であり、通常は1〜2文です。その長さに依存しないでください。進捗更新は、要約の長さではなく完全な長さで
usage.output_tokensにカウントされます。 - 進捗更新ブロックは、どの
display値でもthinkingフィールドが空の状態で返されることがあります。空のブロックには何もレンダリングしないでください。"updates"では、空の推論ブロックと同じように見え、個別の処理は必要ありません。 - ツール呼び出しまたはツール結果の直後に応答が
max_tokens、model_context_window_exceeded、またはstop_sequenceで停止した場合、その最後のブロックは、モデルが完了していなかった作業の代わりとなる進捗更新ブロックである可能性があります。"updates"と"summarized"では、そのテキストは正確にThis part of the response was interrupted before it finished.であり、他の更新と同様に表示できます。"omitted"では空です。続行するには、アシスタントターンを変更せずにそのまま返し、新しいuserメッセージを追加してください(そのターン内の各tool_useブロックに対するtool_resultを含めます)。 - ストリーミング時は、進捗更新ブロックが開く前に数秒間の一時停止があることを想定してください。思考のストリーミングの
"updates"トレースを参照してください。 - これらのモデルは、より高いeffortや長いツールチェーンでは、進捗更新を書く頻度が少なくなります。インターフェースが進捗更新に依存している場合は、ユーザー向けの進捗更新を求めるを参照するか、Claude Opus 5.5の場合はユーザー向けの進捗更新を参照してください。Claude Sonnet 5.5については、ユーザー向けの進捗更新を参照してください。
モデル別の思考ブロックの保持
以前のアシスタントターンの思考ブロックがデフォルトでコンテキストに残るかどうかは、モデルによって異なります。
- 以前のすべてのターンを保持: Claude Opus 4.5以降のOpusモデル、Claude Sonnet 4.6以降のSonnetモデル、Claude Haiku 5.5、Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、およびClaude Mythos Preview。
- 最後のターンのみを保持: それ以前のOpusおよびSonnetモデル、ならびにClaude Haiku 4.5までのすべてのHaikuモデル。古い思考ブロックを送り返すと、APIが自動的にそれらを除去します。自分で削除する必要はありません。
保持には2つの利点があります。
- キャッシュの最適化: 保持された思考ブロックは、ツール結果とともに送り返され、アシスタントターン全体で段階的にキャッシュされるため、ツール使用中のキャッシュヒットを可能にし、マルチステップのワークフローでトークンを節約できます。
- 知能への影響なし: 思考ブロックを保持しても、モデルのパフォーマンスに悪影響はありません。
トレードオフはコンテキストの使用量です。保持された思考ブロックは他の会話履歴と同様に入力としてカウントされるため、すべてを保持するモデルでは、長い会話ほど多くのコンテキスト領域を消費します(思考とコンテキストウィンドウを参照)。この動作はどちらの方式でも自動的に行われます。コードの変更やベータヘッダーは不要で、思考ブロックの保持で説明されているとおり、完全で変更されていない思考ブロックを引き続き送り返してください。どちらの方向にもデフォルトを上書きするには、思考ブロックのクリアを使用します。
会話の途中でのモデルの切り替え。 モデルを切り替える場合(たとえば分類器による拒否のフォールバックの後など)も、思考ブロックを変更せずに渡し返し続けてください。思考ブロックは、それを生成したモデルと特定の他のモデルのみが読み取ることができ、APIは切り替え先のモデルが読み取れないブロックを無視または破棄します。Claude Fable 5.1とClaude Mythos 5.1では方向が重要です。これらは以前のモデルの思考ブロックを読み取り、互いの思考ブロックを読み取れるのはこの2つだけです。そのため、これらのモデルへ切り替えると会話の推論が保持され、これらのモデルから他のモデルへ切り替えると推論が破棄されます(破棄されたブロックの課金と報告方法を参照)。Claude Opus 5.5は、Claude Opus 5の思考ブロック、それ以前のOpus、Sonnet、Haikuモデルの思考ブロック、そしてClaude APIとGoogle CloudではClaude Haiku 5.5の思考ブロックを読み取りますが、Claude FableおよびClaude Mythosモデルの思考ブロックは読み取りません。Claude APIでは、Claude Fable 5.1とClaude Mythos 5.1がClaude Opus 5.5のブロックを読み取ります。Claude APIでClaude Opus 5.5からClaude Fable 5.1へ切り替えると以前のターンの推論が保持され、Claude Fable 5.1からClaude Opus 5.5へ切り替えると推論が破棄されます。Claude Sonnet 5.5は、Claude Sonnet 5、Claude Opus 4.8、Claude Haiku 4.5、およびそれ以前のモデルの思考ブロック、そしてClaude APIとGoogle CloudではClaude Haiku 5.5の思考ブロックを読み取りますが、Claude Opus 5、Claude Opus 5.5、またはいずれのClaude FableやClaude Mythosモデルの思考ブロックも読み取りません。Claude APIとGoogle Cloudでは、Claude Sonnet 5.5のブロックを読み取るのはClaude Opus 5.5のみです。Claude APIとGoogle CloudでClaude Sonnet 5.5からClaude Opus 5.5へ切り替えると以前のターンの推論が保持され、Claude Sonnet 5.5からのそれ以外の切り替えでは推論が破棄されます。Claude Haiku 5.5は、Claude Sonnet 5、Claude Opus 4.8、Claude Haiku 4.5、およびそれ以前のモデルの思考ブロックを読み取りますが、Claude Opus 5、Claude Opus 5.5、Claude Sonnet 5.5、またはいずれのClaude FableやClaude Mythosモデルの思考ブロックも読み取りません。Claude APIとGoogle Cloudでは、Claude Haiku 5.5のブロックを読み取るのはClaude Opus 5.5とClaude Sonnet 5.5のみです。以前のthinkingおよびredacted_thinkingブロックを自分で除去するのは、それらを破棄するのではなく無視するモデルで入力トークンを節約する場合に限ってください。また、本文を変更しないことが必要なフォールバッククレジットを引き換える場合は、決して除去しないでください。
保持された思考
保持された思考は、以前のターンから送り返した思考ブロックをモデルが使用できるかどうかを決定します。Claude Fable 5.1以降、APIはリクエスト内のすべてのthinkingまたはredacted_thinkingブロックのsignatureについて、次の2点を確認します。
- それを生成したモデル。 各モデルは、自身の思考ブロックと、固定された一連の他のモデルの思考ブロックを読み取ります。Claude Fable 5.1は、Claude Opus 5のブロック、およびClaude APIではClaude Opus 5.5のブロックを読み取ります。Claude Opus 5もClaude Opus 5.5も、Claude Fable 5.1のブロックは読み取りません。APIは、現在のモデルが読み取れないブロックを、エラーを出さず課金もせずに破棄します。会話の途中でのモデルの切り替えを参照してください。
- それより前に送信されたすべての内容。 ブロックが有効なのは、トップレベルの
systemプロンプト、tools、およびそれより前のメッセージが変更されていない間のみです。いずれかが変更されると、そのブロックとそれ以降のすべての思考ブロックが無効になり、APIは選択に応じて、400エラーでリクエストを拒否するか、無効なブロックを破棄します。プレフィックスを変更しないようにするを参照してください。
Claude Sonnet 5.5およびClaude Haiku 5.5の思考ブロックは、それを生成したアカウントにも紐付けられています。APIがこれをどこで適用するかについては、思考ブロックはそれを生成したアカウントに留まるを参照してください。
モデルのチェックはすべてのアカウントに適用されます。APIは、2026年8月31日00:00 UTC以降に作成されたアカウントに対して、デフォルトでプレフィックスのチェックを適用します。それより古いアカウントでは、thinking.block_binding.prefix_mismatch_behaviorを設定したリクエストに対してのみチェックを適用します。アカウントの作成時期にかかわらず、統合を追記のみ(append-only)にしてください。そうすれば、デフォルトで適用される新しいアカウントを含め、すべてのアカウントで同じコードが動作します。
思考を有効に保つには、すべてのアシスタントターンを受け取ったとおりに正確に送り返し、新しいメッセージはmessagesの末尾にのみ追加してください。コードでmessages配列を自分で構築している場合、保持された思考のページでは次の内容を説明しています。
- 何が編集とみなされるか、およびコードが編集を行っているかどうかを確認する方法。
- 一般的な各編集を置き換えるAPI機能:新しい指示やターンごとのリマインダーには会話途中のシステムメッセージ、ツールの変更には
tool_additionおよびtool_removalブロック、effortの変更にはメッセージごとのoutput_config、トリミングにはサーバー側のコンパクションとコンテキスト編集。 - クライアント側のコンパクション:どのパターンが思考を有効に保ち、どのパターンが保たないか。
thinking-binding-controls-2026-08-01ベータヘッダー。これにより、思考の設定にblock_binding.prefix_mismatch_behaviorフィールド("error"または"drop_block")が追加され、すべてのレスポンスにinput_transformations配列が追加されます。この配列には、APIが破棄した思考ブロック、またはプレフィックスのチェックに失敗したものの通過させた思考ブロックがそれぞれ列挙されます。
思考とプロンプトキャッシング
「prompt caching」(プロンプトキャッシング)は、いくつかの特定の方法で思考と相互作用します。以下のルールは、どちらの思考モードにも適用されます。
設定の変更はキャッシュを無効にします。 思考の設定と解決されたeffortレベルはプロンプト自体にレンダリングされるため、いずれかを変更すると新しいキャッシュプレフィックスが始まります。adaptive、enabled、disabledの切り替え、budget_tokensの変更、およびeffort値の変更はすべてキャッシュブレークポイントを無効にします。メッセージレベルのブレークポイントは常にミスし、ツールおよびシステムプロンプトのブレークポイントも、モデルが設定をレンダリングする位置によってはミスする可能性があります。思考またはトップレベルのeffortの変更は、キャッシュを最初からやり直すものとして扱ってください。メッセージごとのeffortをサポートするモデルでは、messages内のrole: "system"メッセージで伝えられたeffortの変更は、キャッシュされたプレフィックスをそのまま維持します。同じ設定を維持する連続したリクエストはキャッシュを保持し、パラメータを明示的にデフォルト値に設定することは、それを省略することと同等です。いずれかの保持された思考の条件によってAPIが破棄した思考ブロックは、そのブロックの位置以降のキャッシュされたプレフィックスを変更します。変更せずに送り返されたブロックはキャッシュをそのまま維持します。使用量の出力を含む実例は、思考のステアリングのページにあります。
思考ブロックはツール結果とともにキャッシュされます。 ツール使用のループ中、キャッシュはツール結果を含むフォローアップリクエストを行ったときに発生します。その時点で、思考ブロックを含む以前の会話履歴がキャッシュされる可能性があり、キャッシュされた思考ブロックはキャッシュから読み取られる際に使用量メトリクスで入力トークンとしてカウントされます。これは明示的なcache_controlマーカーがなくても自動的に行われ、通常の思考とインターリーブ思考で同じように動作します。トレードオフとして、レスポンスで二度と目にすることのない思考ブロックも、キャッシュから読み取られる際には入力トークンの使用量に加算されます。
以前のブロックがそもそもコンテキストに含まれるかどうかはモデルごとに異なります。 これは保持のデフォルトによって決まります。すべてを保持するモデルでは、以前のターンの思考ブロックはキャッシュされたままコンテキストに残ります。最後のターンのみを保持するモデルでは、ツール結果ではないユーザーメッセージを送信すると、以前のすべての思考ブロックがコンテキストから除去されます。これらのモデルでは、次のような会話は:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]思考ブロックが最初から存在しなかったかのように処理されます:
User: ["What's the weather in Paris?"],
Assistant: [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [text block 2],
User: [Text response, cache=True]すべてを保持するモデルでは、同じリクエストでthinking_block_1とthinking_block_2がコンテキストとキャッシュに保持されます。
機能低下により、キャッシュ可能な履歴から思考が除去されます。 ターンの途中で思考が無効になり、現在のツール使用ターンで思考コンテンツを渡した場合、思考コンテンツは除去され、そのリクエストでは思考が無効のままになります(グレースフルデグラデーションを参照)。インターリーブ思考では、複数のツール呼び出しの間に思考ブロックが発生する可能性があるため、キャッシュ無効化の影響が増幅されます。
思考とコンテキストウィンドウ
現在のターンでClaudeが生成するすべての思考を含むmax_tokensは、厳格な上限として適用されます。Claude 4.5モデル以降では、入力トークンとmax_tokensの合計が「context window」(コンテキストウィンドウ)のサイズを超えても、APIはリクエストを受け付けます。その後、生成がコンテキストウィンドウの上限に達した場合は、エラーを返す代わりにstop_reason: "model_context_window_exceeded"で停止します。それ以前のモデルでは、APIは代わりに検証エラーを返します。停止理由の処理を参照してください。
思考がウィンドウに対してどのようにカウントされるかは、それがいつ生成されたかによって異なります。
- 現在のターンの思考は、常に
max_tokensにカウントされ、出力トークンとして課金され、それを生成したターンのコンテキストウィンドウ領域を占有します。 - 以前のターンの思考は、保持のデフォルトによって異なります。以前のすべてのターンを保持するモデルでは、以前の思考ブロックはコンテキストに残り、ウィンドウにカウントされ、会話履歴の他の部分と同様に入力トークンとして課金されます。最後のターンのみを保持するモデルでは、古い思考ブロックを送り返すとAPIが自動的に除去するため、ウィンドウ領域や入力トークンを消費しません。
実際には:
- すべてを保持するモデルでは、思考を通常の会話履歴であるかのように(実際にそうであるため)コンテキストウィンドウの予算を立ててください。長いエージェントセッションでは、思考がコンテキストに蓄積されます。領域を回収する必要がある場合は、思考ブロックのクリアを使用してください。
- 最後のターンのみを保持するモデルでは、思考はターンごとのコストにすぎません。各ターンの思考はそのターンの
max_tokensにカウントされ、その後ウィンドウから外れます。
以下の図は、最後のターンのみを保持する(除去する)方式を示しています。1つ目はマルチターンの会話を示しています。各ターンの「thinking block」(思考ブロック)は出力で生成されますが、後のターンの入力には引き継がれません。
2つ目は、同じ方式で「tool use」(ツール使用)を行う場合を示しています。思考はアシスタントターンの間、そのツール結果とともにコンテキストに留まり、次のユーザーターンで外れます。
特に思考を含むマルチターンの会話では、トークンカウントAPIを使用して、特定のユースケースに対する正確なカウントを取得してください。
思考の暗号化
完全な思考コンテンツは暗号化され、各思考ブロックのsignatureフィールドに格納されて返されます。思考ブロックが返送されると、APIはこの署名を使って、そのブロックがClaudeによって生成されたものであることを検証します。
署名を扱う際は、次の点に注意してください:
- 思考ブロックの返送が必須となるのは、思考とともにツールを使用する場合のみです。それ以外の場合は、以前のターンの思考ブロックを省略できます。返送した場合に、APIがそれを保持するか削除するかはモデルによって異なります(モデル別の思考ブロックの保持を参照)。この動作はコンテキスト編集で設定できます。
- 思考ブロックを返送する際は、一貫性を保ち、問題の発生を防ぐために、受け取った内容をすべてそのまま返してください。
- レスポンスをストリーミングする場合、署名は
content_block_stopイベントの直前に、content_block_deltaイベント内のsignature_deltaとして送られてきます。 - Claude 4以降のモデルでは、
signatureの値が以前のモデルよりも大幅に長くなっています。 signatureフィールドは不透明な値です。内容を解釈したり解析したりしないでください。signatureの値はプラットフォーム間(Claude API、Amazon Bedrock、Google Cloud)で互換性があります。あるプラットフォームで生成された値は別のプラットフォームでも機能しますが、Claude Sonnet 5.5とClaude Haiku 5.5の思考ブロックは、それを生成したアカウントまたはそれにリンクされたアカウントでのみ機能します。思考ブロックはそれを生成したアカウントに留まるを参照してください。
秘匿化された思考ブロック
Claudeの推論の一部が安全上の理由で秘匿化された場合、APIは通常のthinkingブロックに加えてredacted_thinkingブロックを返すことがあります。redacted_thinkingブロックには読み取り可能なテキストは含まれず、暗号化された思考コンテンツがdataフィールドに格納されています:
{
"type": "redacted_thinking",
"data": "..."
}dataフィールドは不透明な値で、暗号化されています。ツールを使ったマルチターン会話を続ける際は、通常の思考ブロックのsignatureフィールドと同じく、redacted_thinkingブロックも変更せずにAPIへ返してください。
制限と機能の互換性
サンプリングパラメータ
Claude Fable 5.1、Claude Mythos 5.1、Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5.5、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5.5、Claude Sonnet 5、およびClaude Haiku 5.5では、デフォルト以外のtemperature、top_p、またはtop_kの値は、思考を使用しているかどうかにかかわらず、すべてのリクエストで400エラーを返します。これらのモデルではtop_pのデフォルトは0.99であるため、top_pが1の場合は400エラーが返されます。また、temperatureとtop_pの両方を含むリクエストも、それらがデフォルト値であっても400エラーが返されます。サンプリングパラメータを削除するを参照してください。それより古いモデルでは、この制限は思考がオンの間のみ適用されます。temperatureとtop_kは思考と互換性がなく、top_pは0.95から1の間の値で許可されます。
レスポンスのプリフィルと強制ツール使用
Claude 4.6以降のモデルおよびClaude Mythos Previewは、思考がオンかどうかにかかわらず、プリフィルされた最後のアシスタントターンを400エラーで拒否します(プリフィルはサポートされていませんを参照)。それ以前のモデルでは、思考がオンの間はアシスタントのレスポンスをプリフィルできません。強制ツール使用(tool_choice: {"type": "any"}または{"type": "tool", ...})は手動の拡張思考とは互換性がありませんが、適応型思考では機能します。例外はClaude Opus 5.5、Claude Sonnet 5.5、Claude Fable 5.1、およびClaude Mythos 5.1で、これらはすべてのリクエストで強制ツール使用を400エラーで拒否します。これらのモデルでは、代わりに厳密なツール使用または構造化出力とともにtool_choice: {"type": "auto"}を使用してください。強制ツール使用が受け付けられる場合、レスポンスはツール呼び出しから始まり、thinkingブロックは含まれません。ツールを呼び出す前にモデルに思考させるには、tool_choice: {"type": "auto"}を使用し、いつツールを使用するかをプロンプトで指示してください。ツール使用と思考を参照してください。
出力制限
各モデルで指定できるmax_tokensの上限は、以下の表のとおりです。Message Batches APIでは、output-300k-2026-03-24 ベータヘッダーを使用すると、バッチの上限が記載されているモデルについて上限が引き上げられます。
| Model | Max output tokens | Batches beta ceiling |
|---|---|---|
| Claude Fable 5.1 | 128K | — |
| Claude Mythos 5.1 | 128K | — |
| Claude Fable 5 | 128K | — |
| Claude Mythos 5 | 128K | — |
| Claude Mythos Preview | 128K | Not available |
| Claude Opus 5.5 | 128K | 300K |
| Claude Opus 5 | 128K | 300K |
| Claude Opus 4.8 | 128K | 300K |
| Claude Opus 4.7 | 128K | 300K |
| Claude Opus 4.6 | 128K | 300K |
| Claude Opus 4.5 | 64K | Not available |
| Claude Sonnet 5.5 | 128K | 300K |
| Claude Sonnet 5 | 128K | 300K |
| Claude Sonnet 4.6 | 128K | 300K |
| Claude Sonnet 4.5 | 64K | Not available |
| Claude Haiku 5.5 | 128K | 300K |
| Claude Haiku 4.5 | 64K | Not available |
レガシーモデルの制限については、モデルの概要を参照してください。
長いリクエスト
SDKは、長時間実行されるリクエストでのHTTPタイムアウトを避けるため、max_tokensが21,333を超える場合に「streaming」(ストリーミング)を必須としています。これはクライアント側の検証であり、APIの制限ではありません。イベントを段階的に処理する必要がない場合は、.stream()を.get_final_message()とともに使用すると、個々のイベントから自分で組み立てることなく、完全なMessageオブジェクトを取得できます。メッセージのストリーミングを参照してください。思考ブロックの生成には処理時間がかかるため、思考が有効な場合はレスポンス時間が長くなることを想定してください。リクエストあたりの思考がおよそ32kトークンを超えるワークロードでは、ネットワークの問題を避けるためにバッチ処理を使用してください。そのようなリクエストは、システムのタイムアウトやオープン接続の制限に達するほど長時間実行される可能性があります。
次のステップ
effortレベル、システムプロンプトでの指示、メッセージごとの制御を使って、Claudeが思考する頻度と深さを調整する方法を説明します。思考のコストと料金についても解説します。
思考ブロックを正しく保持する、2ターンのツール使用のやり取り全体を順を追って説明します。インターリーブ思考によって流れがどう変わるかも確認できます。
Messages APIとの統合で会話履歴を編集しているかどうかを確認し、各編集を、以前の思考ブロックを有効なまま保てるAPI機能に置き換える方法を説明します。
設定に起因する400エラー、空または欠落した思考ブロック、max_tokensによる停止、キャッシュミスなど、思考に関するよくある問題の原因を特定して解決します。
effortパラメータを使って、Claudeが応答時に使用するトークン数を制御し、応答の網羅性とトークン効率のバランスを調整します。
Was this page helpful?