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마이그레이션 가이드
    스트리밍 입력실시간 응답 스트리밍중지 사유 처리권한 처리사용자 승인 및 입력훅으로 실행 제어세션 관리파일 체크포인팅SDK에서 구조화된 출력Agent SDK 호스팅AI 에이전트 안전하게 배포하기시스템 프롬프트 수정SDK에서 MCP 사용커스텀 도구SDK에서 서브에이전트SDK에서 슬래시 명령어SDK에서 Agent Skills비용 및 사용량 추적할 일 목록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 Schema, Zod 또는 Pydantic을 사용하여 에이전트 워크플로우에서 검증된 JSON을 반환합니다. 다중 턴 도구 사용 후 타입 안전한 구조화된 데이터를 얻으세요.

    구조화된 출력을 사용하면 에이전트에서 돌려받고 싶은 데이터의 정확한 형태를 정의할 수 있습니다. 에이전트는 작업을 완료하는 데 필요한 모든 도구를 사용할 수 있으며, 최종적으로 스키마와 일치하는 검증된 JSON을 받을 수 있습니다. 필요한 구조에 대한 JSON Schema를 정의하면 SDK가 출력이 이와 일치하도록 보장합니다.

    완전한 타입 안전성을 위해 Zod(TypeScript) 또는 Pydantic(Python)을 사용하여 스키마를 정의하고 강력한 타입의 객체를 돌려받으세요.

    왜 구조화된 출력인가?

    에이전트는 기본적으로 자유 형식 텍스트를 반환하는데, 이는 채팅에는 적합하지만 출력을 프로그래밍적으로 사용해야 할 때는 적합하지 않습니다. 구조화된 출력은 애플리케이션 로직, 데이터베이스 또는 UI 컴포넌트에 직접 전달할 수 있는 타입이 지정된 데이터를 제공합니다.

    에이전트가 웹을 검색하여 레시피를 가져오는 레시피 앱을 생각해 보세요. 구조화된 출력 없이는 직접 파싱해야 하는 자유 형식 텍스트를 받게 됩니다. 구조화된 출력을 사용하면 원하는 형태를 정의하고 앱에서 직접 사용할 수 있는 타입이 지정된 데이터를 받을 수 있습니다.

    빠른 시작

    구조화된 출력을 사용하려면 원하는 데이터의 형태를 설명하는 JSON Schema를 정의한 다음, outputFormat 옵션(TypeScript) 또는 output_format 옵션(Python)을 통해 query()에 전달합니다. 에이전트가 완료되면 결과 메시지에 스키마와 일치하는 검증된 데이터가 포함된 structured_output 필드가 포함됩니다.

    아래 예제는 에이전트에게 Anthropic을 조사하고 회사 이름, 설립 연도, 본사를 구조화된 출력으로 반환하도록 요청합니다.

    import { query } from '@anthropic-ai/claude-agent-sdk'
    
    // 돌려받고 싶은 데이터의 형태를 정의
    const schema = {
      type: 'object',
      properties: {
        company_name: { type: 'string' },
        founded_year: { type: 'number' },
        headquarters: { type: 'string' }
      },
      required: ['company_name']
    }
    
    for await (const message of query({
      prompt: 'Research Anthropic and provide key company information',
      options: {
        outputFormat: {
          type: 'json_schema',
          schema: schema
        }
      }
    })) {
      // 결과 메시지에는 검증된 데이터가 포함된 structured_output이 있습니다
      if (message.type === 'result' && message.structured_output) {
        console.log(message.structured_output)
        // { company_name: "Anthropic", founded_year: 2021, headquarters: "San Francisco, CA" }
      }
    }

    Zod와 Pydantic을 사용한 타입 안전 스키마

    JSON Schema를 직접 작성하는 대신 Zod(TypeScript) 또는 Pydantic(Python)을 사용하여 스키마를 정의할 수 있습니다. 이러한 라이브러리는 JSON Schema를 자동으로 생성하고, 자동 완성과 타입 검사를 통해 코드베이스 전체에서 사용할 수 있는 완전한 타입의 객체로 응답을 파싱할 수 있게 해줍니다.

    아래 예제는 요약, 단계 목록(각각 복잡도 수준 포함), 잠재적 위험이 포함된 기능 구현 계획의 스키마를 정의합니다. 에이전트가 기능을 계획하고 타입이 지정된 FeaturePlan 객체를 반환합니다. 그런 다음 plan.summary와 같은 속성에 접근하고 완전한 타입 안전성으로 plan.steps를 반복할 수 있습니다.

    import { z } from 'zod'
    import { query } from '@anthropic-ai/claude-agent-sdk'
    
    // Zod로 스키마 정의
    const FeaturePlan = z.object({
      feature_name: z.string(),
      summary: z.string(),
      steps: z.array(z.object({
        step_number: z.number(),
        description: z.string(),
        estimated_complexity: z.enum(['low', 'medium', 'high'])
      })),
      risks: z.array(z.string())
    })
    
    type FeaturePlan = z.infer<typeof FeaturePlan>
    
    // JSON Schema로 변환
    const schema = z.toJSONSchema(FeaturePlan)
    
    // 쿼리에서 사용
    for await (const message of query({
      prompt: 'Plan how to add dark mode support to a React app. Break it into implementation steps.',
      options: {
        outputFormat: {
          type: 'json_schema',
          schema: schema
        }
      }
    })) {
      if (message.type === 'result' && message.structured_output) {
        // 검증하고 완전한 타입의 결과를 얻기
        const parsed = FeaturePlan.safeParse(message.structured_output)
        if (parsed.success) {
          const plan: FeaturePlan = parsed.data
          console.log(`Feature: ${plan.feature_name}`)
          console.log(`Summary: ${plan.summary}`)
          plan.steps.forEach(step => {
            console.log(`${step.step_number}. [${step.estimated_complexity}] ${step.description}`)
          })
        }
      }
    }

    장점:

    • 완전한 타입 추론(TypeScript) 및 타입 힌트(Python)
    • safeParse() 또는 model_validate()를 사용한 런타임 검증
    • 더 나은 오류 메시지
    • 조합 가능하고 재사용 가능한 스키마

    출력 형식 구성

    outputFormat(TypeScript) 또는 output_format(Python) 옵션은 다음을 포함하는 객체를 받습니다:

    • type: 구조화된 출력을 위해 "json_schema"로 설정
    • schema: 출력 구조를 정의하는 JSON Schema 객체. Zod 스키마에서 z.toJSONSchema()로 또는 Pydantic 모델에서 .model_json_schema()로 생성할 수 있습니다

    SDK는 모든 기본 타입(object, array, string, number, boolean, null), enum, const, required, 중첩 객체, $ref 정의를 포함한 표준 JSON Schema 기능을 지원합니다. 지원되는 기능과 제한 사항의 전체 목록은 JSON Schema 제한 사항을 참조하세요.

    예제: TODO 추적 에이전트

    이 예제는 구조화된 출력이 다단계 도구 사용과 어떻게 작동하는지 보여줍니다. 에이전트는 코드베이스에서 TODO 주석을 찾은 다음 각각에 대한 git blame 정보를 조회해야 합니다. 에이전트는 어떤 도구를 사용할지 자율적으로 결정하고(검색을 위한 Grep, git 명령 실행을 위한 Bash) 결과를 단일 구조화된 응답으로 결합합니다.

    스키마에는 선택적 필드(author와 date)가 포함되어 있는데, 이는 모든 파일에 대해 git blame 정보를 사용할 수 없을 수 있기 때문입니다. 에이전트는 찾을 수 있는 정보를 채우고 나머지는 생략합니다.

    import { query } from '@anthropic-ai/claude-agent-sdk'
    
    // TODO 추출을 위한 구조 정의
    const todoSchema = {
      type: 'object',
      properties: {
        todos: {
          type: 'array',
          items: {
            type: 'object',
            properties: {
              text: { type: 'string' },
              file: { type: 'string' },
              line: { type: 'number' },
              author: { type: 'string' },
              date: { type: 'string' }
            },
            required: ['text', 'file', 'line']
          }
        },
        total_count: { type: 'number' }
      },
      required: ['todos', 'total_count']
    }
    
    // 에이전트가 Grep으로 TODO를 찾고, Bash로 git blame 정보를 가져옵니다
    for await (const message of query({
      prompt: 'Find all TODO comments in this codebase and identify who added them',
      options: {
        outputFormat: {
          type: 'json_schema',
          schema: todoSchema
        }
      }
    })) {
      if (message.type === 'result' && message.structured_output) {
        const data = message.structured_output
        console.log(`Found ${data.total_count} TODOs`)
        data.todos.forEach(todo => {
          console.log(`${todo.file}:${todo.line} - ${todo.text}`)
          if (todo.author) {
            console.log(`  Added by ${todo.author} on ${todo.date}`)
          }
        })
      }
    }

    오류 처리

    에이전트가 스키마와 일치하는 유효한 JSON을 생성할 수 없을 때 구조화된 출력 생성이 실패할 수 있습니다. 이는 일반적으로 스키마가 작업에 비해 너무 복잡하거나, 작업 자체가 모호하거나, 에이전트가 검증 오류를 수정하려는 재시도 한도에 도달했을 때 발생합니다.

    오류가 발생하면 결과 메시지에 무엇이 잘못되었는지 나타내는 subtype이 있습니다:

    Subtype의미
    success출력이 성공적으로 생성되고 검증됨
    error_max_structured_output_retries에이전트가 여러 번 시도한 후에도 유효한 출력을 생성하지 못함

    아래 예제는 subtype 필드를 확인하여 출력이 성공적으로 생성되었는지 또는 실패를 처리해야 하는지 판단합니다:

    for await (const msg of query({
      prompt: 'Extract contact info from the document',
      options: {
        outputFormat: {
          type: 'json_schema',
          schema: contactSchema
        }
      }
    })) {
      if (msg.type === 'result') {
        if (msg.subtype === 'success' && msg.structured_output) {
          // 검증된 출력 사용
          console.log(msg.structured_output)
        } else if (msg.subtype === 'error_max_structured_output_retries') {
          // 실패 처리 - 더 간단한 프롬프트로 재시도, 비구조화된 출력으로 대체 등
          console.error('Could not produce valid output')
        }
      }
    }

    오류를 피하기 위한 팁:

    • 스키마를 집중적으로 유지하세요. 많은 필수 필드가 있는 깊이 중첩된 스키마는 충족하기 어렵습니다. 간단하게 시작하고 필요에 따라 복잡성을 추가하세요.
    • 스키마를 작업에 맞추세요. 작업에 스키마가 요구하는 모든 정보가 없을 수 있다면 해당 필드를 선택적으로 만드세요.
    • 명확한 프롬프트를 사용하세요. 모호한 프롬프트는 에이전트가 어떤 출력을 생성해야 하는지 파악하기 어렵게 만듭니다.

    관련 리소스

    • JSON Schema 문서: 중첩 객체, 배열, 열거형 및 검증 제약 조건이 있는 복잡한 스키마를 정의하기 위한 JSON Schema 구문 학습
    • API 구조화된 출력: 도구 사용 없이 단일 턴 요청에 대해 Claude API에서 직접 구조화된 출력 사용
    • 커스텀 도구: 구조화된 출력을 반환하기 전에 실행 중에 호출할 수 있는 커스텀 도구를 에이전트에 제공

    Was this page helpful?

    • Zod와 Pydantic을 사용한 타입 안전 스키마
    • 예제: TODO 추적 에이전트