思考加密 - Amazon Bedrock

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

思考加密

完整思考內容會經過加密,並在簽章欄位中傳回。此欄位用於驗證當傳回給 API 時,Claude 產生的思考區塊。串流回應時,會透過正好在 content_block_stop 事件前的 content_block_delta 事件內的 signature_delta 來新增簽章。

注意

只有在使用具有延伸思考的工具時,才嚴格要求傳送回思考區塊。否則,您可以省略先前回合的思考區塊,或在將資料傳回時讓 API 為您去掉這些區塊。

如果回傳思考區塊,我們建議完整回傳您收到的所有內容,以確保一致性並避免潛在問題。

Claude 3.7 Sonnet 中的思考修訂

注意

以下資訊特別適用於 Claude 3.7 Sonnet。Claude 4 模型以不同的方式處理思考,且不會產生修訂後的思考區塊。

在 Claude 3.7 Sonnet 中,適用下列條件:

  • 安全系統偶爾會標記 Claude 的內部推理。發生這種情況時,我們會加密部分或全部的思考區塊,並將其作為 redacted_thinking 區塊傳回給您。將 redacted_thinking 區塊傳回至 API 時,會解密這些區塊,讓 Claude 能夠繼續回應而不會遺失內容。

  • 會在回應中的文字區塊之前傳回 thinkingredacted_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

在多回合對話中將 thinkingredacted_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"}