OpenAI 구조화된 출력 API 기능 발표
TL;DR
OpenAI는 API에 구조화된 출력을 발표했습니다. 이 기능은 모델 응답이 개발자가 제공한 JSON 스키마와 정확히 일치하도록 보장하여 데이터 중심 애플리케이션의 신뢰성을 향상시킵니다.
구조화된 출력이란
구조화된 출력은 모델의 출력이 개발자가 제공한 JSON 스키마와 일치하도록 강제합니다. 이는 이전 JSON 모드가 유효한 JSON을 권장했지만 특정 스키마에 대한 준수를 보장하지 못했던 것보다 한 단계 앞선 것입니다.
구조화된 출력 사용 방법
함수 호출 인터페이스
- 도구 정의에서
strict: true를 설정합니다. - 도구를 지원하는 모든 모델에서 작동합니다 (예:
gpt‑4‑0613,gpt‑3.5‑turbo‑0613및 최신 모델). - 예시 요청은 테이블 이름, 열, 조건 및 정렬에 대한 상세 스키마를 가진
query함수를 보여줍니다. 모델은 이 스키마와 정확히 일치하는 JSON 객체를 반환합니다.
response_format 인터페이스
response_format내부의 새로운json_schema옵션을 통해 JSON 스키마를 제공합니다.- 최신 GPT‑4o 모델에서 사용할 수 있습니다:
gpt‑4o‑2024‑08‑06및gpt‑4o‑mini‑2024‑07‑18. - 예시 요청은
steps배열과final_answer필드를 포함한 수학 튜터링 응답을 형식화하며, 모델은 스키마에 부합하는 데이터를 반환합니다.
안전 보장
- 구조화된 출력은 기존 안전 정책을 준수하며, 모델은 여전히 위험한 요청을 거부할 수 있습니다.
- 거부가 발생하면 API는 응답에
refusal필드를 포함하여 개발자가 비준수 출력을 프로그래밍적으로 감지할 수 있게 합니다.
네이티브 SDK 지원
- 업데이트된 Python 및 Node SDK는 Pydantic (Python) 또는 Zod (Node) 객체를 직접 받아들입니다.
- SDK는 이러한 타입 객체를 JSON 스키마로 변환하고 API에 전송한 뒤, 반환된 JSON을 원래 타입 구조로 역직렬화합니다.
- 예시 코드는
QueryPydantic 모델과MathResponse모델을 파싱하는 방법을 보여줍니다.
주요 사용 사례
- 동적 UI 생성 – 재귀 스키마와 일치하는 UI 컴포넌트 트리를 생성하여 실시간 인터페이스 작성을 가능하게 합니다.
- 추론과 최종 답변 분리 –
reasoning_steps배열과 간결한answer필드를 반환하여 투명성을 높입니다. - 구조화된 데이터 추출 – 자유 형식 회의 노트에서 작업 항목, 마감일 및 담당자를 잘 정의된 스키마로 추출합니다.
내부 기술
제한된 디코딩
- 모델의 토큰 샘플러는 각 단계에서 제공된 스키마에 따라 출력을 유효하게 유지하는 토큰으로만 제한됩니다.
- JSON 스키마는 컨텍스트 자유 문법(CFG)으로 컴파일됩니다. 생성 중에 추론 엔진은 현재 부분 출력에 기반해 유효하지 않은 토큰을 마스킹합니다.
- 새로운 스키마에 대한 첫 요청은 전처리 지연을 발생시킵니다(보통 10초 이하, 복잡한 스키마는 최대 1분) 이는 문법 캐시를 구축하기 위함입니다.
왜 CFG를 FSM/정규식보다 사용하는가
- CFG는 재귀 구조를 표현할 수 있지만 FSM은 이를 신뢰성 있게 처리하지 못합니다.
- 이를 통해 중첩되거나 자기 참조 객체를 포함하는 스키마(예: 동적으로 생성된 UI 컴포넌트 트리)를 지원할 수 있습니다.
제한 사항
- JSON 스키마의 일부만 지원됩니다(정확한 목록은 문서를 참조).
- 새로운 스키마에 대한 최초 사용 지연이 있으며, 이후 호출은 빠릅니다.
- 거부, 토큰 제한, 조기 중단 사유 등으로 모델이 비준수 응답을 반환할 수 있습니다.
- JSON 내부 값이 여전히 잘못될 수 있으므로, 개발자는 예시를 제공하거나 작업을 더 작은 하위 작업으로 나누어야 합니다.
- 병렬 도구 호출은 호환되지 않으며, 불일치를 방지하려면
parallel_tool_calls: false로 설정합니다. - 구조화된 출력에 사용되는 스키마는 Zero Data Retention 대상이 아닙니다.
가용성 및 가격
- 구조화된 출력은 현재 Chat Completions, Assistants, Batch API 전반에 일반적으로 제공됩니다.
- 함수 호출 모드는 도구를 지원하는 모든 모델에서 작동하며,
gpt‑4o,gpt‑4o‑mini및 도구 지원이 포함된 모든 파인튜닝 모델을 포함합니다. response_format모드는gpt‑4o‑2024‑08‑06,gpt‑4o‑mini‑2024‑07‑18및 호환 가능한 파인튜닝 모델에서 작동합니다.gpt‑4o‑2024‑08‑06으로 전환하면 2024년 5월 버전 대비 입력 비용이 50 % 감소하고 출력 비용이 33 % 감소합니다.
감사
OpenAI는 영감을 준 오픈소스 커뮤니티에 감사를 표하며, outlines, jsonformer, instructor, guidance, lark와 같은 프로젝트를 구조화된 출력 구현에 영향을 준 것으로 언급합니다.
이 문서는 2024년 8월 6일에 발표된 OpenAI의 구조화된 출력 공식 발표를 요약한 것입니다.