tools
최상위 매개변수에서 지정됩니다. 각 도구 정의에는 다음이 포함됩니다:
매개변수 | 설명 |
---|---|
name | 도구의 이름. ^[a-zA-Z0-9_-]{1,64}$ 정규식과 일치해야 합니다. |
description | 도구가 무엇을 하는지, 언제 사용해야 하는지, 어떻게 작동하는지에 대한 자세한 일반 텍스트 설명. |
input_schema | 도구에 대한 예상 매개변수를 정의하는 JSON Schema 객체. |
간단한 도구 정의 예시
get_weather
라는 이름의 도구는 필수 location
문자열과 “celsius” 또는 “fahrenheit” 중 하나여야 하는 선택적 unit
문자열이 포함된 입력 객체를 예상합니다.tools
매개변수와 함께 Anthropic API를 호출하면, 도구 정의, 도구 구성 및 사용자 지정 시스템 프롬프트에서 특별한 시스템 프롬프트를 구성합니다. 구성된 프롬프트는 모델이 지정된 도구를 사용하고 도구가 제대로 작동하는 데 필요한 컨텍스트를 제공하도록 지시하도록 설계되었습니다:
좋은 도구 설명의 예시
나쁜 도구 설명의 예시
ticker
매개변수가 무엇을 의미하는지 명확하게 설명합니다. 나쁜 설명은 너무 간단하여 Claude가 도구의 동작과 사용법에 대해 많은 의문을 갖게 합니다.
tool_choice
필드에서 도구를 지정하여 이를 수행할 수 있습니다:
auto
는 Claude가 제공된 도구를 호출할지 여부를 결정할 수 있게 합니다. 이는 tools
가 제공될 때의 기본값입니다.any
는 Claude가 제공된 도구 중 하나를 사용해야 한다고 알려주지만 특정 도구를 강제하지는 않습니다.tool
을 사용하면 Claude가 항상 특정 도구를 사용하도록 강제할 수 있습니다.none
은 Claude가 도구를 사용하지 못하게 합니다. 이는 tools
가 제공되지 않을 때의 기본값입니다.tool_choice
매개변수의 변경은 캐시된 메시지 블록을 무효화합니다. 도구 정의와 시스템 프롬프트는 캐시된 상태로 유지되지만 메시지 내용은 다시 처리되어야 합니다.tool_choice
가 any
또는 tool
일 때 도구를 강제로 사용하도록 어시스턴트 메시지를 미리 채웁니다. 이는 명시적으로 요청하더라도 모델이 tool_use
콘텐츠 블록 이전에 사고의 연쇄 text
콘텐츠 블록을 출력하지 않음을 의미합니다.
tool_choice: {"type": "any"}
와 tool_choice: {"type": "tool", "name": "..."}
는 지원되지 않으며 오류가 발생합니다. 확장된 사고와 호환되는 것은 tool_choice: {"type": "auto"}
(기본값)와 tool_choice: {"type": "none"}
뿐입니다.tool_choice
에 {"type": "auto"}
(기본값)를 사용하고 user
메시지에 명시적인 지시를 추가할 수 있습니다. 예: 런던의 날씨는 어떤가요? 응답에서 get_weather 도구를 사용하세요.
record_summary
도구를 사용할 수 있습니다. 완전한 작업 예시는 Claude와 도구 사용을 참조하세요.
tool_choice
가 auto
로 설정된 경우 이를 수행합니다(이는 기본값입니다. 도구 사용 강제 참조). Sonnet과 Haiku는 프롬프트를 통해 이를 수행하도록 할 수 있습니다.
예를 들어, “지금 샌프란시스코의 날씨는 어떻고, 그곳의 시간은 몇 시인가요?”라는 프롬프트가 주어지면 Claude는 다음과 같이 응답할 수 있습니다:
auto
일 때 disable_parallel_tool_use=true
를 설정하면 Claude가 최대 하나의 도구를 사용하도록 보장합니다any
또는 tool
일 때 disable_parallel_tool_use=true
를 설정하면 Claude가 정확히 하나의 도구를 사용하도록 보장합니다완전한 병렬 도구 사용 예시
병렬 도구를 위한 완전한 테스트 스크립트
병렬 도구 사용을 위한 시스템 프롬프트
사용자 메시지 프롬프팅
disable_parallel_tool_use
를 설정하지 않았더라도 응답에서 병렬 도구 호출을 할 가능성이 낮을 수 있습니다. 이를 해결하려면 Claude가 병렬 도구를 사용하도록 장려하는 데 도움이 되는 토큰 효율적인 도구 사용을 활성화하는 것을 권장합니다. 이 베타 기능은 또한 지연 시간을 줄이고 출력 토큰을 평균 14% 절약합니다.토큰 효율적인 도구 사용 베타에 참여하지 않으려면 다른 도구에 대한 호출을 동시에 래핑하는 메타 도구 역할을 할 수 있는 “배치 도구”를 도입할 수도 있습니다. 이 도구가 있으면 모델이 이를 사용하여 여러 도구를 병렬로 동시에 호출한다는 것을 발견했습니다.이 해결 방법을 사용하는 방법은 쿡북의 이 예시를 참조하세요.tool_use
의 stop_reason
과 다음을 포함하는 하나 이상의 tool_use
콘텐츠 블록을 가집니다:
id
: 이 특정 도구 사용 블록의 고유 식별자. 나중에 도구 결과를 일치시키는 데 사용됩니다.name
: 사용되는 도구의 이름.input
: 도구의 input_schema
에 맞는 도구에 전달되는 입력을 포함하는 객체.`tool_use` 콘텐츠 블록이 있는 API 응답 예시
tool_use
블록에서 name
, id
, input
을 추출합니다.input
을 전달합니다.user
역할과 tool_result
유형을 포함하는 콘텐츠 블록 및 다음 정보가 포함된 새 메시지를 보내 대화를 계속합니다:
tool_use_id
: 이것이 결과인 도구 사용 요청의 id
.content
: 문자열로서의 도구 결과(예: "content": "15도"
), 중첩된 콘텐츠 블록 목록(예: "content": [{"type": "text", "text": "15도"}]
), 또는 문서 블록 목록(예: "content": ["type": "document", "source": {"type": "text", "media_type": "text/plain", "data": "15도"}]
). 이러한 콘텐츠 블록은 text
, image
또는 document
유형을 사용할 수 있습니다.is_error
(선택사항): 도구 실행이 오류를 발생시킨 경우 true
로 설정합니다.성공적인 도구 결과 예시
이미지가 있는 도구 결과 예시
빈 도구 결과 예시
문서가 있는 도구 결과 예시
tool
또는 function
과 같은 특수 역할을 사용하는 API와 달리 Anthropic의 API는 도구를 user
및 assistant
메시지 구조에 직접 통합합니다.메시지에는 text
, image
, tool_use
, tool_result
블록의 배열이 포함됩니다. user
메시지에는 클라이언트 콘텐츠와 tool_result
가 포함되고, assistant
메시지에는 AI 생성 콘텐츠와 tool_use
가 포함됩니다.max_tokens
중지 이유 처리max_tokens
제한에 도달하여 잘린 경우, 잘린 응답에 불완전한 도구 사용 블록이 포함되어 있으면 전체 도구 사용을 얻기 위해 더 높은 max_tokens
값으로 요청을 다시 시도해야 합니다.
pause_turn
중지 이유 처리pause_turn
중지 이유를 반환할 수 있으며, 이는 API가 장기 실행 턴을 일시 중지했음을 나타냅니다.
다음은 pause_turn
중지 이유를 처리하는 방법입니다:
pause_turn
을 처리할 때:
도구 실행 오류
"is_error": true
와 함께 content
에 오류 메시지를 반환할 수 있습니다:잘못된 도구 이름
description
값으로 요청을 다시 시도하는 것입니다.그러나 오류를 나타내는 tool_result
로 대화를 계속 진행할 수도 있으며, Claude는 누락된 정보를 채워서 도구를 다시 사용하려고 시도합니다:<search_quality_reflection> 태그
서버 도구 오류
is_error
결과를 처리할 필요가 없습니다.웹 검색의 경우 가능한 오류 코드는 다음과 같습니다:too_many_requests
: 속도 제한 초과invalid_input
: 잘못된 검색 쿼리 매개변수max_uses_exceeded
: 최대 웹 검색 도구 사용 초과query_too_long
: 쿼리가 최대 길이 초과unavailable
: 내부 오류 발생병렬 도구 호출이 작동하지 않음