'JSON 으로 답해줘'라는 프롬프트만으로는 구조를 보장할 수 없어. 모델이 설명, code fence, 뒤쪽 문장을 덧붙이면 방어적인 parsing 과 재시도가 필요해져. Structured output 은 response_format 에 Pydantic schema 를 넣어 허용할 응답 구조를 정해.
프롬프트보다 강한 이유
schema 는 server 에서 강제돼. 구조에 맞지 않는 출력은 API 가 받아들이지 않고 다시 생성하게 하며, 호출 코드는 검증된 Pydantic instance 를 받아. 별도의 방어적 parsing 을 크게 줄일 수 있어.
Batch API 는 기다리는 대신 50% 할인돼
수만 개의 prompt 를 처리해야 하지만 사용자가 즉시 기다리는 작업이 아니라면 Batch API 를 검토해. JSONL 을 올리면 최대 24 시간 안에 처리되고 결과 JSONL 을 받을 수 있으며 비용은 50% 할인돼. 채팅에는 맞지 않지만 eval, dataset 생성, moderation backfill 에 잘 맞아.
두 방식을 직접 비교해봐
같은 작업을 프롬프트만으로 JSON 을 요구하는 방식과 response_format 방식으로 각각 실행해 실패율을 재봐. 보통 프롬프트만 쓰면 1~3%가 실패하지만 response_format 은 거의 0에 가까워. 작은 실패율도 운영 환경에서는 반복되는 경고와 복구 작업이 되므로 구조를 강제하는 가치가 드러날 거야.