피드로 돌아가기
Structured Outputs: How We Stopped Parsing LLM Responses by Hand
Dev.toDev.to
AI/ML

Pydantic Schema 기반 Structured Outputs 도입을 통한 LLM 응답 파싱 에러 제거

Structured Outputs: How We Stopped Parsing LLM Responses by Hand

Lycore Development2026년 6월 27일9intermediate

Context

LLM의 자유 텍스트 응답을 JSON으로 파싱하는 과정에서 Markdown 코드 펜스 포함 및 필드명 불일치로 인한 파이프라인 런타임 에러 빈번 발생. 텍스트 예측 모델 특성상 발생하는 비결정적 출력 구조로 인해 방어적 파싱 코드의 유지보수 비용이 지속적으로 증가하는 한계 직면.

Technical Solution

  • Pydantic 모델을 활용한 데이터 스키마 정의로 LLM 생성 단계부터 출력 구조를 강제하는 Constrained Decoding 적용
  • OpenAI API의 response_format 옵션을 통해 모델이 정의된 JSON Schema를 엄격히 준수하도록 제어
  • Django 모델의 JSONField와 Pydantic의 model_dump()를 연동하여 데이터 타입 안정성이 보장된 DB 적재 파이프라인 구축
  • Celery 비동기 태스크 내에서 추출 결과의 confidence 필드 값을 기준으로 '자동 승인'과 '인간 검토(Human-in-the-loop)' 경로를 분기하는 라우팅 로직 설계
  • 프롬프트 설계와 스키마 설계를 통합하여 세만틱 일관성을 확보하고, 데이터 형식 오류를 원천 차단하는 아키텍처로 전환

- LLM 응답을 DB나 API로 전달할 때 정규표현식 기반 파싱 대신 Schema-based Generation 적용 검토 - Pydantic의 Literal 타입을 사용하여 LLM이 생성할 수 있는 값의 범위를 엄격히 제한 - confidence score 필드를 설계하여 저신뢰 데이터의 자동 필터링 및 수동 검토 프로세스 구축 - Constrained Decoding으로 인한 Latency 증가분이 실시간 서비스의 허용 범위 내인지 벤치마크 수행

원문 읽기