この機能はZero Data Retention(ZDR)の対象です。組織がZDR契約を締結している場合、この機能を通じて送信されたデータは、APIレスポンスが返された後に保存されることはありません。
拡張思考は、複雑なタスクに対してClaudeの推論能力を強化し、最終的な回答を提供する前の段階的な思考プロセスについて、さまざまなレベルの透明性を提供します。
拡張思考は、現在のすべてのClaudeモデルで利用可能です。有効化の方法はモデルによって異なります。
| モデル | 手動拡張思考(budget_tokens) | 推奨 |
|---|---|---|
| Claude Fable 5 Claude Mythos 5 | 非対応(400エラー) | 適応型思考(常時有効)。深さの制御にはeffortを使用 |
| Claude Mythos Preview | 対応 | 適応型思考(デフォルトで有効) |
| Claude Opus 4.8 | 非対応(400エラー) | 適応型思考とeffort |
| Claude Opus 4.7 | 非対応(400エラー) | 適応型思考とeffort |
| Claude Opus 4.6 | 非推奨 | 適応型思考とeffort |
| Claude Sonnet 4.6 | 非推奨 | 適応型思考とeffort |
| Claude Opus 4.5 | 対応 | 該当なし |
| Claude Haiku 4.5 | 対応 | 該当なし |
| 以前のClaude 4モデル | 対応 | 該当なし |
適応型思考では、モデルが各リクエストでいつ、どの程度思考するかを決定します。Claude Mythos Preview、Claude Fable 5、Claude Mythos 5では、thinking: {type: "disabled"}はサポートされていません。モデルごとの動作の違い(思考出力、インターリーブ思考、ブロックの保持)については、モデルバージョン間の思考の違いを参照してください。
拡張思考が有効になっている場合、Claudeは内部推論を出力するthinkingコンテンツブロックを作成します。Claudeはこの推論から得た洞察を取り入れてから、最終的な応答を作成します。
APIレスポンスには、thinkingコンテンツブロックの後にtextコンテンツブロックが含まれます。
デフォルトのレスポンス形式の例を以下に示します。
{
"content": [
{
"type": "thinking",
"thinking": "Let me analyze this step by step...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}拡張思考のレスポンス形式の詳細については、Messages APIリファレンスを参照してください。
Messages APIで拡張思考を使用する例を以下に示します。
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "Are there an infinite number of prime numbers such that n mod 4 == 3?",
}
],
)
# レスポンスには要約された思考ブロックとテキストブロックが含まれます
for block in response.content:
if block.type == "thinking":
print(f"\nThinking summary: {block.thinking}")
elif block.type == "text":
print(f"\nResponse: {block.text}")拡張思考を有効にするには、typeをenabledに設定し、budget_tokens値を指定したthinkingオブジェクトを追加します。手動拡張思考が非推奨または非対応のモデル(対応モデルを参照)では、適応型思考で説明されているように、代わりにtype: "adaptive"を使用してください。
budget_tokensパラメータは、Claudeが内部推論プロセスに使用できるトークンの最大数を設定します。この制限は完全な思考トークンに適用され、要約された出力には適用されません。予算を大きくすると、複雑な問題に対してより徹底的な分析が可能になり、応答品質が向上する可能性がありますが、特に32kを超える範囲では、Claudeが割り当てられた予算全体を使用しない場合があります。
budget_tokensはClaude Opus 4.6およびClaude Sonnet 4.6では非推奨であり、将来のモデルリリースで削除される予定です。思考の深さを制御するには、代わりにeffortパラメータを使用した適応型思考を使用してください。
Claude Mythos Preview、Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6、Claude Sonnet 4.6は最大128kの出力トークンをサポートしています。Claude Haiku 4.5は最大64kをサポートしています。レガシーモデルの制限については、モデルの概要を参照してください。Message Batches APIでは、output-300k-2026-03-24 ベータヘッダーにより、Claude Opus 4.8、Opus 4.7、Opus 4.6、Sonnet 4.6の出力制限が300kに引き上げられます。
budget_tokensはmax_tokensより小さい値に設定する必要があります。ただし、ツールとのインターリーブ思考を使用する場合は、トークン制限がコンテキストウィンドウ全体になるため、この制限を超えることができます。budget_tokensはmax_tokensより小さくなければならないため、拡張思考はmax_tokens: 0(キャッシュの事前ウォーミング)と組み合わせることはできません。
thinking設定のdisplayフィールドは、APIレスポンスで思考コンテンツがどのように返されるかを制御します。次の2つの値を受け付けます。
"summarized":思考ブロックには要約された思考テキストが含まれます。詳細については要約された思考を参照してください。これはClaude Opus 4.6、Claude Sonnet 4.6、およびそれ以前のClaude 4モデルでのデフォルトです。"omitted":思考ブロックは空のthinkingフィールドとともに返されます。signatureフィールドには、マルチターンの継続性のために暗号化された完全な思考が引き続き含まれます(思考の暗号化を参照)。これはClaude Fable 5、Claude Mythos 5、Claude Opus 4.8、Claude Opus 4.7、およびClaude Mythos Previewでのデフォルトです。display: "omitted"の設定は、アプリケーションが思考コンテンツをユーザーに表示しない場合に便利です。主な利点は、ストリーミング時の最初のテキストトークンまでの時間が短縮されることです。サーバーは思考トークンのストリーミングを完全にスキップし、署名のみを配信するため、最終的なテキストレスポンスのストリーミングがより早く開始されます。
省略された思考に関する重要な考慮事項は次のとおりです。
signatureを復号してプロンプト構築のために元の思考を再構成します(思考ブロックの保持を参照)。ラウンドトリップされた省略ブロックのthinkingフィールドに配置したテキストはすべて無視されます。displayはthinking.type: "disabled"と組み合わせて使用することはできません(表示するものがないため)。thinking.type: "adaptive"を使用していて、モデルが単純なリクエストに対して思考をスキップした場合、displayの値に関係なく思考ブロックは生成されません。signatureフィールドは、displayが"summarized"でも"omitted"でも同一です。会話のターン間でdisplayの値を切り替えることはサポートされています。
Claude Mythos Previewでは、displayのデフォルトは"omitted"です。このセクションの例では、すべてのモデルに適用できるようにdisplayを明示的に渡していますが、Mythos Previewでは未設定のままでも同じ動作になります。Mythos Previewで要約された思考を受け取るには、display: "summarized"を明示的に設定してください。
思考内容をエンドユーザーに表示しない自動化パイプラインでは、思考トークンをネットワーク経由で受信するオーバーヘッドを省略できます。レイテンシに敏感なアプリケーションでは、最終応答が開始される前に思考テキストのストリーミングを待つことなく、同じ推論品質を得られます。
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000,
"display": "omitted",
},
messages=[
{"role": "user", "content": "What is 27 * 453?"},
],
)
for block in response.content:
if block.type == "thinking":
if block.thinking:
print(f"Thinking: {block.thinking}")
else:
print("Thinking: [omitted]")
elif block.type == "text":
print(f"Response: {block.text}")display: "omitted"が設定されている場合、レスポンスにはthinkingフィールドが空のthinkingブロックが含まれます。
{
"content": [
{
"type": "thinking",
"thinking": "",
"signature": "EosnCkYICxIMMb3LzNrMu..."
},
{
"type": "text",
"text": "The answer is 12,231."
}
]
}display: "omitted"でストリーミングする場合、thinking_deltaイベントは発行されません。イベントシーケンスについては、思考のストリーミングを参照してください。
拡張思考を有効にすると、Claude 4モデルのMessages APIはClaudeの完全な思考プロセスの要約を返します。要約された思考は、拡張思考の知能面での利点を完全に提供しながら、悪用を防止します。これは、思考設定のdisplayフィールドが未設定または"summarized"に設定されている場合のClaude 4モデルのデフォルト動作です。Claude Fable 5、Claude Mythos 5、Claude Opus 4.8、Claude Opus 4.7、およびClaude Mythos Previewでは、displayのデフォルトは"omitted"となるため、要約された思考を受け取るにはdisplay: "summarized"を明示的に設定する必要があります。
要約された思考に関する重要な考慮事項は以下のとおりです。
まれに、Claude 4モデルの完全な思考出力へのアクセスが必要な場合は、Anthropicの営業担当にお問い合わせください。
server-sent events (SSE)を使用して、拡張思考のレスポンスをストリーミングできます。
拡張思考でストリーミングが有効になっている場合、thinking_deltaイベントを介して思考内容を受信します。
display: "omitted"が設定されている場合、thinking_deltaイベントは発行されません。思考表示の制御を参照してください。
Messages APIを介したストリーミングの詳細なドキュメントについては、メッセージのストリーミングを参照してください。
思考を使用したストリーミングの処理方法は以下のとおりです。
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
) as stream:
thinking_started = False
response_started = False
for event in stream:
if event.type == "content_block_start":
print(f"\nStarting {event.content_block.type} block...")
# 新しいブロックごとにフラグをリセット
thinking_started = False
response_started = False
elif event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
if not thinking_started:
print("Thinking: ", end="", flush=True)
thinking_started = True
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
if not response_started:
print("Response: ", end="", flush=True)
response_started = True
print(event.delta.text, end="", flush=True)
elif event.type == "content_block_stop":
print("\nBlock complete.")ストリーミング出力の例:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-sonnet-4-6", "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": "EqQBCgIYAhIM1gbcDa9GJwZA2b3hGgxBdjrkzLoky3dl1pkiMOYds..."}}
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"が設定されている場合、思考ブロックが開き、単一の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":""}}思考を有効にしてストリーミングを使用する場合、テキストが大きなチャンクで到着し、小さなトークンごとの配信と交互に行われることがあります。これは、特に思考内容に関しては想定される動作です。
ストリーミングシステムは最適なパフォーマンスのためにコンテンツをバッチで処理する必要があり、その結果、ストリーミングイベント間に遅延が発生する可能性のある、この「チャンク状」の配信パターンになることがあります。
拡張思考はツール使用と併用でき、Claudeがツールの選択と結果の処理について推論できるようになります。
ツール使用で拡張思考を使用する場合、以下の制限事項に注意してください。
ツール選択の制限:思考を伴うツール使用は、tool_choice: {"type": "auto"}(デフォルト)またはtool_choice: {"type": "none"}のみをサポートします。tool_choice: {"type": "any"}またはtool_choice: {"type": "tool", "name": "..."}を使用すると、これらのオプションはツール使用を強制するため、拡張思考と互換性がなく、エラーが発生します。
思考ブロックの保持:ツール使用中は、最後のアシスタントメッセージのthinkingブロックをAPIに返す必要があります。推論の連続性を維持するために、完全な未変更のブロックをAPIに含めてください。
ツール使用ループ中を含め、アシスタントターンの途中で思考を切り替えることはできません。アシスタントターン全体が単一の思考モードで動作する必要があります。
モデルの観点からは、ツール使用ループはアシスタントターンの一部です。アシスタントターンは、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メッセージがありますが、ツール使用ループは概念的には1つの連続したアシスタント応答の一部です。
ターン途中で思考の競合が発生した場合(ツール使用ループ中に思考のオン/オフを切り替えるなど)、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)思考を切り替える前にアシスタントターンを完了することで、新しいリクエストで思考が実際に有効になることを保証できます。
思考モードを切り替えると、メッセージ履歴のプロンプトキャッシングも無効になります。詳細については、プロンプトキャッシングを伴う拡張思考セクションを参照してください。
ツール使用中は、thinkingブロックをAPIに返す必要があり、完全な未変更のブロックをAPIに含める必要があります。これは、モデルの推論フローと会話の整合性を維持するために重要です。
以前のassistantロールターンからthinkingブロックを省略することはできますが、マルチターン会話では常にすべての思考ブロックをAPIに返してください。APIは以下を行います。
どのブロックが保持されるかはモデルによって異なります。クラスごとのデフォルトについては、モデル別の思考ブロック保持を参照してください。デフォルトを上書きするには、clear_thinking_20251015コンテキスト編集戦略を使用してください。
会話中に思考モードを切り替える場合、アシスタントターン全体(ツール使用ループを含む)が単一の思考モードで動作する必要があることに注意してください。詳細については、会話中の思考モードの切り替えを参照してください。
Claudeがツールを呼び出すとき、外部情報を待つために応答の構築を一時停止しています。ツール結果が返されると、Claudeはその既存の応答の構築を続けます。これにより、以下の理由から、ツール使用中に思考ブロックを保持する必要があります。
推論の連続性:思考ブロックは、ツールリクエストにつながったClaudeの段階的な推論を記録します。ツール結果を投稿する際に元の思考を含めることで、Claudeは中断したところから推論を続けることができます。
コンテキストの維持:ツール結果はAPI構造ではユーザーメッセージとして表示されますが、連続した推論フローの一部です。思考ブロックを保持することで、複数のAPI呼び出しにわたってこの概念的なフローが維持されます。コンテキスト管理の詳細については、コンテキストウィンドウに関するガイドを参照してください。
重要:thinkingブロックを提供する場合、連続するthinkingブロックのシーケンス全体が、元のリクエスト中にモデルによって生成された出力と一致する必要があります。これらのブロックのシーケンスを並べ替えたり変更したりすることはできません。
思考ブロックが変更された場合、APIは`thinking` or `redacted_thinking` blocks in the latest assistant message cannot be modifiedというメッセージを含む400 invalid_request_errorを返します。最も一般的な原因は、コンテンツブロックをタイプでフィルタリングしてredacted_thinkingブロックを削除するアプリケーションコード、またはアシスタントメッセージをそのまま返すのではなく再構築するコードです。完全なエラーと修正手順については、思考ブロックは変更できませんを参照してください。
Claude 4モデルでのツール使用を伴う拡張思考は、「interleaved thinking」(インターリーブ思考)をサポートしており、Claudeがツール呼び出しの間に思考し、ツール結果を受け取った後により高度な推論を行うことができます。
インターリーブ思考により、Claudeは以下が可能になります。
インターリーブ思考を有効にする方法はモデルによって異なります。
| モデル | インターリーブ思考 |
|---|---|
| Claude Fable 5 Claude Mythos 5 | 適応型思考で自動。ツール間の推論は思考ブロックに移動します。ベータヘッダーは不要です。 |
| Claude Mythos Preview | 自動。すべてのツール間推論ステップがプレーンテキストではなく思考ブロックに移動します。ベータヘッダーは不要であり、サポートされていません。 |
| Claude Opus 4.8 | 適応型思考(唯一サポートされている思考モード)で自動。ベータヘッダーは不要です。 |
| Claude Opus 4.7 | 適応型思考(唯一サポートされている思考モード)で自動。ベータヘッダーは不要です。 |
| Claude Opus 4.6 | 適応型思考で自動。interleaved-thinking-2025-05-14ベータヘッダーは非推奨であり、含まれていても安全に無視されます。 |
| Claude Sonnet 4.6 | 適応型思考で自動(推奨)。手動のtype: "enabled"を使用したベータヘッダーは引き続き機能しますが、非推奨です。 |
| Claude Opus 4.5 | APIリクエストにinterleaved-thinking-2025-05-14 ベータヘッダーを追加します。 |
| Claude Haiku 4.5 | 非対応。ベータヘッダーはClaude APIで受け入れられますが、無視されます。 |
| 以前のClaude 4モデル | APIリクエストにinterleaved-thinking-2025-05-14 ベータヘッダーを追加します。 |
ここでの「以前のClaude 4モデル」とは、Claude Sonnet 4.5、Claude Opus 4.1(非推奨)、Claude Opus 4(Vertex AIを除き廃止)、Claude Sonnet 4(BedrockおよびVertex AIを除き廃止)を指します。
インターリーブ思考に関する重要な考慮事項を以下に示します。
budget_tokensは1つのアシスタントターン内のすべての思考ブロックにわたる合計予算を表すため、max_tokensパラメータを超えることができます。interleaved-thinking-2025-05-14を受け入れます。インターリーブ思考をサポートしていないモデルでは、ヘッダーは無視されます。Claude Opus 4.8、Claude Opus 4.7、Claude Opus 4.6では、非推奨であり安全に無視されます。Claude Mythos Previewでは、不要であり安全に無視されます。interleaved-thinking-2025-05-14を渡すと、リクエストは失敗します。思考を伴うプロンプトキャッシングには、いくつかの重要な考慮事項があります。
拡張思考タスクは、完了までに5分以上かかることがよくあります。より長い思考セッションやマルチステップワークフローにわたってキャッシュヒットを維持するために、1時間のキャッシュ期間の使用を検討してください。
思考ブロックのコンテキスト削除
キャッシュ無効化パターン
ツール使用で拡張思考を使用する場合、思考ブロックはトークンカウントに影響する特定のキャッシング動作を示します。
仕組み:
詳細な例のフロー:
リクエスト1:
User: "What's the weather in Paris?"レスポンス1:
[thinking_block_1] + [tool_use block 1]リクエスト2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]レスポンス2:
[thinking_block_2] + [text block 2]リクエスト2は、リクエスト内容(レスポンスではない)のキャッシュを書き込みます。キャッシュには、元のユーザーメッセージ、最初の思考ブロック、ツール使用ブロック、およびツール結果が含まれます。
リクエスト3:
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]Opus 4.5以降およびSonnet 4.6以降では、以前のすべての思考ブロックがデフォルトで保持されます。以前のOpus/SonnetモデルおよびすべてのHaikuモデルでは、ツール結果以外のユーザーブロックが含まれているため、以前のすべての思考ブロックが無視され、コンテキストから削除されます。このリクエストは以下と同じように処理されます。
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]重要なポイント:
cache_controlマーカーがなくても自動的に発生しますmax_tokens(思考が有効な場合は思考予算を含む)は厳密な制限として適用されます。Claude 4.5モデル以降では、入力トークンとmax_tokensの合計がコンテキストウィンドウサイズを超える場合でも、APIはリクエストを受け入れます。その後、生成がコンテキストウィンドウの制限に達すると、stop_reason: "model_context_window_exceeded"で停止します。以前のモデルでは、APIは代わりに検証エラーを返します。停止理由の処理を参照してください。
より詳細な内容については、コンテキストウィンドウに関するガイドをお読みください。
思考を有効にしてコンテキストウィンドウの使用量を計算する場合、注意すべき考慮事項がいくつかあります。
max_tokens制限にカウントされます以下の図は、拡張思考が有効な場合の特殊なトークン管理を示しています。
実効コンテキストウィンドウは以下のように計算されます。
context window =
(current input tokens - previous thinking tokens) +
(thinking tokens + encrypted thinking tokens + text output tokens)特に思考を含むマルチターン会話を扱う場合は、トークンカウントAPIを使用して、特定のユースケースの正確なトークン数を取得してください。
ツール使用で拡張思考を使用する場合、思考ブロックを明示的に保持し、ツール結果とともに返す必要があります。
ツール使用を伴う拡張思考の実効コンテキストウィンドウの計算は以下のようになります。
context window =
(current input tokens + previous thinking tokens + tool use tokens) +
(thinking tokens + encrypted thinking tokens + text output tokens)以下の図は、ツール使用を伴う拡張思考のトークン管理を示しています。
拡張思考でのコンテキストウィンドウとmax_tokensの動作を考慮すると、以下が必要になる場合があります。
max_tokens値を調整する思考の完全な内容は暗号化され、signatureフィールドで返されます。このフィールドは、思考ブロックがAPIに渡し戻された際に、それらがClaudeによって生成されたものであることを検証するために使用されます。
思考ブロックを送り返すことが厳密に必要なのは、拡張思考でツールを使用する場合のみです。それ以外の場合は、以前のターンの思考ブロックを省略できます。思考ブロックを渡し戻した場合、APIがそれらを保持するか削除するかはモデルによって異なります。Opus 4.5以降およびSonnet 4.6以降はデフォルトでコンテキストに保持しますが、それより前のOpus/SonnetモデルおよびすべてのHaikuモデルは削除します。この動作を設定するには、コンテキスト編集を参照してください。
思考ブロックを送り返す場合は、一貫性を保ち、潜在的な問題を回避するために、受け取ったとおりにすべてを渡し戻してください。
思考の暗号化に関する重要な考慮事項は以下のとおりです。
content_block_stopイベントの直前に、content_block_deltaイベント内のsignature_deltaを通じて追加されます。signature値は、以前のモデルよりも大幅に長くなっています。signatureフィールドは不透明なフィールドであり、解釈や解析を行うべきではありません。signature値はプラットフォーム間(Claude API、Amazon Bedrock、Vertex AI)で互換性があります。あるプラットフォームで生成された値は、別のプラットフォームでも互換性があります。通常のthinkingブロックに加えて、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ブロックは、思考の一部が安全上の理由で編集された場合にAPIによって返される、別個のコンテンツブロックタイプです。これは、thinkingフィールドが空の通常のthinkingブロックを返すdisplay: "omitted"オプションとは別のものです。
Messages APIは、Claudeモデルのバージョンによって思考の処理が異なります。以下の表は簡潔な比較を示しています。
| モデル | budget_tokens | 思考出力 | インターリーブ思考 | ブロック保持 |
|---|---|---|---|---|
| Claude Fable 5 Claude Mythos 5 | 非対応 | デフォルトで省略1 | 自動2 | 適応型思考を参照 |
| Claude Mythos Preview | 対応 | デフォルトで省略1 | 自動2 | 保持3 |
| Claude Opus 4.8 | 非対応 | デフォルトで省略1 | 自動2 | 保持 |
| Claude Opus 4.7 | 非対応 | デフォルトで省略1 | 自動2 | 保持 |
| Claude Opus 4.6 | 非推奨 | 要約 | 自動2 | 保持 |
| Claude Sonnet 4.6 | 非推奨 | 要約 | 自動、またはベータヘッダー | 保持 |
| Claude Opus 4.5 | 対応 | 要約 | ベータヘッダー | 保持 |
| Claude Haiku 4.5 | 対応 | 要約 | 非対応 | 最後のターンのみ |
| 以前のClaude 4モデル | 対応 | 要約 | ベータヘッダー | 最後のターンのみ |
1 要約された思考を受け取るにはdisplay: "summarized"を設定してください。Claude Fable 5、Claude Mythos 5、Claude Mythos Previewでは、生の思考トークンは返されません。
2 適応型思考を使用した場合。これらのモデルではinterleaved-thinking-2025-05-14ベータヘッダーは不要であり、含まれていても安全に無視されます。
3 Mythos思考形式をサポートしていないモデルで会話を続ける場合、ブロックは削除されます。
以前のアシスタントターンの思考ブロックがデフォルトでコンテキストに保持されるかどうかは、モデルクラスによって異なります。Opus:Claude Opus 4.5以降のOpusモデルは、以前のすべての思考ブロックを保持します。Claude Opus 4.1(非推奨)以前のOpusモデルは、最後のアシスタントターンの思考のみを保持します。Sonnet:Claude Sonnet 4.6以降のSonnetモデルはすべて保持します。Claude Sonnet 4.5以前のSonnetモデルは最後のターンのみを保持します。Haiku:Claude Haiku 4.5までのすべてのHaikuモデルは最後のターンのみを保持します。Claude Mythos Previewも、以前のすべての思考ブロックを保持します。
思考ブロック保持の利点:
重要な考慮事項:
以前のモデル(Claude Sonnet 4.5、Opus 4.1(非推奨)など)では、以前のターンの思考ブロックは引き続きコンテキストから削除されます。プロンプトキャッシングを伴う拡張思考セクションで説明されている既存の動作がこれらのモデルに適用されます。
ベースレート、キャッシュ書き込み、キャッシュヒット、出力トークンを含む完全な料金情報については、料金ページを参照してください。
思考プロセスでは以下に対して料金が発生します:
拡張思考が有効になっている場合、この機能をサポートするための専用のシステムプロンプトが自動的に含まれます。
要約された思考を使用する場合:
display: "omitted"を使用する場合:
thinkingフィールドは空)課金対象の出力トークン数は、レスポンスに表示されるトークン数と一致しません。課金されるのは、レスポンスに表示される思考内容ではなく、完全な思考プロセスに対してです。
内部推論に費やされた課金対象の出力トークン数を確認するには、レスポンスのusage.output_tokens_details.thinking_tokensを読み取ってください。この値は、モデルが生成した生の推論(本文で返される要約テキストではありません)を反映しており、常にoutput_tokens以下になります。出力のうち推論以外の部分を概算するには、output_tokensからこの値を引いてください。
{
"usage": {
"input_tokens": 25,
"output_tokens": 348,
"output_tokens_details": {
"thinking_tokens": 312
}
}
}output_tokensは、課金に使用される包括的で正式な合計値のままです。output_tokens_detailsは、可観測性のための読み取り専用の内訳です。
usage.output_tokens_details.thinking_tokensフィールドは、課金対象の出力トークンのうち内部推論に使用されたトークン数を報告します。ストリーミング時には、この内訳は最後のmessage_deltaイベントにのみ表示されます。max_tokensが21,333を超える場合にストリーミングが必要です。これはクライアント側の検証であり、APIの制限ではありません。イベントを段階的に処理する必要がない場合は、.stream()と.get_final_message()(Python)または.finalMessage()(TypeScript)を使用して、個々のイベントを処理せずに完全なMessageオブジェクトを取得してください。詳細については、メッセージのストリーミングを参照してください。ストリーミング時には、思考コンテンツブロックとテキストコンテンツブロックの両方が到着した際に処理できるよう準備してください。display: "omitted"を設定して、最初のテキストトークンまでの時間を短縮してください。思考表示の制御を参照してください。temperatureやtop_kの変更、および強制ツール使用と互換性がありません。top_pを1から0.95の間の値に設定できます。拡張思考をいつ、どの程度使用するかをClaudeに判断させます。
クックブックで思考の実践的な例を探索してください。
拡張思考のためのプロンプトエンジニアリングのベストプラクティスを学びます。
Was this page helpful?