

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 사고 암호화
<a name="claude-messages-thinking-encryption"></a>

전체 사고 콘텐츠는 암호화되어 서명 필드에 반환됩니다. 이 필드는 API로 다시 전달될 때 Claude에서 사고 블록이 생성되었는지 확인하는 데 사용됩니다. 응답을 스트리밍할 때 `content_block_stop` 이벤트 직전에 `content_block_delta` 이벤트 내부의 `signature_delta`를 통해 서명이 추가됩니다.

**참고**  
확장된 사고와 함께 도구를 사용할 때는 반드시 사고 블록을 다시 보내야 합니다. 그렇지 않으면 이전 턴의 사고 블록을 생략하거나 API가 다시 전달하는 경우 이를 제거하도록 할 수 있습니다.  
사고 블록을 다시 보내는 경우 일관성을 유지하고 잠재적 문제를 방지하기 위해 모든 것을 받은 대로 다시 전달하는 것이 좋습니다.

## Claude 3.7 Sonnet에서 사고 수정
<a name="claude-messages-thinking-encryption-redaction"></a>

**참고**  
다음 정보는 특히 Claude 3.7 Sonnet에 적용됩니다. Claude 4 모델은 사고를 다르게 처리하고 수정된 사고 블록을 생성하지 않습니다.

Claude 3.7 Sonnet에서 다음이 적용됩니다.
+ 경우에 따라 안전 시스템에서 Claude의 내부 추론에 플래그를 지정합니다. 이 경우 사고 블록의 일부 또는 전체를 암호화하여 redacted\$1thinking 블록으로 반환합니다. redacted\$1thinking 블록은 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`를 프롬프트로 사용할 수 있습니다.

멀티턴 대화에서 API에 `thinking` 및 `redacted_thinking` 블록을 다시 전달할 때는 수정되지 않은 전체 블록을 마지막 어시스턴트 턴을 위해 API에 다시 포함해야 합니다. 이는 모델의 추론 흐름을 유지하는 데 매우 중요합니다. 항상 모든 사고 블록을 API로 전달하는 것이 좋습니다. 자세한 내용은 [도구 사용을 통한 확장된 사고사고 블록 보존](claude-messages-extended-thinking.md#claude-messages-extended-thinking-tool-use-thinking-blocks) 단원을 참조하십시오.

다음 예제에서는 **InvokeModelWithResponseStream** API를 사용하여 수정과 함께 사고 토큰을 사용할 때 요청 및 응답 구조를 보여줍니다.

스트리밍이 활성화되면 thinking\$1delta 이벤트로부터 사고 콘텐츠를 받게 됩니다. 다음은 사고로 스트리밍을 처리하는 방법입니다.

**요청**

```
{
    "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"}
```