"zero data retention"(제로 데이터 보존), 즉 ZDR이 이 기능에 어떻게 적용되는지는 API 및 데이터 보존을 참조하세요.
이 페이지는 사고가 활성화된 상태에서 완전한 2턴 도구 사용 왕복 과정을 단계별로 안내합니다. Claude가 사고하고, 도구 호출을 요청하고, 결과를 받고, 답변을 완성하며, 모든 단계에서 사고 블록이 올바르게 처리됩니다. 전체 규칙은 사고 페이지의 도구 사용과 함께하는 사고 및 사고 블록 보존에 있으며, 이 페이지는 해당 규칙이 실행 가능한 코드에 적용된 모습을 보여줍니다.
각 링크는 사고 페이지의 전체 설명으로 연결됩니다:
auto 또는 none으로 제한: 도구 사용을 강제하는 tool_choice 옵션은 수동 확장 사고(thinking: {type: "enabled"})에서 오류를 반환합니다. 적응형 사고는 강제 도구 사용을 지원합니다.redacted_thinking 블록을 필터링하면 400 오류가 발생합니다.샘플은 적응형 사고를 사용합니다. 확장 사고만 지원하는 모델에서는 thinking: {type: "enabled", budget_tokens: N}으로 대체하세요. 왕복 규칙은 동일합니다.
이 예제는 get_weather 도구를 정의하고, Claude가 사고하고 도구 호출을 요청하도록 한 다음, 사고 블록을 포함하여 받은 그대로 정확히 반환된 어시스턴트 턴과 함께 도구 결과를 반환합니다.
사용 가능한 도구와 함께 첫 번째 요청 보내기
적응형 사고가 활성화되고 도구가 정의된 요청을 보냅니다. thinking 매개변수를 제외하면 이것은 표준 도구 사용 요청입니다:
client = anthropic.Anthropic()
weather_tool = {
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "City name"}},
"required": ["location"],
},
}
# 첫 번째 요청 - Claude가 사고 과정과 도구 요청으로 응답합니다
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
print(response)다시 반환할 content 배열 캡처하기
Claude가 사고하기로 선택한 실행에서는 응답 콘텐츠에 thinking, text, tool_use 블록이 표시됩니다(더 단순한 요청에서는 적응형 모드가 사고 블록을 건너뛸 수 있습니다). 이 content 배열을 그대로 유지하세요. 다음 단계에서 이를 그대로 다시 보냅니다.
이 출력과 같은 사고 텍스트를 보려면 요청에 display: "summarized"를 추가하세요. claude-opus-4-8을 포함하여 display가 기본적으로 생략되는 모델에서는 thinking 필드가 signature만 채워진 빈 문자열로 반환됩니다. 어느 경우든 content 배열을 변경하지 않고 그대로 반환하세요. 사고 표시 제어를 참조하세요.
{
"content": [
{
"type": "thinking",
"thinking": "The user wants to know the current weather in Paris. I have access to a function `get_weather`...",
"signature": "BDaL4VrbR2Oj0hO4XpJxT28J5T...."
},
{
"type": "text",
"text": "I can help you get the current weather information for Paris. Let me check that for you"
},
{
"type": "tool_use",
"id": "toolu_01CswdEQBMshySk6Y9DFKrfq",
"name": "get_weather",
"input": {
"location": "Paris"
}
}
]
}어시스턴트 턴을 그대로 반환하며 도구 결과 전달하기
사용자 측에서 도구를 실행한 다음, 대화에 두 개의 메시지를 추가하는 두 번째 요청을 보냅니다. 첫 번째는 받은 그대로 정확히 반환된 어시스턴트 콘텐츠로, 사고 블록이 tool_use 블록과 함께 변경되지 않은 상태로 유지됩니다. 두 번째는 tool_result를 담은 사용자 메시지입니다.
각 샘플은 독립적으로 실행 가능한 스크립트입니다. 첫 번째 요청을 반복한 다음, 방금 받은 응답을 사용하여 즉시 후속 요청을 보냅니다.
client = anthropic.Anthropic()
weather_tool = {
"name": "get_weather",
"description": "Get current weather for a location",
"input_schema": {
"type": "object",
"properties": {"location": {"type": "string", "description": "City name"}},
"required": ["location"],
},
}
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# 도구 결과에 사용할 ID를 얻기 위해 tool_use 블록을 추출합니다
tool_use_block = next(block for block in response.content if block.type == "tool_use")
# 실제 날씨 API를 호출합니다. 여기에 실제 API 호출 코드가 들어갑니다
# 이것이 반환된 결과라고 가정해 봅시다
weather_data = {"temperature": 88}
# 두 번째 요청 - 어시스턴트 턴과 도구 결과를 포함합니다
continuation = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
thinking={"type": "adaptive"},
tools=[weather_tool],
messages=[
{"role": "user", "content": "What's the weather in Paris?"},
# 어시스턴트 콘텐츠를 받은 그대로 다시 전달합니다. thinking
# 블록이 있는 경우 반드시 tool_use 블록과 함께 포함되어야 합니다.
{"role": "assistant", "content": response.content},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": tool_use_block.id,
"content": f"Current temperature: {weather_data['temperature']}°F",
}
],
},
],
)
print(continuation)최종 응답 읽기
Claude가 텍스트로 턴을 완료하는 것을 볼 수 있습니다. 적응형 모드에서는 인터리브 사고가 자동이므로, 이어지는 응답도 최종 텍스트 앞에 새로운 사고 블록으로 시작할 수 있습니다:
{
"content": [
{
"type": "text",
"text": "Currently in Paris, the temperature is 88°F (31°C)"
}
]
}인터리브 사고를 사용하면 Claude가 도구 호출 사이에 사고하여 각 도구 결과에 대해 행동하기 전에 추론할 수 있습니다. 개념과 모델별 지원 여부는 사고 페이지의 인터리브 사고에서 다룹니다. 인터리빙은 사고 블록이 나타나는 위치를 변경할 뿐, 도구 호출이 연쇄될 수 있는지 여부를 변경하지는 않습니다. 다음 비교는 두 개의 도구를 사용하는 워크플로우에서 인터리브 사고가 무엇을 변화시키는지 보여줍니다:
개요: 사고를 활성화하고, 사고 출력을 읽고, 도구 사용, 캐싱, 스트리밍에 대한 전체 규칙을 검토하세요.
노력 수준과 프롬프트 기반 안내를 통해 Claude가 얼마나 자주, 얼마나 깊이 사고하는지 조정하세요.
이전 모델의 수동 사고 예산: budget_tokens 메커니즘과 적응형으로의 마이그레이션.
Was this page helpful?