思考の暗号化 - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

思考の暗号化

思考の完全なコンテンツは暗号化され、署名フィールドで返されます。このフィールドは、思考ブロックが API に返される際に Claude が生成したことを検証するために使用されます。レスポンスをストリーミングする場合、署名は content_block_delta イベントの直前に content_block_stop イベント内の signature_delta を介して追加されます。

注記

思考ブロックを返す必要があるのは、拡張思考機能を持つツールを使用する場合のみです。それ以外の場合は、前のターンの思考ブロックを省略したり、返された場合に API で削除したりできます。

思考ブロックを返す場合は、一貫性を維持し、潜在的な問題を回避するために、受け取ったままの状態ですべてを返すことをお勧めします。

Claude 3.7 Sonnet における思考の秘匿化

注記

以下の情報は、Claude 3.7 Sonnet にのみ適用されます。Claude 4モデルでは思考の処理方法が異なり、秘匿化された思考ブロックは生成されません。

Claude 3.7 Sonnet では、以下が適用されます。

  • Claude の内部推論には、安全システムによってフラグが追加される場合があります。この場合、思考ブロックの一部またはすべてが暗号化され、redacted_thinking ブロックとして返されます。redacted_thinking ブロックは API に返されると復号されるため、Claude はコンテキストを失うことなくレスポンスを続行できます。

  • thinking ブロックと redacted_thinking ブロックは、レスポンス内のテキストブロックの前に返されます。

Claude 3.7 Sonnet で拡張思考を使用する顧客向けアプリケーションを構築する場合は、次の点を考慮してください。

  • 秘匿化された思考ブロックには、人間が判読できない暗号化されたコンテンツが含まれていることに注意が必要です。

  • 「Claude の内部推論の一部は、安全上の理由から自動的に暗号化されています。これはレスポンスの品質には影響しません」という簡単な説明を提供することを検討してください。

  • ユーザーに思考ブロックを表示する場合は、通常の思考ブロックを維持しながら、秘匿化されたブロックをフィルタリングして除外できます。

  • 拡張思考機能を使用すると、推論の一部が暗号化される場合があることについての透明性を確保してください。

  • UI に影響を与えずに秘匿化された思考を適切に管理するために、適切なエラー処理を実装してください。

通常の思考ブロックと秘匿化された思考ブロックの両方を説明する例は以下のとおりです。

{ "content": [ { "type": "thinking", "thinking": "Let me analyze this step by step...", "signature":"WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...." }, { "type": "redacted_thinking", "data":"EmwKAhgBEgy3va3pzix/LafPsn4aDFIT2Xlxh0L5L8rLVyIwxtE3rAFBa8cr3qpP..." }, { "type": "text", "text": "Based on my analysis..." } ] }
ヒント

出力に秘匿化された思考ブロックが表示されるのは、想定内の動作です。モデルは、安全ガードレールを維持しながら、この秘匿化された推論を使用してレスポンス生成に利用できます。

アプリケーションで秘匿化された思考ブロックの処理をテストする必要がある場合は、以下の特別なテスト用文字列をプロンプトとして使用できます。ANTHROPIC_MAGIC_STRING_TRIGGER_REDACTED_THINKING_46C9A13E193C177646C7398A98432ECCCE4C1253D5E2D82641AC0E52CC2876CB

マルチターン会話で thinking ブロックと redacted_thinking ブロックを API に返す場合は、最後のアシスタントターンのブロックをそのまま API に返す必要があります。これは、モデルの推論フローを維持するうえで重要な点です。常にすべての思考ブロックを API に返すことをお勧めします。詳細については、「ツール使用を伴う拡張思考」を参照してください。

次の例は、InvokeModelWithResponseStream API を使用して、秘匿化された思考トークンを使用する場合のリクエストとレスポンスの構造を説明しています。

ストリーミングを有効にすると、thinking_delta イベントから思考コンテンツを受信できます。思考でストリーミングを処理する方法は次のとおりです。

リクエスト

{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 24000, "thinking": { "type": "enabled", "budget_tokens": 16000 }, "messages": [ { "role": "user", "content": "What is 27 * 453?" } ] }

レスポンス

event: message_start data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-3-7-sonnet-20250219", "stop_reason": null, "stop_sequence": null}} event: content_block_start data: {"type": "content_block_start", "index": 0, "content_block": {"type": "thinking", "thinking": ""}} event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "Let me solve this step by step:\n\n1. First break down 27 * 453"}} event: content_block_delta data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n2. 453 = 400 + 50 + 3"}} // 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": "27 * 453 = 12,231"}} // 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"}