Claude Platform Docs
Messages도구

엄격한 도구 사용

문법 제약 샘플링을 통해 Claude의 도구 입력에 JSON Schema 준수를 강제합니다.

도구 정의에 strict: true를 설정하면 모델의 토큰 샘플링을 스키마에 유효한 출력으로 제한하여("grammar-constrained sampling"(문법 제약 샘플링)이라고 하는 기법) Claude의 도구 입력이 JSON Schema와 일치하도록 보장합니다. 이 페이지에서는 엄격 모드가 에이전트에 중요한 이유, 활성화 방법, 일반적인 사용 사례를 다룹니다. 지원되는 JSON Schema 하위 집합에 대해서는 JSON Schema 제한 사항을 참조하세요. 비엄격 스키마 지침은 도구 정의를 참조하세요.

"Strict tool use"(엄격한 도구 사용)는 도구 매개변수를 검증하여 Claude가 올바른 타입의 인수로 함수를 호출하도록 보장합니다. 다음이 필요할 때 엄격한 도구 사용을 사용하세요:

  • 도구 매개변수 검증
  • 에이전트 워크플로 구축
  • 타입 안전 함수 호출 보장
  • 중첩된 속성이 있는 복잡한 도구 처리

엄격한 도구 사용이 에이전트에 중요한 이유

신뢰할 수 있는 에이전트 시스템을 구축하려면 스키마 준수가 보장되어야 합니다. 엄격 모드가 없으면 Claude가 호환되지 않는 타입(2 대신 "2")을 반환하거나 필수 필드를 누락하여 함수가 중단되고 런타임 오류가 발생할 수 있습니다.

엄격한 도구 사용은 타입 안전 매개변수를 보장합니다:

  • 함수가 매번 올바른 타입의 인수를 받습니다
  • 도구 호출을 검증하고 재시도할 필요가 없습니다
  • 대규모로 일관되게 작동하는 프로덕션 준비 에이전트

예를 들어, 예약 시스템에 passengers: int가 필요하다고 가정해 보겠습니다. 엄격 모드가 없으면 Claude가 passengers: "two" 또는 passengers: "2"를 제공할 수 있습니다. strict: true를 사용하면 응답에 항상 passengers: 2가 포함됩니다.

빠른 시작

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
    tools=[
        {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "strict": True,  # Enable strict mode
            "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, either 'celsius' or 'fahrenheit'",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
        }
    ],
)
print(response.content)

응답 형식: response.content[x].input에 검증된 입력이 포함된 도구 사용 블록

Output
{
  "type": "tool_use",
  "name": "get_weather",
  "input": {
    "location": "San Francisco, CA"
  }
}

보장 사항:

  • 도구 input이 input_schema를 엄격하게 따릅니다
  • 도구 name이 항상 유효합니다(제공된 도구 또는 서버 도구에서)

작동 방식

  1. 도구 스키마 정의

    도구의 input_schema에 대한 JSON 스키마를 생성합니다. 스키마는 일부 제한 사항이 있는 표준 JSON Schema 형식을 사용합니다(JSON Schema 제한 사항 참조).