피드로 돌아가기
Dev.toAI/ML
원문 읽기
Constrained Decoding 도입으로 JSON 에러율 25%에서 0.1% 미만으로 개선
Fixing JSON Output from GPT: A Pattern That Actually Works
AI 요약
Context
LLM의 비결정적 특성으로 인해 Prompt Engineering 및 후처리 파싱만으로는 Production 환경의 다양한 Edge Case 대응에 한계 발생. 특히 json_object 모드 사용 시에도 스키마 미준수 및 필드 누락 등의 구조적 불안정성 지속.
Technical Solution
- Generation 단계에서 Token 생성을 제어하는 Constrained Decoding 기법 채택
- JSON Schema를 Finite State Machine(FSM)으로 컴파일하여 유효하지 않은 Token 생성을 원천 차단하는 Masking 로직 적용
- Pydantic 기반의 강타입 스키마 정의를 통해 런타임 데이터 구조의 일관성 확보
- Outlines 라이브러리를 활용하여 Logit Bias를 제어함으로써 모델의 출력 가능 토큰 집합을 스키마에 맞게 제한
- Post-processing 방식에서 Generation-time Validation 방식으로 패러다임 전환을 통한 파싱 오버헤드 제거
Impact
- JSON 생성 에러율 25%에서 0.1% 미만으로 대폭 감소
- Mask computation으로 인한 생성 시간 5~10% 소폭 증가하나 시스템 안정성 확보로 상쇄
실천 포인트
- LLM 출력값이 DB나 API 파이프라인으로 직접 유입되는 경우 Prompt Engineering 대신 Constrained Decoding 검토 - Pydantic 등을 활용해 평탄한(Flat) 구조의 JSON 스키마를 설계하여 FSM 복잡도 최소화 - Logit Bias 지원 여부에 따라 Outlines, Guidance 등 적합한 라이브러리 선정 - 합성 데이터가 아닌 실제 사용자 입력 기반의 Edge Case 테스트 셋 구축