복잡한 도구와 모호한 쿼리의 경우 최신 Claude Sonnet (4.5) 또는 Claude Opus (4.1) 모델을 사용하는 것을 권장합니다. 이들은 여러 도구를 더 잘 처리하고 필요할 때 명확히 해달라고 요청합니다.
간단한 도구의 경우 Claude Haiku 모델을 사용하되, 누락된 매개변수를 추론할 수 있다는 점에 유의하세요.
Claude를 도구 사용 및 확장된 사고와 함께 사용하는 경우, 자세한 내용은 여기의 가이드를 참조하세요.
클라이언트 도구(Anthropic 정의 도구 및 사용자 정의 도구 모두)는 API 요청의 tools 최상위 매개변수에서 지정됩니다. 각 도구 정의에는 다음이 포함됩니다:
| 매개변수 | 설명 |
|---|---|
name | 도구의 이름입니다. 정규식 ^[a-zA-Z0-9_-]{1,64}$와 일치해야 합니다. |
description | 도구가 무엇을 하는지, 언제 사용해야 하는지, 어떻게 작동하는지에 대한 자세한 일반 텍스트 설명입니다. |
input_schema | 도구의 예상 매개변수를 정의하는 JSON Schema 객체입니다. |
input_examples | (선택사항, 베타) Claude가 도구를 사용하는 방법을 이해하도록 돕기 위한 예제 입력 객체의 배열입니다. 도구 사용 예제 제공을 참조하세요. |
tools 매개변수를 사용하여 Claude API를 호출하면, 도구 정의, 도구 구성 및 사용자가 지정한 시스템 프롬프트에서 특수 시스템 프롬프트를 구성합니다. 구성된 프롬프트는 모델에 지정된 도구를 사용하도록 지시하고 도구가 제대로 작동하기 위한 필요한 컨텍스트를 제공하도록 설계되었습니다:
In this environment you have access to a set of tools you can use to answer the user's question.
{{ FORMATTING INSTRUCTIONS }}
String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.
Here are the functions available in JSONSchema format:
{{ TOOL DEFINITIONS IN JSON SCHEMA }}
{{ USER SYSTEM PROMPT }}
{{ TOOL CONFIGURATION }}Claude를 도구와 함께 사용할 때 최고의 성능을 얻으려면 다음 지침을 따르세요:
input_examples 사용을 고려하세요. 명확한 설명이 가장 중요하지만, 복잡한 입력, 중첩된 객체 또는 형식에 민감한 매개변수가 있는 도구의 경우, input_examples 필드(베타)를 사용하여 스키마 검증된 예제를 제공할 수 있습니다. 자세한 내용은 도구 사용 예제 제공을 참조하세요.좋은 설명은 도구가 무엇을 하는지, 언제 사용하는지, 어떤 데이터를 반환하는지, ticker 매개변수가 무엇을 의미하는지 명확하게 설명합니다. 좋지 않은 설명은 너무 간단하고 Claude에게 도구의 동작과 사용법에 대해 많은 미해결 질문을 남깁니다.
Claude가 도구를 더 효과적으로 사용하는 방법을 이해하도록 돕기 위해 유효한 도구 입력의 구체적인 예제를 제공할 수 있습니다. 이는 중첩된 객체, 선택적 매개변수 또는 형식에 민감한 입력이 있는 복잡한 도구에 특히 유용합니다.
도구 사용 예제는 베타 기능입니다. 제공자에 대한 적절한 베타 헤더를 포함하세요:
| 제공자 | 베타 헤더 | 지원되는 모델 |
|---|---|---|
| Claude API, Microsoft Foundry | advanced-tool-use-2025-11-20 | 모든 모델 |
| Vertex AI, Amazon Bedrock | tool-examples-2025-10-29 | Claude Opus 4.5만 |
도구 정의에 선택적 input_examples 필드를 추가하고 예제 입력 객체의 배열을 포함합니다. 각 예제는 도구의 input_schema에 따라 유효해야 합니다:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5-20250929",
max_tokens=1024,
betas=["advanced-tool-use-2025-11-20"],
tools=[
{
"name": "get_weather",
"description": "Get the current weather in a given location",
"input_schema": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The unit of temperature"
}
},
"required": ["location"]
},
"input_examples": [
{
"location": "San Francisco, CA",
"unit": "fahrenheit"
},
{
"location": "Tokyo, Japan",
"unit": "celsius"
},
{
"location": "New York, NY" # 'unit' is optional
}
]
}
],
messages=[
{"role": "user", "content": "What's the weather like in San Francisco?"}
]
)예제는 도구 스키마와 함께 프롬프트에 포함되어 Claude에게 잘 형성된 도구 호출의 구체적인 패턴을 보여줍니다. 이는 Claude가 선택적 매개변수를 포함할 시기, 어떤 형식을 사용할지, 복잡한 입력을 어떻게 구조화할지 이해하는 데 도움이 됩니다.
input_schema에 따라 유효해야 합니다. 유효하지 않은 예제는 400 오류를 반환합니다도구 실행기는 Claude를 사용하여 도구를 실행하기 위한 기본 솔루션을 제공합니다. 도구 호출, 도구 결과 및 대화 관리를 수동으로 처리하는 대신, 도구 실행기는 자동으로:
대부분의 도구 사용 구현에 도구 실행기를 사용하는 것을 권장합니다.
도구 실행기는 현재 베타 상태이며 Python, TypeScript 및 Ruby SDK에서 사용 가능합니다.
압축을 통한 자동 컨텍스트 관리
도구 실행기는 자동 압축을 지원하며, 토큰 사용량이 임계값을 초과할 때 요약을 생성합니다. 이를 통해 장기 실행 에이전트 작업이 컨텍스트 윈도우 제한을 초과하여 계속될 수 있습니다.
SDK 도구 실행기는 베타 상태입니다. 이 문서의 나머지 부분은 수동 도구 구현을 다룹니다.
경우에 따라 Claude가 도구를 사용하지 않고 답변을 제공할 수 있다고 생각하더라도 사용자의 질문에 답하기 위해 특정 도구를 사용하도록 Claude를 강제하고 싶을 수 있습니다. 다음과 같이 tool_choice 필드에서 도구를 지정하여 이를 수행할 수 있습니다:
tool_choice = {"type": "tool", "name": "get_weather"}tool_choice 매개변수를 사용할 때, 네 가지 가능한 옵션이 있습니다:
auto는 Claude가 제공된 도구를 호출할지 여부를 결정하도록 합니다. 이는 tools가 제공될 때의 기본값입니다.any는 Claude가 제공된 도구 중 하나를 사용해야 하지만 특정 도구를 강제하지 않도록 합니다.tool은 Claude가 항상 특정 도구를 사용하도록 강제합니다.none은 Claude가 도구를 사용하지 못하도록 합니다. 이는 tools가 제공되지 않을 때의 기본값입니다.프롬프트 캐싱을 사용할 때, tool_choice 매개변수의 변경은 캐시된 메시지 블록을 무효화합니다. 도구 정의 및 시스템 프롬프트는 캐시된 상태로 유지되지만 메시지 콘텐츠는 다시 처리되어야 합니다.
이 다이어그램은 각 옵션이 어떻게 작동하는지 보여줍니다:

tool_choice가 any 또는 tool일 때, 도구를 강제로 사용하도록 어시스턴트 메시지를 미리 채웁니다. 이는 명시적으로 요청하더라도 모델이 tool_use 콘텐츠 블록 이전에 자연어 응답이나 설명을 내보내지 않음을 의미합니다.
도구 사용과 함께 확장된 사고를 사용할 때, tool_choice: {"type": "any"} 및 tool_choice: {"type": "tool", "name": "..."} 는 지원되지 않으며 오류가 발생합니다. tool_choice: {"type": "auto"} (기본값) 및 tool_choice: {"type": "none"} 만 확장된 사고와 호환됩니다.
우리의 테스트에 따르면 이것이 성능을 감소시키지 않아야 합니다. 모델이 특정 도구를 사용하도록 요청하면서도 자연어 컨텍스트나 설명을 제공하기를 원한다면, tool_choice에 {"type": "auto"} (기본값)를 사용하고 user 메시지에 명시적 지침을 추가할 수 있습니다. 예를 들어: What's the weather like in London? Use the get_weather tool in your response.
엄격한 도구를 사용한 보장된 도구 호출
tool_choice: {"type": "any"}를 엄격한 도구 사용과 결합하여 도구 중 하나가 호출될 것을 보장하고 도구 입력이 스키마를 엄격하게 따르도록 합니다. 도구 정의에서 strict: true를 설정하여 스키마 검증을 활성화합니다.
도구가 반드시 클라이언트 함수일 필요는 없습니다. 모델이 제공된 스키마를 따르는 JSON 출력을 반환하기를 원할 때마다 도구를 사용할 수 있습니다. 예를 들어, 특정 스키마를 가진 record_summary 도구를 사용할 수 있습니다. 완전한 작동 예제는 Claude와 함께 도구 사용을 참조하세요.
도구를 사용할 때, Claude는 종종 자신이 하고 있는 일에 대해 설명하거나 도구를 호출하기 전에 사용자에게 자연스럽게 응답합니다.
예를 들어, "지금 샌프란시스코의 날씨는 어떻고 거기 시간은 몇 시인가?"라는 프롬프트가 주어지면, Claude는 다음과 같이 응답할 수 있습니다:
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "I'll help you check the current weather and time in San Francisco."
},
{
"type": "tool_use",
"id": "toolu_01A09q90qw90lq917835lq9",
"name": "get_weather",
"input": {"location": "San Francisco, CA"}
}
]
}이러한 자연스러운 응답 스타일은 사용자가 Claude가 무엇을 하고 있는지 이해하도록 도와주고 더 대화체의 상호작용을 만듭니다. 시스템 프롬프트와 프롬프트에 <examples>를 제공하여 이러한 응답의 스타일과 내용을 안내할 수 있습니다.
Claude가 자신의 행동을 설명할 때 다양한 표현과 접근 방식을 사용할 수 있다는 점을 주목하는 것이 중요합니다. 코드는 이러한 응답을 다른 어시스턴트 생성 텍스트처럼 취급해야 하며, 특정 형식 규칙에 의존해서는 안 됩니다.
기본적으로 Claude는 사용자 쿼리에 답하기 위해 여러 도구를 사용할 수 있습니다. 다음을 통해 이 동작을 비활성화할 수 있습니다:
auto일 때 disable_parallel_tool_use=true를 설정하면, Claude가 최대 하나의 도구를 사용하도록 보장합니다any 또는 tool일 때 disable_parallel_tool_use=true를 설정하면, Claude가 정확히 하나의 도구를 사용하도록 보장합니다Claude 4 모델은 기본적으로 우수한 병렬 도구 사용 기능을 가지고 있지만, 대상 프롬프팅을 통해 모든 모델에서 병렬 도구 실행의 가능성을 높일 수 있습니다:
Claude Sonnet 3.7과의 병렬 도구 사용
Claude Sonnet 3.7은 disable_parallel_tool_use를 설정하지 않았더라도 응답에서 병렬 도구 호출을 할 가능성이 낮을 수 있습니다. Claude 4 모델로 업그레이드하는 것을 권장합니다. Claude 4 모델은 기본 제공 토큰 효율적 도구 사용과 개선된 병렬 도구 호출을 가지고 있습니다.
여전히 Claude Sonnet 3.7을 사용 중이라면, Claude가 병렬 도구를 사용하도록 장려하는 데 도움이 되는 token-efficient-tools-2025-02-19 베타 헤더를 활성화할 수 있습니다. 다른 도구에 대한 호출을 동시에 래핑할 수 있는 메타 도구로 작동할 수 있는 "배치 도구"를 도입할 수도 있습니다.
이 해결 방법을 사용하는 방법에 대해서는 우리 쿡북의 이 예제를 참조하세요.
Tool runner로 더 간단하게: 이 섹션에서 설명하는 수동 도구 처리는 tool runner에 의해 자동으로 관리됩니다. 도구 실행에 대한 사용자 정의 제어가 필요할 때 이 섹션을 사용하세요.
Claude의 응답은 클라이언트 도구를 사용하는지 서버 도구를 사용하는지에 따라 다릅니다.
응답은 tool_use의 stop_reason과 다음을 포함하는 하나 이상의 tool_use 콘텐츠 블록을 가집니다:
id: 이 특정 도구 사용 블록의 고유 식별자입니다. 나중에 도구 결과와 일치시키는 데 사용됩니다.name: 사용 중인 도구의 이름입니다.input: 도구에 전달되는 입력을 포함하는 객체로, 도구의 input_schema를 준수합니다.클라이언트 도구에 대한 도구 사용 응답을 받으면 다음을 수행해야 합니다:
tool_use 블록에서 name, id, input을 추출합니다.input을 전달합니다.role이 user인 새 메시지를 보내고 tool_result 유형을 포함하는 content 블록과 다음 정보를 포함하여 대화를 계속합니다:
tool_use_id: 이것이 결과인 도구 사용 요청의 id입니다.content: 도구의 결과로, 문자열 (예: "content": "15 degrees"), 중첩된 콘텐츠 블록의 목록 (예: "content": [{"type": "text", "text": "15 degrees"}]), 또는 문서 블록의 목록 (예: "content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15 degrees"}])입니다. 이러한 콘텐츠 블록은 text, image, 또는 document 유형을 사용할 수 있습니다.is_error (선택 사항): 도구 실행으로 인해 오류가 발생한 경우 true로 설정합니다.중요한 형식 요구 사항:
예를 들어, 이것은 400 오류를 발생시킵니다:
{"role": "user", "content": [
{"type": "text", "text": "Here are the results:"}, // ❌ Text before tool_result
{"type": "tool_result", "tool_use_id": "toolu_01", ...}
]}이것이 올바릅니다:
{"role": "user", "content": [
{"type": "tool_result", "tool_use_id": "toolu_01", ...},
{"type": "text", "text": "What should I do next?"} // ✅ Text after tool_result
]}"tool_use ids were found without tool_result blocks immediately after"와 같은 오류를 받으면 도구 결과가 올바르게 포맷되었는지 확인하세요.
도구 결과를 받은 후, Claude는 해당 정보를 사용하여 원래 사용자 프롬프트에 대한 응답 생성을 계속합니다.
Claude는 도구를 내부적으로 실행하고 추가 사용자 상호작용을 요구하지 않고 결과를 응답에 직접 통합합니다.
다른 API와의 차이점
도구 사용을 분리하거나 tool 또는 function과 같은 특수 역할을 사용하는 API와 달리, Claude API는 도구를 user 및 assistant 메시지 구조에 직접 통합합니다.
메시지는 text, image, tool_use, tool_result 블록의 배열을 포함합니다. user 메시지는 클라이언트 콘텐츠와 tool_result를 포함하고, assistant 메시지는 AI 생성 콘텐츠와 tool_use를 포함합니다.
max_tokens 중지 이유 처리Claude의 응답이 max_tokens 제한에 도달하여 잘린 경우, 잘린 응답에 불완전한 도구 사용 블록이 포함되어 있으면 더 높은 max_tokens 값으로 요청을 다시 시도하여 전체 도구 사용을 얻어야 합니다.
# Check if response was truncated during tool use
if response.stop_reason == "max_tokens":
# Check if the last content block is an incomplete tool_use
last_block = response.content[-1]
if last_block.type == "tool_use":
# Send the request with higher max_tokens
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096, # Increased limit
messages=messages,
tools=tools
)pause_turn 중지 이유 처리웹 검색과 같은 서버 도구를 사용할 때, API는 pause_turn 중지 이유를 반환할 수 있으며, 이는 API가 장시간 실행되는 턴을 일시 중지했음을 나타냅니다.
pause_turn 중지 이유를 처리하는 방법은 다음과 같습니다:
import anthropic
client = anthropic.Anthropic()
# Initial request with web search
response = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=[
{
"role": "user",
"content": "Search for comprehensive information about quantum computing breakthroughs in 2025"
}
],
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
# Check if the response has pause_turn stop reason
if response.stop_reason == "pause_turn":
# Continue the conversation with the paused content
messages = [
{"role": "user", "content": "Search for comprehensive information about quantum computing breakthroughs in 2025"},
{"role": "assistant", "content": response.content}
]
# Send the continuation request
continuation = client.messages.create(
model="claude-3-7-sonnet-latest",
max_tokens=1024,
messages=messages,
tools=[{
"type": "web_search_20250305",
"name": "web_search",
"max_uses": 10
}]
)
print(continuation)
else:
print(response)pause_turn을 처리할 때:
기본 제공 오류 처리: Tool runner는 대부분의 일반적인 시나리오에 대한 자동 오류 처리를 제공합니다. 이 섹션은 고급 사용 사례에 대한 수동 오류 처리를 다룹니다.
Claude와 함께 도구를 사용할 때 발생할 수 있는 몇 가지 다른 유형의 오류가 있습니다: