「zero data retention」(ゼロデータ保持)、すなわちZDRがこの機能にどのように適用されるかについては、APIとデータ保持を参照してください。
一度のパスで回答するモデルは、最初の試行ですべてを正しく行う必要があります。下書きも、検証も、途中での方針転換もありません。証明、厄介なバグ、または長いエージェントタスクでは、最初のアプローチが最善であることはめったにありません。
思考(thinking)はその制約を取り除きます。思考がアクティブなとき、Claudeは回答する前に自分自身の言葉で問題に取り組みます。求められていることを言い換え、アプローチを試し、中間結果を検証し、成り立たない道筋を放棄します。その推論は応答の前にthinkingコンテンツブロックとして届き、Claudeはそれを活用して最終的な回答を生成します。これが、数学、コーディング、分析、長時間実行されるエージェント作業などの複雑なタスクで思考がパフォーマンスを向上させる理由です。これらのタスクでは、回答の品質が、そうでなければ応答自体に圧縮されるかスキップされてしまう中間作業に依存しています。
思考にはコストがかかります。Claudeが推論に費やすトークンは、思考テキストが返されない場合でも出力トークンとして課金され、応答テキストとともにmax_tokensにカウントされます。このページでは、APIサーフェス全体での思考の動作について説明します。思考を有効にする方法、その出力を読み取る方法、そしてツール、ストリーミング、キャッシング、コンテキストウィンドウとの相互作用を管理する方法です。
特定のリクエストで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..."
}
]
}このテキストが常に表示されるわけではなく、表示されるものは生の思考の連鎖(chain of thought)ではありません。思考ブロック内のテキストはClaudeの推論の要約です。思考設定のdisplayフィールドは、その要約が返されるかどうかを制御します。"summarized"は要約を返し、最新モデルのデフォルトである"omitted"は空のthinkingフィールドを持つ思考ブロックを返します。いずれの場合も、ブロックは同じように課金され、マルチターン会話では同じように渡されます。モデルごとのデフォルトと詳細については、思考表示の制御を参照してください。
Claudeがツールを使用する場合、思考はツール呼び出しの間にも現れることがあります。ツール使用での思考を参照してください。完全な応答形式については、Messages APIリファレンスを参照してください。
現行モデルでは、思考はデフォルトで有効になっているか、パラメータ1つで有効にできます。各モデルが受け入れる設定とそのデフォルトは、トラブルシューティングページのモデルごとの設定テーブルに記載されています。
Claude Opus 5、Claude Sonnet 5、Claude Fable 5、Claude Mythos 5、Claude Mythos Previewでは、思考はすでに有効になっています。設定は不要です。これらのモデルでほとんどの開発者が最初に必要とするのは思考テキストを表示することです。これらのモデルでは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"}を設定するまで思考は無効です。以下の例ではそれを行い、思考テキストが表示されるようにdisplay: "summarized"を設定し、余裕のあるmax_tokensを使用しています:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
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:
if block.type == "thinking":
print(f"\nThinking: {block.thinking}")
elif block.type == "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以降のモデルに適用され、各リクエストで強制されます。思考を無効にすると、Claude Opus 5はまれにツール呼び出しをプレーンテキストとして出力したり、表示される出力に内部XMLタグを含めたりすることがあります。プロンプトによる緩和策については、思考を無効にして実行するを参照してください。
Claude Fable 5、Claude Mythos 5、Claude Mythos Previewはthinking: {type: "disabled"}を拒否します。これらのモデルでは思考を無効にできません。
お使いのモデルが拡張思考のみをサポートしている場合(モデルごとの設定テーブルを参照)、代わりにtype: "enabled"とbudget_tokens値で設定してください。その設定については拡張思考ページで説明しています。また、思考設定が400エラーを返す場合は、思考のトラブルシューティングで各エラーメッセージとその修正方法を確認できます。
思考設定のdisplayフィールドは、API応答で思考コンテンツがどのように返されるかを制御します。displayは両方のモードで機能します。type: "adaptive"またはtype: "enabled"と一緒に設定してください。2つの値を受け入れます:
"summarized":思考ブロックには要約された思考テキスト、つまりClaudeの推論の読みやすい要約が含まれます。これはClaude Opus 4.6、Claude Sonnet 4.6、およびそれ以前のモデルのデフォルトです。"omitted":思考ブロックは空のthinkingフィールドで返されます。signatureフィールドには、マルチターンの継続性のために暗号化された完全な思考が引き続き含まれます(思考の暗号化を参照)。これはClaude Fable 5、Claude Mythos 5、Claude Opus 5、Claude Sonnet 5、Claude Opus 4.8、Claude Opus 4.7、およびClaude Mythos Previewのデフォルトです。アプリケーションが思考コンテンツをユーザーに表示しない場合は、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: "adaptive"を使用していて、モデルが単純なリクエストに対して思考をスキップする場合、displayに関係なく思考ブロックは生成されません。display: "omitted"でストリーミングする場合、thinking_deltaイベントは発行されません。イベントシーケンスについては思考のストリーミングを参照してください。signatureフィールドは、displayが"summarized"でも"omitted"でも同一です。会話のターン間でdisplay値を切り替えることはサポートされています。
Ruby SDKでは、RubyのKernel#displayをシャドウイングしないように、このフィールドをdisplay_:(末尾にアンダースコア付き)として設定してください。ワイヤーフィールドは引き続きdisplayです。
displayが"summarized"の場合、受け取る思考テキストは、生の思考の連鎖ではなく、Claudeの完全な思考プロセスの要約です。要約された思考は、悪用を防ぎながら、思考の完全なインテリジェンス上の利点を提供します。どのdisplay設定も生の思考の連鎖を返しません。
要約された思考を扱う際は、以下の点に注意してください:
完全な思考出力へのアクセスが必要なまれなケースでは、Anthropicのセールスにお問い合わせください。
思考はストリーミングと連携します。思考ブロックはcontent_block_deltaイベント内のthinking_deltaイベントとしてストリーミングされ、その後、ブロックのcontent_block_stopの直前に単一のsignature_deltaイベントが続きます。テキストブロックはその後、通常どおりストリーミングされます。
以下の例は、適応思考を使用して応答をストリーミングし、思考とテキストのデルタを到着順に出力します:
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-opus-4-8",
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:
if event.type == "content_block_start":
print(f"\nStarting {event.content_block.type} block...")
elif event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
print(event.delta.text, end="", flush=True)display: "omitted"が設定されている場合、思考ブロックが開き、単一のsignature_deltaが到着し、thinking_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":"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":""}}思考を有効にしてストリーミングを使用すると、テキストが大きなチャンクで到着したり、トークンごとの小さな配信と交互になったりすることに気づくかもしれません。これは予期される動作であり、特に思考コンテンツで顕著です。
ストリーミングシステムは最適なパフォーマンスのためにコンテンツをバッチで処理する必要があり、その結果、この「チャンク状」の配信パターンが発生し、ストリーミングイベント間に遅延が生じる可能性があります。
一般的なストリーミングの仕組みについては、メッセージのストリーミングを参照してください。
thinkingパラメータは、Claudeが回答する前に思考ブロックで思考するかどうかを制御します。effortパラメータは、Claudeが応答全体にどれだけの労力をかけるかを制御し、adaptiveモードでは思考の頻度と深さも含まれます。effortの値としてadaptiveを渡さないでください。adaptiveは思考モードであり、effortレベルではありません。
各effortレベルが思考の動作に与える影響については、思考のステアリングページのレベルごとの思考動作テーブルを参照してください。Effortページでは、各モデルがサポートするレベルを含め、パラメータ自体について説明しています。effortをサポートする唯一の拡張思考専用モデルであるClaude Opus 4.5では、effortはbudget_tokensと組み合わせて使用できます。予算のルールとチューニングを参照してください。
2つのコントロールがこのように分離されているため、目的に合ったものを選択してください:
effortを下げてください。思考を含め、応答全体をスケールダウンします。effortを上げるか、ステアリングページのClaudeが思考する頻度のステアリングを参照してください。thinking: {type: "disabled"}を使用してください(モデルごとの設定テーブルを参照)。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": "..."}を使用するとエラーになります。これらのオプションはツール使用を強制するため、手動の拡張思考と互換性がないからです。適応思考は、思考がデフォルトで有効なモデルを含め、強制的なツール使用をサポートします。ツール使用ループは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つあります:
要約すると:
古い思考を自分で削除する必要はありません。マルチターン会話ではすべての思考ブロックを渡し返してください。APIは自動的にそれらをフィルタリングし、モデルの推論を保持するために必要なブロックを保持し、実際にClaudeに表示されるブロックに対してのみ入力トークンを課金します。どの以前のターンのブロックが保持されるかはモデルごとに異なります。モデルごとの思考ブロックの保持を参照してください。デフォルトを上書きするには、clear_thinking_20251015コンテキスト編集戦略を使用してください。
最新のアシスタントメッセージ内では、連続するthinkingブロックのシーケンスは、元のリクエストでモデルが生成したものと一致する必要があります。並べ替え、編集、部分的な削除はできません。これにはredacted_thinkingブロックも含まれます。
変更された思考ブロックは400エラーで拒否されます。正確なメッセージ、一般的な原因、修正方法については、400エラーで思考ブロックを変更できないと表示されるを参照してください。唯一の例外:省略されたブロックの空のthinkingフィールドに配置されたテキストは、拒否されるのではなく無視されます。
すべてのSDKのコードを含む完全な2ターンのウォークスルーについては、ツールおよびマルチターンワークフローでの思考を参照してください。ツールを定義し、思考とツール使用の応答を受け取り、ツール結果とともにアシスタントターンをエコーバックします。
インターリーブ思考(interleaved thinking)により、Claudeはツール呼び出しの間に思考し、各ツール結果に基づいて行動する前にそれについて推論できます。インターリーブ思考により、Claudeは以下が可能になります:
連続したツール呼び出しにはインターリーブ思考は必要ありません。Claudeはインターリーブ思考の有無にかかわらずツール呼び出しを連鎖できます。インターリーブは、ツール呼び出しの間に思考ブロックが現れる場所を変えるものであり、ツール呼び出しが連鎖できるかどうかを変えるものではありません。
適応思考では、適応思考をサポートするすべてのモデルでインターリーブ思考が自動的に有効になります。ベータヘッダーは不要です。Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7では、ツール呼び出し間の推論は常に思考ブロックに表示されます。Claude Haiku 4.5はインターリーブ思考をサポートしていません。手動の拡張思考を使用するモデルでは、インターリーブにはベータヘッダーが必要で、思考予算のカウント方法が変わります。手動モードでのインターリーブ思考では、モデルごとのルールとプラットフォーム固有のヘッダー動作について説明しています。
インターリーブ思考では、思考の割り当ては単一の応答ではなく、アシスタントターン全体にまたがることができます。インターリーブ思考は、Messages APIを通じて使用されるツールでのみサポートされています。
2つのツールを使用するワークフローでインターリーブ思考が何を変えるかを示す比較例については、インターリーブ思考がフローをどのように変えるかを参照してください。
以前のアシスタントターンの思考ブロックがデフォルトでコンテキストに残るかどうかは、モデルによって異なります:
保持には2つの利点があります:
トレードオフはコンテキストの使用量です。保持された思考ブロックは他の会話履歴と同様に入力としてカウントされるため、すべて保持するモデルでは長い会話がより多くのコンテキストスペースを消費します(思考とコンテキストウィンドウを参照)。この動作は両方の方式で自動的に行われます。コードの変更やベータヘッダーは不要で、思考ブロックの保持で説明されているように、完全で変更されていない思考ブロックを渡し返し続けてください。どちらの方向にもデフォルトを上書きするには、思考ブロックのクリアを使用してください。
会話の途中でモデルを切り替える場合。 たとえば分類器による拒否のフォールバックの後など、任意の2つのモデル間で切り替える場合は、以前のアシスタントターンからthinkingおよびredacted_thinkingブロックを削除してください。思考ブロックは、それを生成したモデルに紐づいています。他のモデルはリクエストを拒否するのではなく、それらを静かに無視しますが、無視されたブロックも入力トークンを追加します。
プロンプトキャッシングは、いくつかの特定の方法で思考と相互作用します。以下のルールは両方の思考モードに適用されます。
設定の変更はキャッシングを無効にします。 思考設定と解決されたeffortレベルはプロンプト自体にレンダリングされるため、それらのいずれかを変更すると新しいキャッシュプレフィックスが開始されます。adaptive、enabled、disabled間の切り替え、budget_tokensの変更、effort値の変更はすべてキャッシュブレークポイントを無効にします。メッセージレベルのブレークポイントは常にミスし、ツールおよびシステムプロンプトのブレークポイントも、モデルが設定をレンダリングする場所によってはミスする可能性があります。思考またはeffortの変更は、キャッシュを最初からやり直すものとして扱ってください。同じ設定を維持する連続したリクエストはキャッシュを保持し、パラメータを明示的にデフォルト値に設定することは、それを省略することと同等です。使用量出力を含む実例は、思考のステアリングページにあります。
思考ブロックはツール結果とともにキャッシュされます。 ツール使用ループ中、ツール結果を含むフォローアップリクエストを行うとキャッシングが発生します。その時点で、思考ブロックを含む以前の会話履歴をキャッシュでき、それらのキャッシュされた思考ブロックは、キャッシュから読み取られる際に使用量メトリクスで入力トークンとしてカウントされます。これは明示的な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がコンテキストとキャッシュに保持されます。
劣化はキャッシュ可能な履歴から思考を削除します。 ターンの途中で思考が無効になり、現在のツール使用ターンで思考コンテンツを渡した場合、思考コンテンツは削除され、そのリクエストでは思考は無効のままになります(段階的な劣化を参照)。インターリーブ思考は、思考ブロックが複数のツール呼び出しの間に発生する可能性があるため、キャッシュ無効化の影響を増幅します。
思考を多用するタスクは、デフォルトの5分間のキャッシュ有効期間よりも長くかかることがよくあります。より長い思考セッションやマルチステップワークフロー全体でキャッシュヒットを維持するには、1時間のキャッシュ期間を検討してください。
現在のターンでClaudeが生成するすべての思考を含むmax_tokensは、厳格な制限として強制されます。Claude 4.5モデル以降では、入力トークンとmax_tokensの合計がコンテキストウィンドウのサイズを超える場合、APIはリクエストを受け入れます。その後、生成がコンテキストウィンドウの制限に達すると、エラーを返す代わりにstop_reason: "model_context_window_exceeded"で停止します。それ以前のモデルでは、APIは代わりに検証エラーを返します。停止理由の処理を参照してください。
思考がウィンドウに対してどのようにカウントされるかは、それがいつ生成されたかによって異なります:
max_tokensにカウントされ、出力トークンとして課金され、それを生成したターンのコンテキストウィンドウスペースを占有します。実際には:
max_tokensにカウントされ、その後ウィンドウから除外されます。以下の図は、最後のターンのみ保持(削除)する方式を示しています。最初の図はマルチターン会話を示しています。各ターンの思考ブロックは出力で生成されますが、後のターンの入力には引き継がれません。
2番目の図は、ツール使用を伴う同じ方式を示しています。思考はアシスタントターンの間、そのツール結果とともにコンテキストに残り、次のユーザーターンで除外されます。
特に思考を含むマルチターン会話では、トークンカウントAPIを使用して、特定のユースケースの正確なカウントを取得してください。
完全な思考コンテンツは暗号化され、各思考ブロックのsignatureフィールドで返されます。APIは、思考ブロックを渡し返す際に、それらがClaudeによって生成されたことを検証するために署名を使用します。
署名を扱う際は、以下の点に注意してください:
content_block_stopイベントの直前のcontent_block_deltaイベント内のsignature_deltaとして到着します。signature値は、Claude 4以降のモデルでは以前のモデルよりも大幅に長くなっています。signatureフィールドは不透明です。解釈したり解析したりしないでください。signature値はプラットフォーム間(Claude API、Amazon Bedrock、Google Cloud)で互換性があります。あるプラットフォームで生成された値は別のプラットフォームでも機能します。通常のthinkingブロックに加えて、Claudeの推論の一部が安全性のために編集された場合、APIはredacted_thinkingブロックを返すことがあります。redacted_thinkingブロックには、読み取り可能なテキストのない、dataフィールド内の暗号化された思考コンテンツが含まれます:
{
"type": "redacted_thinking",
"data": "..."
}dataフィールドは不透明で暗号化されています。通常の思考ブロックのsignatureフィールドと同様に、ツールを使用したマルチターン会話を続行する際は、redacted_thinkingブロックを変更せずにAPIに渡し返してください。
ツール使用で応答を往復させる際に、コードがコンテンツブロックをタイプでフィルタリングしている場合(たとえば、block.type == "thinking")、redacted_thinkingブロックも含めてください。block.type == "thinking"のみでフィルタリングすると、redacted_thinkingブロックが静かに除外され、思考ブロックの保持で説明されているマルチターンプロトコルが壊れます。
redacted_thinkingブロックは、思考が安全性のために編集された場合に返される別個のコンテンツブロックタイプです。これは、空のthinkingフィールドを持つ通常のthinkingブロックを返すdisplay: "omitted"オプションとは別のものです。
Claude Fable 5とClaude Mythos 5では、生の思考の連鎖は決して返されません。受け取るブロックはredacted_thinkingではなく通常のthinkingブロックであり、display設定は他のモデルと同じように機能します(要約されたテキスト、または省略された場合は空のthinkingフィールド。ここではこれがデフォルトです)。思考ブロックの応答形式については、Messages APIリファレンスを参照してください。
同じモデルで会話を続行する場合、thinkingフィールドが空のブロックを含め、各思考ブロックを受け取ったとおりにAPIに渡し返してください。編集したり再構築したりしないでください。表示のために要約テキストを読み取ることは問題ありません。APIは、返されたコンテンツが変更されたブロックを拒否するのであって、読み取ったブロックを拒否するわけではありません。空の省略されたthinkingフィールドに配置されたテキストは、拒否されるのではなく無視されます。
会話の途中でモデルを切り替えた場合に思考ブロックがどうなるかについては、モデルごとの思考ブロックの保持を参照してください。
フォールバッククレジットで説明されている2つの例外:
fallbackブロックは、表示された場所に留まります。モデルの推論を可視化するには、応答テキストで推論を求めるプロンプトを使用するのではなく、このページで説明されているthinkingブロックを読み取ってください。Claude Fable 5では、応答テキストの一部としてモデルの内部推論を引き出そうとするリクエストは、stop_details.category: "reasoning_extraction"で拒否される可能性があります。フィールドリファレンスと処理ガイダンスについては、拒否カテゴリを参照してください。
サンプリングパラメータ。 Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5では、デフォルト以外のtemperature、top_p、top_kの値は、思考が使用されているかどうかに関係なく、すべてのリクエストで400エラーを返します。古いモデルでは、この制限は思考がオンの間のみ適用されます。temperatureとtop_kは思考と互換性がなく、top_pは0.95から1の間の値で許可されます。
レスポンスの事前入力と強制的なツール使用。 思考がオンの間は、アシスタントのレスポンスを事前入力できません。強制的なツール使用(tool_choice: {"type": "any"}または{"type": "tool", ...})は手動の拡張思考とは互換性がありませんが、適応的思考では動作します。ツール使用での思考を参照してください。
出力制限。 Claude Fable 5、Claude Mythos 5、Claude Mythos Preview、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5、Claude Opus 4.6、Claude Sonnet 4.6は、リクエストあたり最大128kの出力トークンをサポートします。Claude Haiku 4.5、Claude Sonnet 4.5、Claude Opus 4.5は最大64kをサポートします。Message Batches APIでは、output-300k-2026-03-24のベータヘッダーにより、Claude Opus 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5、Claude Opus 4.6、Claude Sonnet 4.6の制限が300kに引き上げられます。レガシーモデルの制限については、モデルの概要を参照してください。
長時間のリクエスト。 SDKは、長時間実行されるリクエストでのHTTPタイムアウトを回避するため、max_tokensが21,333を超える場合にストリーミングを必須としています。これはクライアント側の検証であり、APIの制限ではありません。イベントを段階的に処理する必要がない場合は、.stream()を.get_final_message()(Python)または.finalMessage()(TypeScript)と組み合わせて使用することで、個々のイベントを処理せずに完全なMessageオブジェクトを取得できます。メッセージのストリーミングを参照してください。思考がアクティブな場合、思考ブロックの生成に処理時間が追加されるため、レスポンス時間が長くなることを想定してください。リクエストあたりの思考がおよそ32kトークンを超えるワークロードでは、ネットワークの問題を回避するためにバッチ処理を使用してください。そのようなリクエストは、システムタイムアウトやオープン接続の制限に達するほど長時間実行される可能性があります。
Claudeがいつ、どの程度深く思考するかを調整します。努力レベル、プロンプトベースのステアリング、コスト制御、料金について説明します。
完全な2ターンのツール使用のラウンドトリップを順を追って確認し、インターリーブ思考が何を変えるかを理解します。
思考設定の400エラー、空の思考フィールド、キャッシュミスを、その原因と修正方法に対応付けます。
effortパラメータを使用して、Claudeがテキスト、ツール呼び出し、思考に費やすトークン数を制御します。
Was this page helpful?