피드로 돌아가기
Ollama Structured Outputs in Practice — Getting Type-Safe JSON from Local LLMs with Pydantic
Dev.toDev.to
AI/ML

Constrained Decoding 도입을 통한 JSON 파싱 성공률 100% 및 속도 6.4배 향상

Ollama Structured Outputs in Practice — Getting Type-Safe JSON from Local LLMs with Pydantic

Jangwook Kim2026년 6월 17일8intermediate

Context

Local LLM의 자연어 생성 특성으로 인해 JSON 응답 시 Markdown Code Fence나 설명 텍스트가 포함되는 현상 발생. 이로 인한 json.loads() 파싱 실패가 프로덕션 환경의 주요 장애 지점으로 작용.

Technical Solution

  • Ollama format 파라미터에 JSON Schema를 전달하여 추론 단계의 Constrained Decoding 적용
  • Schema 위반 토큰의 생성 확률을 0으로 설정하여 물리적으로 유효한 JSON 구조만 생성하도록 강제
  • Pydantic의 model_json_schema()를 활용하여 런타임에 Type-Safe한 JSON 스키마 자동 생성 및 주입
  • model_validate_json()을 통한 파싱과 데이터 검증을 단일 단계로 통합하여 런타임 타입 안정성 확보
  • 모델의 포맷팅 결정 과정을 제거함으로써 불필요한 토큰 생성 낭비 방지 및 추론 효율 극대화

Impact

  • 응답 생성 시간 31.84s에서 4.99s로 단축 (약 6.4배 성능 개선)
  • Markdown wrapper 제거를 통한 JSON 파싱 실패율 0% 달성

Key Takeaway

LLM의 출력을 사후에 정규식으로 정제하는 방식보다, 추론 단계에서 확률 분포를 제어하는 Constrained Decoding 방식이 신뢰성과 성능 면에서 압도적으로 유리함.


1. Local LLM 연동 시 prompt 지시어 대신 API 수준의 JSON Schema 제약 조건 사용 여부 확인

2. Pydantic 모델을 정의하여 Schema 생성과 Validation 로직을 일원화하고 Type-Safety 확보

3. ValidationError 발생 시 에러 메시지를 포함하여 재시도하는 Self-Correction 루프 설계 검토

4. 스키마 복잡도에 따라 경량 모델(Gemma4:e4b)과 고성능 모델(Gemma4:12b)을 분기하는 Model Routing 전략 적용

원문 읽기