Loading...
    • 개발자 가이드
    • API 레퍼런스
    • MCP
    • 리소스
    • 릴리스 노트
    Search...
    ⌘K
    시작하기
    Claude 소개빠른 시작
    모델 및 가격
    모델 개요모델 선택Claude 4.6의 새로운 기능마이그레이션 가이드모델 지원 중단가격
    Claude로 구축하기
    기능 개요Messages API 사용중지 사유 처리프롬프트 모범 사례
    모델 기능
    확장 사고적응형 사고노력도빠른 모드 (연구 프리뷰)구조화된 출력인용스트리밍 메시지배치 처리PDF 지원검색 결과다국어 지원임베딩비전
    도구
    개요도구 사용 구현 방법웹 검색 도구웹 페치 도구코드 실행 도구메모리 도구Bash 도구컴퓨터 사용 도구텍스트 편집기 도구
    도구 인프라
    도구 검색프로그래밍 방식 도구 호출세분화된 도구 스트리밍
    컨텍스트 관리
    컨텍스트 윈도우압축컨텍스트 편집프롬프트 캐싱토큰 카운팅
    파일 및 자산
    Files API
    Agent Skills
    개요빠른 시작모범 사례엔터프라이즈용 SkillsAPI에서 Skills 사용
    Agent SDK
    개요빠른 시작TypeScript SDKTypeScript V2 (프리뷰)Python SDK마이그레이션 가이드
    API에서 MCP 사용
    MCP 커넥터원격 MCP 서버
    서드파티 플랫폼의 Claude
    Amazon BedrockMicrosoft FoundryVertex AI
    프롬프트 엔지니어링
    개요프롬프트 생성기프롬프트 템플릿 사용프롬프트 개선기명확하고 직접적으로 작성하기예시 사용 (멀티샷 프롬프팅)Claude에게 생각하게 하기 (CoT)XML 태그 사용Claude에게 역할 부여 (시스템 프롬프트)복잡한 프롬프트 연결긴 컨텍스트 팁확장 사고 팁
    테스트 및 평가
    성공 기준 정의테스트 케이스 개발평가 도구 사용지연 시간 줄이기
    가드레일 강화
    환각 줄이기출력 일관성 높이기탈옥 방지스트리밍 거부프롬프트 유출 줄이기Claude 캐릭터 유지
    관리 및 모니터링
    Admin API 개요데이터 레지던시워크스페이스사용량 및 비용 APIClaude Code Analytics API제로 데이터 보존
    Console
    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
    • Catalog
    • 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
    • Catalog
    • 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
    모델 기능

    구조화된 출력

    에이전트 워크플로우에서 검증된 JSON 결과 얻기

    구조화된 출력은 Claude의 응답을 특정 스키마를 따르도록 제한하여, 다운스트림 처리를 위한 유효하고 파싱 가능한 출력을 보장합니다. 두 가지 상호 보완적인 기능을 사용할 수 있습니다:

    • JSON 출력 (output_config.format): Claude의 응답을 특정 JSON 형식으로 받기
    • 엄격한 도구 사용 (strict: true): 도구 이름과 입력에 대한 스키마 검증 보장

    output_format 매개변수가 output_config.format으로 이동되었습니다. 이전 output_format 매개변수는 일시적으로 계속 작동하지만 더 이상 사용되지 않으며 향후 API 버전에서 제거될 예정입니다. 코드를 output_config: {format: {...}}를 사용하도록 업데이트하세요.

    이러한 기능은 동일한 요청에서 독립적으로 또는 함께 사용할 수 있습니다.

    구조화된 출력은 Claude API와 Amazon Bedrock에서 Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5, Claude Haiku 4.5에 대해 정식 출시되었습니다. 구조화된 출력은 Microsoft Foundry에서 공개 베타로 유지됩니다.

    베타에서 마이그레이션하시나요? output_format 매개변수가 output_config.format으로 이동되었으며, 베타 헤더는 더 이상 필요하지 않습니다. 이전 베타 헤더(structured-outputs-2025-11-13)와 output_format 매개변수는 전환 기간 동안 계속 작동합니다. 업데이트된 API 형태는 아래 코드 예제를 참조하세요.

    구조화된 출력을 사용하는 이유

    구조화된 출력 없이는 Claude가 잘못된 형식의 JSON 응답이나 유효하지 않은 도구 입력을 생성하여 애플리케이션을 중단시킬 수 있습니다. 신중한 프롬프팅을 하더라도 다음과 같은 문제가 발생할 수 있습니다:

    • 유효하지 않은 JSON 구문으로 인한 파싱 오류
    • 필수 필드 누락
    • 일관되지 않은 데이터 타입
    • 오류 처리 및 재시도가 필요한 스키마 위반

    구조화된 출력은 제한된 디코딩을 통해 스키마 준수 응답을 보장합니다:

    • 항상 유효: 더 이상 JSON.parse() 오류 없음
    • 타입 안전: 필드 타입과 필수 필드 보장
    • 신뢰성: 스키마 위반에 대한 재시도 불필요

    JSON 출력

    JSON 출력은 Claude의 응답 형식을 제어하여, Claude가 스키마와 일치하는 유효한 JSON을 반환하도록 보장합니다. 다음이 필요할 때 JSON 출력을 사용하세요:

    • Claude의 응답 형식 제어
    • 이미지나 텍스트에서 데이터 추출
    • 구조화된 보고서 생성
    • API 응답 형식 지정

    빠른 시작

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
          }
        ],
        "output_config": {
          "format": {
            "type": "json_schema",
            "schema": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "email": {"type": "string"},
                "plan_interest": {"type": "string"},
                "demo_requested": {"type": "boolean"}
              },
              "required": ["name", "email", "plan_interest", "demo_requested"],
              "additionalProperties": false
            }
          }
        }
      }'

    응답 형식: response.content[0].text에서 스키마와 일치하는 유효한 JSON

    {
      "name": "John Smith",
      "email": "[email protected]",
      "plan_interest": "Enterprise",
      "demo_requested": true
    }

    작동 방식

    1. 1

      JSON 스키마 정의

      Claude가 따르길 원하는 구조를 설명하는 JSON 스키마를 생성합니다. 스키마는 일부 제한 사항이 있는 표준 JSON Schema 형식을 사용합니다(JSON 스키마 제한 사항 참조).

    2. 2

      output_config.format 매개변수 추가

      API 요청에 type: "json_schema"와 스키마 정의를 포함한 output_config.format 매개변수를 포함합니다.

    3. 3

      응답 파싱

      Claude의 응답은 response.content[0].text에 반환되는 스키마와 일치하는 유효한 JSON이 됩니다.

    SDK에서 JSON 출력 작업하기

    Python과 TypeScript SDK는 스키마 변환, 자동 검증, 인기 있는 스키마 라이브러리와의 통합을 포함하여 JSON 출력 작업을 더 쉽게 만드는 헬퍼를 제공합니다.

    SDK 헬퍼 메서드(.parse() 및 Pydantic/Zod 통합 등)는 편의 매개변수로 output_format을 여전히 허용합니다. SDK가 내부적으로 output_config.format으로의 변환을 처리합니다. 아래 예제는 SDK 헬퍼 구문을 보여줍니다.

    Pydantic과 Zod 사용하기

    Python과 TypeScript 개발자의 경우, 원시 JSON 스키마를 작성하는 대신 Pydantic과 Zod 같은 익숙한 스키마 정의 도구를 사용할 수 있습니다.

    from pydantic import BaseModel
    from anthropic import Anthropic, transform_schema
    
    class ContactInfo(BaseModel):
        name: str
        email: str
        plan_interest: str
        demo_requested: bool
    
    client = Anthropic()
    
    # .create() 사용 시 - transform_schema() 필요
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_config={
            "format": {
                "type": "json_schema",
                "schema": transform_schema(ContactInfo),
            }
        }
    )
    
    print(response.content[0].text)
    
    # .parse() 사용 시 - Pydantic 모델을 직접 전달 가능
    response = client.messages.parse(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format=ContactInfo,
    )
    
    print(response.parsed_output)

    SDK별 메서드

    Python: client.messages.parse() (권장)

    parse() 메서드는 Pydantic 모델을 자동으로 변환하고, 응답을 검증하며, parsed_output 속성을 반환합니다.

    Python: transform_schema() 헬퍼

    전송 전에 스키마를 수동으로 변환해야 하거나, Pydantic이 생성한 스키마를 수정하고 싶을 때 사용합니다. 제공된 스키마를 자동으로 변환하는 client.messages.parse()와 달리, 이 함수는 변환된 스키마를 반환하여 추가 커스터마이징이 가능합니다.

    SDK 변환 작동 방식

    Python과 TypeScript SDK 모두 지원되지 않는 기능이 있는 스키마를 자동으로 변환합니다:

    1. 지원되지 않는 제약 조건 제거 (예: minimum, maximum, minLength, maxLength)
    2. 제약 조건 정보로 설명 업데이트 (예: "Must be at least 100"), 제약 조건이 구조화된 출력에서 직접 지원되지 않는 경우
    3. 모든 객체에 additionalProperties: false 추가
    4. 지원되는 목록으로만 문자열 형식 필터링
    5. 원본 스키마에 대해 응답 검증 (모든 제약 조건 포함)

    이는 Claude가 단순화된 스키마를 받지만, 코드에서는 검증을 통해 모든 제약 조건을 여전히 적용한다는 것을 의미합니다.

    예시: minimum: 100이 있는 Pydantic 필드는 전송되는 스키마에서 일반 정수가 되지만, 설명이 "Must be at least 100"으로 업데이트되고, SDK는 원본 제약 조건에 대해 응답을 검증합니다.

    일반적인 사용 사례

    엄격한 도구 사용

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

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

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

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

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

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

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

    빠른 시작

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {"role": "user", "content": "What is the weather in San Francisco?"}
        ],
        "tools": [{
          "name": "get_weather",
          "description": "Get the current weather in a given location",
          "strict": true,
          "input_schema": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"],
            "additionalProperties": false
          }
        }]
      }'

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

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

    보장 사항:

    • 도구 input이 input_schema를 엄격히 따름
    • 도구 name이 항상 유효함 (제공된 도구 또는 서버 도구에서)

    작동 방식

    1. 1

      도구 스키마 정의

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

    2. 2

      strict: true 추가

      도구 정의에서 name, description, input_schema와 함께 최상위 속성으로 "strict": true를 설정합니다.

    3. 3

      도구 호출 처리

      Claude가 도구를 사용할 때, tool_use 블록의 input 필드는 input_schema를 엄격히 따르며, name은 항상 유효합니다.

    일반적인 사용 사례

    두 기능 함께 사용하기

    JSON 출력과 엄격한 도구 사용은 서로 다른 문제를 해결하며 함께 사용할 수 있습니다:

    • JSON 출력은 Claude의 응답 형식을 제어합니다 (Claude가 말하는 것)
    • 엄격한 도구 사용은 도구 매개변수를 검증합니다 (Claude가 함수를 호출하는 방법)

    결합하면, Claude는 보장된 유효한 매개변수로 도구를 호출하고 구조화된 JSON 응답을 반환할 수 있습니다. 이는 신뢰할 수 있는 도구 호출과 구조화된 최종 출력이 모두 필요한 에이전트 워크플로우에 유용합니다.

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": "Help me plan a trip to Paris for next month"}],
        # JSON 출력: 구조화된 응답 형식
        output_config={
            "format": {
                "type": "json_schema",
                "schema": {
                    "type": "object",
                    "properties": {
                        "summary": {"type": "string"},
                        "next_steps": {"type": "array", "items": {"type": "string"}}
                    },
                    "required": ["summary", "next_steps"],
                    "additionalProperties": False
                }
            }
        },
        # 엄격한 도구 사용: 보장된 도구 매개변수
        tools=[{
            "name": "search_flights",
            "strict": True,
            "input_schema": {
                "type": "object",
                "properties": {
                    "destination": {"type": "string"},
                    "date": {"type": "string", "format": "date"}
                },
                "required": ["destination", "date"],
                "additionalProperties": False
            }
        }]
    )

    중요 고려 사항

    문법 컴파일 및 캐싱

    구조화된 출력은 컴파일된 문법 아티팩트를 사용한 제한된 샘플링을 사용합니다. 이로 인해 알아야 할 몇 가지 성능 특성이 있습니다:

    • 첫 번째 요청 지연: 특정 스키마를 처음 사용할 때 문법이 컴파일되는 동안 추가 지연이 발생합니다
    • 자동 캐싱: 컴파일된 문법은 마지막 사용 후 24시간 동안 캐시되어 후속 요청이 훨씬 빨라집니다
    • 캐시 무효화: 다음을 변경하면 캐시가 무효화됩니다:
      • JSON 스키마 구조
      • 요청의 도구 세트 (구조화된 출력과 도구 사용을 함께 사용할 때)
      • name 또는 description 필드만 변경하는 것은 캐시를 무효화하지 않습니다

    프롬프트 수정 및 토큰 비용

    구조화된 출력을 사용할 때, Claude는 예상 출력 형식을 설명하는 추가 시스템 프롬프트를 자동으로 받습니다. 이는 다음을 의미합니다:

    • 입력 토큰 수가 약간 높아집니다
    • 주입된 프롬프트는 다른 시스템 프롬프트와 마찬가지로 토큰 비용이 발생합니다
    • output_config.format 매개변수를 변경하면 해당 대화 스레드의 프롬프트 캐시가 무효화됩니다

    JSON 스키마 제한 사항

    구조화된 출력은 일부 제한 사항이 있는 표준 JSON Schema를 지원합니다. JSON 출력과 엄격한 도구 사용 모두 이러한 제한 사항을 공유합니다.

    Python과 TypeScript SDK는 지원되지 않는 기능이 있는 스키마를 자동으로 변환하여 제거하고 필드 설명에 제약 조건을 추가할 수 있습니다. 자세한 내용은 SDK별 메서드를 참조하세요.

    유효하지 않은 출력

    구조화된 출력은 대부분의 경우 스키마 준수를 보장하지만, 출력이 스키마와 일치하지 않을 수 있는 시나리오가 있습니다:

    거부 (stop_reason: "refusal")

    Claude는 구조화된 출력을 사용할 때도 안전성과 유용성 속성을 유지합니다. Claude가 안전상의 이유로 요청을 거부하는 경우:

    • 응답에 stop_reason: "refusal"이 포함됩니다
    • 200 상태 코드를 받게 됩니다
    • 생성된 토큰에 대해 비용이 청구됩니다
    • 거부 메시지가 스키마 제약 조건보다 우선하므로 출력이 스키마와 일치하지 않을 수 있습니다

    토큰 제한 도달 (stop_reason: "max_tokens")

    max_tokens 제한에 도달하여 응답이 잘린 경우:

    • 응답에 stop_reason: "max_tokens"가 포함됩니다
    • 출력이 불완전하여 스키마와 일치하지 않을 수 있습니다
    • 완전한 구조화된 출력을 얻으려면 더 높은 max_tokens 값으로 재시도하세요

    스키마 검증 오류

    스키마가 지원되지 않는 기능을 사용하거나 너무 복잡한 경우 400 오류를 받게 됩니다:

    "Too many recursive definitions in schema"

    • 원인: 스키마에 과도하거나 순환적인 재귀 정의가 있음
    • 해결 방법: 스키마 구조를 단순화하고 중첩 깊이를 줄이세요

    "Schema is too complex"

    • 원인: 스키마가 복잡성 제한을 초과함
    • 해결 방법: 더 작은 스키마로 분할하거나, 구조를 단순화하거나, strict: true로 표시된 도구 수를 줄이세요

    유효한 스키마에 대한 지속적인 문제가 있는 경우, 스키마 정의와 함께 지원팀에 문의하세요.

    기능 호환성

    호환되는 기능:

    • 배치 처리: 50% 할인으로 대규모 구조화된 출력 처리
    • 토큰 카운팅: 컴파일 없이 토큰 수 계산
    • 스트리밍: 일반 응답처럼 구조화된 출력 스트리밍
    • 결합 사용: 동일한 요청에서 JSON 출력(output_config.format)과 엄격한 도구 사용(strict: true)을 함께 사용

    호환되지 않는 기능:

    • 인용: 인용은 텍스트와 인용 블록을 인터리빙해야 하며, 이는 엄격한 JSON 스키마 제약 조건과 충돌합니다. output_config.format과 함께 인용이 활성화되면 400 오류를 반환합니다.
    • 메시지 프리필링: JSON 출력과 호환되지 않음

    문법 범위: 문법은 Claude의 직접 출력에만 적용되며, 도구 사용 호출, 도구 결과 또는 사고 태그(확장된 사고 사용 시)에는 적용되지 않습니다. 문법 상태는 섹션 간에 재설정되어, Claude가 자유롭게 사고하면서도 최종 응답에서 구조화된 출력을 생성할 수 있습니다.

    Was this page helpful?

    • JSON 출력
    • SDK에서 JSON 출력 작업하기
    • JSON 스키마 제한 사항