구조화된 출력이 필요한 이유?
에이전트는 기본적으로 자유 형식 텍스트를 반환하므로 채팅에는 적합하지만 출력을 프로그래밍 방식으로 사용해야 할 때는 적합하지 않습니다. 구조화된 출력은 애플리케이션 로직, 데이터베이스 또는 UI 컴포넌트에 직접 전달할 수 있는 타입이 지정된 데이터를 제공합니다. 에이전트가 웹을 검색하고 레시피를 가져오는 레시피 앱을 생각해 봅시다. 구조화된 출력이 없으면 직접 파싱해야 하는 자유 형식 텍스트를 얻습니다. 구조화된 출력을 사용하면 원하는 형태를 정의하고 앱에서 직접 사용할 수 있는 타입이 지정된 데이터를 얻습니다.구조화된 출력 없음
구조화된 출력 없음
구조화된 출력 포함
구조화된 출력 포함
빠른 시작
구조화된 출력을 사용하려면 원하는 데이터의 형태를 설명하는 JSON Schema를 정의한 다음,outputFormat 옵션(TypeScript) 또는 output_format 옵션(Python)을 통해 query()에 전달합니다. 에이전트가 완료되면 결과 메시지에 스키마와 일치하는 검증된 데이터가 포함된 structured_output 필드가 포함됩니다.
아래 예제는 에이전트에 Anthropic을 조사하고 회사명, 설립 연도 및 본사를 구조화된 출력으로 반환하도록 요청합니다.
Zod 및 Pydantic을 사용한 타입 안전 스키마
JSON Schema를 직접 작성하는 대신 Zod(TypeScript) 또는 Pydantic(Python)을 사용하여 스키마를 정의할 수 있습니다. 이러한 라이브러리는 JSON Schema를 생성하고 응답을 완전히 타입이 지정된 객체로 파싱하여 자동 완성 및 타입 검사를 통해 코드베이스 전체에서 사용할 수 있습니다. 아래 예제는 요약, 단계 목록(각각 복잡도 수준 포함) 및 잠재적 위험이 있는 기능 구현 계획에 대한 스키마를 정의합니다. 에이전트는 기능을 계획하고 타입이 지정된FeaturePlan 객체를 반환합니다. 그런 다음 plan.summary와 같은 속성에 액세스하고 완전한 타입 안전성으로 plan.steps를 반복할 수 있습니다.
- 완전한 타입 추론(TypeScript) 및 타입 힌트(Python)
safeParse()또는model_validate()를 사용한 런타임 검증- 더 나은 오류 메시지
- 구성 가능하고 재사용 가능한 스키마
출력 형식 구성
outputFormat(TypeScript) 또는 output_format(Python) 옵션은 다음을 포함하는 객체를 허용합니다:
type: 구조화된 출력의 경우"json_schema"로 설정schema: 출력 구조를 정의하는 JSON Schema 객체입니다. Zod 스키마에서z.toJSONSchema()를 사용하거나 Pydantic 모델에서.model_json_schema()를 사용하여 생성할 수 있습니다.
enum, const, required, 중첩 객체 및 $ref 정의를 포함한 표준 JSON Schema 기능을 지원합니다. 지원되는 기능 및 제한사항의 전체 목록은 JSON Schema 제한사항을 참조하세요.
예제: TODO 추적 에이전트
이 예제는 구조화된 출력이 다중 단계 도구 사용과 어떻게 작동하는지 보여줍니다. 에이전트는 코드베이스에서 TODO 주석을 찾은 다음 각각에 대한 git blame 정보를 조회해야 합니다. 실행 중에 사용할 도구(검색용 Grep, git 명령 실행용 Bash)를 자율적으로 결정하고 결과를 단일 구조화된 응답으로 결합합니다. 스키마에는 모든 파일에 대해 git blame 정보를 사용할 수 없을 수 있으므로 선택적 필드(author 및 date)가 포함됩니다. 에이전트는 찾을 수 있는 것을 채우고 나머지는 생략합니다.
오류 처리
구조화된 출력 생성은 에이전트가 스키마와 일치하는 유효한 JSON을 생성할 수 없을 때 실패할 수 있습니다. 이는 일반적으로 스키마가 작업에 너무 복잡하거나, 작업 자체가 모호하거나, 에이전트가 검증 오류를 수정하려고 시도하는 동안 재시도 제한에 도달할 때 발생합니다. 오류가 발생하면 결과 메시지에 무엇이 잘못되었는지 나타내는subtype이 있습니다:
| Subtype | 의미 |
|---|---|
success | 출력이 성공적으로 생성되고 검증됨 |
error_max_structured_output_retries | 에이전트가 여러 시도 후 유효한 출력을 생성할 수 없음 |
subtype 필드를 확인하여 출력이 성공적으로 생성되었는지 또는 실패를 처리해야 하는지 결정합니다:
- 스키마를 집중적으로 유지하세요. 많은 필수 필드가 있는 깊게 중첩된 스키마는 만족하기 어렵습니다. 간단하게 시작하고 필요에 따라 복잡성을 추가하세요.
- 스키마를 작업과 일치시키세요. 작업에 스키마가 요구하는 모든 정보가 없을 수 있으면 해당 필드를 선택적으로 만드세요.
- 명확한 프롬프트를 사용하세요. 모호한 프롬프트는 에이전트가 생성할 출력을 알기 어렵게 합니다.
관련 리소스
- JSON Schema 문서: 중첩 객체, 배열, 열거형 및 검증 제약 조건이 있는 복잡한 스키마를 정의하기 위한 JSON Schema 구문 학습
- API 구조화된 출력: 도구 사용 없이 단일 턴 요청에 대해 Claude API와 함께 직접 구조화된 출력 사용
- 사용자 정의 도구: 구조화된 출력을 반환하기 전에 실행 중에 호출할 에이전트 사용자 정의 도구 제공