Claude Platform Docs
  • Messages
  • Managed Agents
  • 관리자

Search...
⌘K
첫 단계
Claude 소개빠른 시작
Claude로 빌드하기
기능 개요Messages API 사용하기중지 사유 및 폴백거부 및 폴백폴백 크레딧
모델 기능
확장 사고적응형 사고Effort작업 예산 (베타)고속 모드 (리서치 프리뷰)구조화된 출력인용스트리밍 Messages배치 처리검색 결과스트리밍 거부다국어 지원임베딩
도구
개요도구 사용 작동 방식튜토리얼: 도구 사용 에이전트 빌드하기도구 정의도구 호출 처리병렬 도구 사용Tool Runner (SDK)엄격한 도구 사용서버 도구웹 검색 도구웹 가져오기 도구코드 실행 도구어드바이저 도구도구 검색 도구메모리 도구Bash 도구텍스트 편집기 도구컴퓨터 사용 도구문제 해결
도구 인프라
도구 레퍼런스도구 컨텍스트 관리도구 조합프롬프트 캐싱과 도구 사용프로그래밍 방식 도구 호출세분화된 도구 스트리밍
컨텍스트 관리
컨텍스트 윈도우압축컨텍스트 편집프롬프트 캐싱대화 중 시스템 메시지오케스트레이션 모드 빌드하기캐시 진단 (베타)토큰 카운팅
파일 작업
Files APIPDF 지원
스킬
개요빠른 시작모범 사례엔터프라이즈용 스킬API에서의 스킬
MCP
원격 MCP 서버MCP 커넥터
클라우드 플랫폼의 Claude
Amazon BedrockAmazon Bedrock (레거시)AWS의 Claude PlatformGoogle CloudMicrosoft Foundry

Log in
도구 호출 처리
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Claude Platform Docs

Solutions

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

Partners

  • Claude on AWS
  • Claude on Google Cloud

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
Messages/도구

도구 호출 처리하기

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. user의 role과 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 또는 search_result 타입을 사용할 수 있습니다.
    • is_error (선택 사항): 도구 실행이 오류로 끝난 경우 true로 설정합니다.


중요한 포맷 요구 사항:

  • 도구 결과 블록은 메시지 기록에서 해당 도구 사용 블록 바로 뒤에 와야 합니다. 어시스턴트의 도구 사용 메시지와 사용자의 도구 결과 메시지 사이에 어떤 메시지도 포함할 수 없습니다.
  • 도구 결과를 포함하는 사용자 메시지에서 tool_result 블록은 콘텐츠 배열에서 반드시 먼저 와야 합니다. 모든 텍스트는 모든 도구 결과 뒤에 와야 합니다.
  • 어시스턴트 턴에서 아직 결과 블록이 없는 서버 도구도 호출한 경우, 사용자 메시지는 tool_result 블록만 포함해야 합니다. 결과 뒤에 텍스트가 있으면 턴이 조기에 종료됩니다. Claude가 직접 호출한 서버 도구의 경우, 요청은 해결되지 않은 서버 도구를 명시하는 400 오류와 함께 실패합니다. 중지 이유 및 폴백을 참조하세요.

예를 들어, 다음은 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"와 같은 오류가 발생하면 도구 결과가 올바르게 포맷되었는지 확인하세요.



도구 결과는 종종 웹 페이지, 수신 이메일, 사용자 업로드, 타사 API 등 사용자가 제어할 수 없는 소스의 콘텐츠를 포함합니다. 해당 콘텐츠를 신뢰할 수 없는 것으로 취급하세요. 이에 영향을 미칠 수 있는 공격자는 Claude를 다른 방향으로 유도하려는 지시를 삽입할 수 있습니다(간접 프롬프트 인젝션). 신뢰할 수 없는 콘텐츠는 system 프롬프트나 일반 사용자 text 블록이 아닌 tool_result 블록 내부에 유지하고, 추가 강화 방법은 탈옥 및 프롬프트 인젝션 완화를 참조하세요.

도구 결과를 받은 후, Claude는 해당 정보를 사용하여 원래 사용자 프롬프트에 대한 응답을 계속 생성합니다.

서버 도구의 결과 처리하기

Claude는 도구를 내부적으로 실행하고 추가 사용자 상호작용 없이 결과를 응답에 직접 통합합니다.



응답에는 클라이언트 tool_use 블록과 아직 결과 블록이 없는 server_tool_use 블록이 모두 포함될 수 있습니다. 해당 서버 도구 호출은 아직 완료되지 않았으며, 결과 블록은 이후 응답에서 도착합니다. 클라이언트 도구에 대한 tool_result 블록만 포함하는 사용자 메시지로 회신하고 동일한 tools 배열을 유지하세요. Claude가 직접 호출한 서버 도구의 경우, API는 해당 요청에서 이를 실행하고 다음 응답은 그 결과 블록으로 시작합니다. 중지 이유 및 폴백을 참조하세요.



다른 API와의 차이점

도구 사용을 분리하거나 tool 또는 function과 같은 특수 역할을 사용하는 API와 달리, Claude API는 도구를 user 및 assistant 메시지 구조에 직접 통합합니다.

메시지는 text, image, tool_use, tool_result 블록의 배열을 포함합니다. user 메시지는 클라이언트 콘텐츠와 tool_result를 포함하고, assistant 메시지는 AI가 생성한 콘텐츠와 tool_use를 포함합니다.

is_error로 오류 처리하기

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

다음 단계

병렬 도구 사용

Claude가 단일 턴에서 여러 도구를 호출하는 응답을 처리합니다.


Tool Runner (SDK)

SDK가 tool_use 루프, 결과 포맷팅 및 재시도를 관리하도록 합니다.

도구 정의하기

Claude가 올바른 도구를 선택하도록 유도하는 스키마와 설명을 작성합니다.

Was this page helpful?

  • 클라이언트 도구의 결과 처리하기
  • 서버 도구의 결과 처리하기
  • is_error로 오류 처리하기
  • 다음 단계