도구 사용 구현 방법
모델 선택하기
일반적으로 복잡한 도구와 모호한 쿼리에는 Claude Opus 4, Claude Sonnet 4, Claude Sonnet 3.7, Claude Sonnet 3.5 또는 Claude Opus 3를 사용하세요; 이들은 여러 도구를 더 잘 처리하고 필요할 때 명확한 설명을 요청합니다.
간단한 도구에는 Claude Haiku 3.5 또는 Claude Haiku 3를 사용하세요. 단, 이들은 누락된 매개변수를 추론할 수 있습니다.
도구 사용과 확장된 사고 과정을 Claude Sonnet 3.7과 함께 사용하는 경우, 여기에서 더 많은 정보를 참조하세요.
클라이언트 도구 지정하기
클라이언트 도구(Anthropic이 정의한 것과 사용자가 정의한 것 모두)는 API 요청의 최상위 매개변수인 tools
에 지정됩니다. 각 도구 정의에는 다음이 포함됩니다:
매개변수 | 설명 |
---|---|
name | 도구의 이름. 정규식 ^[a-zA-Z0-9_-]{1,64}$ 와 일치해야 합니다. |
description | 도구가 수행하는 작업, 사용 시기 및 동작 방식에 대한 자세한 일반 텍스트 설명. |
input_schema | 도구에 필요한 매개변수를 정의하는 JSON Schema 객체. |
도구 사용 시스템 프롬프트
Anthropic API를 tools
매개변수와 함께 호출하면, 도구 정의, 도구 구성 및 사용자가 지정한 시스템 프롬프트로부터 특별한 시스템 프롬프트를 구성합니다. 구성된 프롬프트는 모델에게 지정된 도구를 사용하도록 지시하고 도구가 제대로 작동하는 데 필요한 컨텍스트를 제공하도록 설계되었습니다:
도구 정의 모범 사례
도구를 사용할 때 Claude에서 최상의 성능을 얻으려면 다음 지침을 따르세요:
- 매우 상세한 설명을 제공하세요. 이것이 도구 성능에서 가장 중요한 요소입니다. 설명에는 다음과 같은 도구에 대한 모든 세부 정보가 포함되어야 합니다:
- 도구가 하는 일
- 언제 사용해야 하는지(그리고 언제 사용하지 말아야 하는지)
- 각 매개변수의 의미와 도구의 동작에 미치는 영향
- 도구 이름이 명확하지 않은 경우 도구가 반환하지 않는 정보와 같은 중요한 주의사항이나 제한사항. Claude에게 도구에 대한 더 많은 컨텍스트를 제공할수록 언제 어떻게 사용할지 더 잘 결정할 수 있습니다. 도구 설명당 최소 3-4문장을 목표로 하고, 도구가 복잡한 경우 더 많이 작성하세요.
- 예시보다 설명을 우선시하세요. 도구 설명이나 함께 제공되는 프롬프트에 도구 사용 방법에 대한 예시를 포함할 수 있지만, 이는 도구의 목적과 매개변수에 대한 명확하고 포괄적인 설명보다 덜 중요합니다. 설명을 완전히 작성한 후에만 예시를 추가하세요.
좋은 설명은 도구가 하는 일, 언제 사용해야 하는지, 어떤 데이터를 반환하는지, 그리고 ticker
매개변수의 의미를 명확하게 설명합니다. 좋지 않은 설명은 너무 간략하여 Claude에게 도구의 동작과 사용법에 대한 많은 질문을 남깁니다.
Claude의 출력 제어하기
도구 사용 강제하기
경우에 따라 Claude가 도구 없이도 답변을 제공할 수 있다고 생각하더라도 사용자의 질문에 답하기 위해 특정 도구를 사용하도록 강제하고 싶을 수 있습니다. 다음과 같이 tool_choice
필드에 도구를 지정하여 이를 수행할 수 있습니다:
tool_choice 매개변수를 사용할 때 네 가지 옵션이 있습니다:
auto
는 Claude가 제공된 도구를 호출할지 여부를 결정하도록 합니다. 이는tools
가 제공될 때의 기본값입니다.any
는 Claude에게 제공된 도구 중 하나를 반드시 사용해야 한다고 알려주지만, 특정 도구를 강제하지는 않습니다.tool
은 Claude가 항상 특정 도구를 사용하도록 강제할 수 있게 합니다.none
은 Claude가 도구를 사용하지 못하게 합니다. 이는tools
가 제공되지 않을 때의 기본값입니다.
이 다이어그램은 각 옵션이 어떻게 작동하는지 보여줍니다:
tool_choice
가 any
또는 tool
일 때, 도구를 사용하도록 강제하기 위해 assistant 메시지를 미리 채웁니다. 이는 모델이 명시적으로 요청받더라도 tool_use
콘텐츠 블록 전에 사고 과정(chain-of-thought) text
콘텐츠 블록을 생성하지 않는다는 것을 의미합니다.
우리의 테스트에 따르면 이것이 성능을 저하시키지 않아야 합니다. 특정 도구를 사용하도록 요청하면서도 사고 과정(특히 Opus에서)을 유지하고 싶다면, tool_choice
에 {"type": "auto"}
(기본값)를 사용하고 user
메시지에 명시적인 지시를 추가할 수 있습니다. 예: 런던의 날씨는 어떤가요? 응답에 get_weather 도구를 사용하세요.
JSON 출력
도구가 반드시 클라이언트 함수일 필요는 없습니다 — 제공된 스키마를 따르는 JSON 출력을 모델이 반환하기를 원할 때마다 도구를 사용할 수 있습니다. 예를 들어, 특정 스키마가 있는 record_summary
도구를 사용할 수 있습니다. 전체 작동 예시는 도구 사용 예시를 참조하세요.
사고 과정
도구를 사용할 때 Claude는 종종 “사고 과정”, 즉 문제를 분석하고 어떤 도구를 사용할지 결정하는 데 사용하는 단계별 추론을 보여줍니다. Claude Opus 3 모델은 tool_choice
가 auto
로 설정된 경우(이것이 기본값입니다. 도구 사용 강제하기 참조) 이를 수행하며, Sonnet과 Haiku는 프롬프트를 통해 이를 수행하도록 할 수 있습니다.
예를 들어, “지금 샌프란시스코의 날씨는 어떤가요, 그리고 거기는 몇 시인가요?”라는 프롬프트가 주어지면 Claude는 다음과 같이 응답할 수 있습니다:
이 사고 과정은 Claude의 추론 과정에 대한 통찰력을 제공하고 예상치 못한 동작을 디버깅하는 데 도움이 될 수 있습니다.
Claude Sonnet 3 모델에서는 사고 과정이 기본적으로 덜 일반적이지만, "답변하기 전에 태그 안에 단계별로 추론을 설명하세요."
와 같은 내용을 사용자 메시지나 시스템 프롬프트에 추가하여 Claude가 추론을 보여주도록 프롬프트할 수 있습니다.
<thinking>
태그가 사고 과정을 나타내는 일반적인 규칙이지만, 정확한 형식(예: 이 XML 태그의 이름)은 시간이 지남에 따라 변경될 수 있다는 점에 유의하는 것이 중요합니다. 코드는 사고 과정을 다른 어시스턴트 생성 텍스트처럼 취급해야 하며, <thinking>
태그의 존재나 특정 형식에 의존해서는 안 됩니다.
병렬 도구 사용
기본적으로 Claude는 사용자 쿼리에 답하기 위해 여러 도구를 사용할 수 있습니다. 다음과 같이 이 동작을 비활성화할 수 있습니다:
- tool_choice 유형이
auto
일 때disable_parallel_tool_use=true
로 설정하면 Claude가 최대 하나의 도구만 사용하도록 보장합니다 - tool_choice 유형이
any
또는tool
일 때disable_parallel_tool_use=true
로 설정하면 Claude가 정확히 하나의 도구만 사용하도록 보장합니다
Claude Sonnet 3.7에서의 병렬 도구 사용
Claude Sonnet 3.7은 disable_parallel_tool_use
를 설정하지 않았더라도 응답에서 병렬 도구 호출을 할 가능성이 낮을 수 있습니다. 이를 해결하기 위해 토큰 효율적 도구 사용을 활성화하는 것이 좋습니다. 이는 Claude가 병렬 도구를 사용하도록 장려하는 데 도움이 됩니다. 이 베타 기능은 또한 지연 시간을 줄이고 평균적으로 출력 토큰의 14%를 절약합니다.
토큰 효율적 도구 사용 베타에 참여하지 않으려면, 다른 도구를 동시에 호출하는 메타 도구 역할을 하는 “배치 도구”를 도입할 수도 있습니다. 이 도구가 있으면 모델이 이를 사용하여 여러 도구를 동시에 병렬로 호출할 것입니다.
이 해결 방법을 사용하는 방법에 대한 예시를 쿡북에서 확인하세요.
도구 사용 및 도구 결과 콘텐츠 블록 처리하기
Claude의 응답은 클라이언트 도구를 사용하는지 서버 도구를 사용하는지에 따라 달라집니다.
클라이언트 도구의 결과 처리하기
응답에는 stop_reason
이 tool_use
로 설정되고 다음을 포함하는 하나 이상의 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"}]
)으로 된 도구의 결과. 이러한 콘텐츠 블록은text
또는image
유형을 사용할 수 있습니다.is_error
(선택 사항): 도구 실행 결과 오류가 발생한 경우true
로 설정합니다.
도구 결과를 받은 후, Claude는 해당 정보를 사용하여 원래 사용자 프롬프트에 대한 응답을 계속 생성합니다.
서버 도구의 결과 처리하기
Claude는 도구를 내부적으로 실행하고 추가적인 사용자 상호 작용 없이 결과를 직접 응답에 통합합니다.
다른 API와의 차이점
도구 사용을 분리하거나 tool
또는 function
과 같은 특별한 역할을 사용하는 다른 API와 달리, Anthropic의 API는 도구를 user
및 assistant
메시지 구조에 직접 통합합니다.
메시지에는 text
, image
, tool_use
및 tool_result
블록의 배열이 포함됩니다. user
메시지에는 클라이언트 콘텐츠와 tool_result
가 포함되고, assistant
메시지에는 AI가 생성한 콘텐츠와 tool_use
가 포함됩니다.
pause_turn
중지 이유 처리하기
웹 검색과 같은 서버 도구를 사용할 때, API는 API가 장기 실행 턴을 일시 중지했음을 나타내는 pause_turn
중지 이유를 반환할 수 있습니다.
다음은 pause_turn
중지 이유를 처리하는 방법입니다:
pause_turn
을 처리할 때:
- 대화 계속하기: Claude가 턴을 계속할 수 있도록 일시 중지된 응답을 후속 요청에 그대로 전달합니다
- 필요한 경우 수정: 대화를 중단하거나 방향을 바꾸고 싶다면 계속하기 전에 선택적으로 콘텐츠를 수정할 수 있습니다
- 도구 상태 유지: 기능을 유지하기 위해 계속 요청에 동일한 도구를 포함합니다
오류 해결하기
Claude와 함께 도구를 사용할 때 발생할 수 있는 몇 가지 유형의 오류가 있습니다: