Loading...
  • 빌드
  • 관리
  • 모델 및 가격
  • 클라이언트 SDK
  • API 참조
Search...
⌘K
Log in
도구 호출 처리
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
빌드/도구

도구 호출 처리

tool_use 블록을 파싱하고, tool_result 응답을 포맷하며, is_error로 오류를 처리합니다.

이 페이지는 도구 호출 생명주기를 다룹니다: Claude의 응답에서 tool_use 블록 읽기, 응답에서 tool_result 블록 포맷하기, 오류 신호 보내기. 이를 자동으로 처리하는 SDK 추상화는 Tool Runner를 참조하세요.

Tool Runner로 더 간단하게: 이 페이지에서 설명하는 수동 도구 처리는 Tool Runner에 의해 자동으로 관리됩니다. 도구 실행에 대한 사용자 정의 제어가 필요할 때 이 페이지를 사용하세요.

Claude의 응답은 클라이언트 도구를 사용하는지 서버 도구를 사용하는지에 따라 다릅니다.

클라이언트 도구의 결과 처리

응답은 tool_use의 stop_reason과 다음을 포함하는 하나 이상의 tool_use 콘텐츠 블록을 가집니다:

  • id: 이 특정 도구 사용 블록의 고유 식별자입니다. 나중에 도구 결과를 일치시키는 데 사용됩니다.
  • name: 사용 중인 도구의 이름입니다.
  • input: 도구에 전달되는 입력을 포함하는 객체로, 도구의 input_schema를 준수합니다.

클라이언트 도구에 대한 도구 사용 응답을 받으면 다음을 수행해야 합니다:

  1. tool_use 블록에서 name, id, input을 추출합니다.
  2. 해당 도구 이름에 해당하는 코드베이스에서 실제 도구를 실행하고, 도구 input을 전달합니다.
  3. 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로 설정합니다.

중요한 포맷 요구사항:

  • 도구 결과 블록은 메시지 기록에서 해당 도구 사용 블록 바로 뒤에 와야 합니다. 어시스턴트의 도구 사용 메시지와 사용자의 도구 결과 메시지 사이에 메시지를 포함할 수 없습니다.
  • 도구 결과를 포함하는 사용자 메시지에서 tool_result 블록은 콘텐츠 배열의 FIRST에 와야 합니다. 모든 텍스트는 모든 도구 결과 AFTER에 와야 합니다.

예를 들어, 이것은 400 오류를 발생시킵니다:

{
  "role": "user",
  "content": [
    { "type": "text", "text": "Here are the results:" }, // ❌ 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?" } // ✅ 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를 포함합니다.

is_error로 오류 처리

Claude와 함께 도구를 사용할 때 발생할 수 있는 몇 가지 다른 유형의 오류가 있습니다:

다음 단계

  • 한 번에 여러 도구를 실행하려면 Parallel tool use를 참조하세요.
  • 이 루프를 자동화하는 SDK 추상화는 Tool Runner를 참조하세요.
  • 전체 도구 사용 워크플로우는 Define tools를 참조하세요.

Was this page helpful?

  • is_error로 오류 처리