OpenAI, API에 구조화된 출력 도입: JSON 스키마 100% 일치 보장
OpenAI가 개발자가 지정한 JSON 스키마를 모델 출력이 완벽하게 따르도록 강제하는 'Structured Outputs' 기능을 API에 출시했다. 새로운 gpt-4o 모델 평가에서 100% 스키마 일치율을 기록해 프롬프트 엔지니어링이나 재시도 로직 부담을 없앴다. 새로운 스키마를 처음 요청할 때 전처리 지연이 발생할 수 있다.

대규모 언어 모델(LLM)을 API로 연동해 본 개발자라면 누구나 겪는 고질적인 문제가 있습니다. 프롬프트에 아무리 '반드시 유효한 JSON 형식으로만 답하라'고 강조해도, 모델이 불필요한 줄바꿈을 넣거나 필수 키를 빠뜨려 백엔드 파서가 뻗어버리는 일입니다.
OpenAI가 8월 6일 이 문제를 근본적으로 해결하는 '정형 출력(Structured Outputs)' 기능을 API에 공식 출시했습니다. 모델이 개발자가 지정한 JSON Schema 규격을 100% 엄격하게 준수하여 응답하도록 강제하는 기능입니다.
이와 함께 최신 체크포인트인 gpt-4o-2024-08-06도 함께 공개되었습니다. 복잡한 JSON 스키마를 따르는 벤치마크 평가에서 이전 gpt-4-0613은 40% 미만의 신뢰도를 보였으나, 새로운 모델에 Structured Outputs를 적용하자 100% 완벽한 일치율을 기록했습니다.
프롬프트 요청 대신 추론 엔진에서 오류를 차단하다
기존에도 JSON mode가 있었지만, 이는 문법상 올바른 JSON 문자열만 보장할 뿐 특정 스키마 규격이나 필드 누락 여부까지 제어하지는 못했습니다. 개발자들은 별도의 검증 라이브러리를 붙이고 재시도 로직을 짜느라 많은 리소스를 낭비해야 했습니다.
Structured Outputs는 두 가지 방식으로 제공됩니다. 첫째는 함수 호출(Function calling) 정의에 strict: true를 지정하는 방식으로, gpt-4-0613 및 gpt-3.5-turbo 이후 모델에서 폭넓게 지원됩니다. 둘째는 response_format 매개변수에 json_schema를 전달하고 strict: true를 켜는 방식으로, 신형 gpt-4o와 gpt-4o-mini에서 사용할 수 있습니다.
개발 편의를 위해 파이썬과 노드 SDK도 업데이트되어 Pydantic이나 Zod 객체를 그대로 넘기면 자동으로 스키마 변환 및 역직렬화를 처리합니다. 만약 안전 정책에 걸려 요청이 거부될 경우, 스키마를 억지로 맞추다 깨지는 대신 refusal 필드를 통해 명확한 거절 신호를 프로그램적으로 전달합니다.
OpenAI가 100% 신뢰도를 달성한 비결은 제약 디코딩(Constrained Decoding)이라는 시스템 엔지니어링에 있습니다. 모델을 추가 학습시키는 것만으로는 신뢰도가 93%에 머물렀기 때문입니다.
OpenAI는 전달받은 스키마를 문맥 무관 문법(CFG)으로 변환한 뒤, 토큰을 하나씩 생성할 때마다 문법상 허용되는 다음 토큰만 남기고 유효하지 않은 토큰의 샘플링 확률을 0으로 덮어버립니다. 기존 오픈소스들이 주로 쓰던 유한 상태 기계(FSM)와 달리 CFG 방식을 채택해 중첩되거나 재귀적인 복잡한 UI 데이터 구조도 완벽하게 처리할 수 있습니다.
다만 한계도 존재합니다. 새로운 스키마를 처음 요청할 때 문법 변환 및 캐싱 작업으로 인해 일반 스키마는 최대 10초, 복잡한 스키마는 최대 1분의 초기 지연 시간이 발생합니다. 또한 병렬 함수 호출 기능과는 함께 사용할 수 없습니다.
왜 중요한가
단순한 개발자 편의 기능처럼 보이지만, 이는 LLM을 불확실한 생성 도구에서 믿고 쓸 수 있는 엔터프라이즈 자동화 인프라로 격상시키는 매우 결정적인 전환점입니다.
개발자와 기업 입장에서는 직접적인 혜택이 큽니다. 여러 단계로 이어지는 AI 에이전트 워크플로에서 중간 응답의 포맷 오류로 파이프라인 전체가 멈추던 위험이 사라집니다. 방어적인 파싱 코드와 오류 재시도로 낭비되던 토큰과 지연 시간을 즉시 아낄 수 있으므로, 프로덕션 환경의 실무자라면 지금 바로 도입할 가치가 충분합니다.
업계 전반으로 보면 OpenAI가 추론 엔진 레벨에서 구조적 일치성을 완전히 장악함으로써, 서드파티 검증 도구들의 입지를 크게 흔들었습니다. 프롬프트 엔지니어링의 불확실성을 인프라 수준의 결정론적 통제로 흡수한 영리한 설계입니다.
주의할 점은 이번 기능이 보장하는 것이 '데이터의 껍데기'이지 '내용의 진실성'은 아니라는 사실입니다. 필드명과 타입은 완벽하게 맞춰 나오더라도, 그 안의 계산 값이나 사실관계는 여전히 환각을 일으킬 수 있습니다. 포맷의 신뢰성이 100% 확보된 만큼, 앞으로 개발자의 관심은 온전히 모델의 추론 품질 자체를 끌어올리는 데 집중될 것입니다.
출처 (1)
- openai.com(새 탭에서 열림)원문openai.com