AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

Outlines 팁 – JSON·선택지 출력을 토큰 단계에서 강제하기

Outlines는 LLM의 구조화 출력을 프롬프트 후처리로 고치는 대신, 생성 중에 허용되지 않는 토큰을 막는 방식의 오픈소스 라이브러리다. JSON, Pydantic 모델, 정해진 선택지 같은 출력 형식이 필요한 파이프라인에서 유용하다.

핵심 원리

일반적인 구조화 출력은 “반드시 JSON으로 답하라”는 프롬프트에 기대고, 실패하면 파서 오류를 잡아 재시도한다. Outlines는 이 과정을 한 단계 앞당긴다. 원하는 타입이나 문법을 유한 상태 기계처럼 구성하고, 모델이 다음 토큰을 고를 때 문법상 불가능한 토큰을 마스킹한다.

따라서 출력이 생성된 뒤 깨진 JSON을 수리하는 방식보다 실패 공간이 작다.

대표 사용 패턴

패턴예시
제한 선택지Literal["Positive", "Negative", "Neutral"] 중 하나만 생성
Pydantic 객체필드와 타입이 정해진 JSON 객체 생성
REST API 응답API 스키마에 맞는 순수 JSON 생성
pip install outlines[transformers]
import outlines
from typing import Literal

sentiment = model(
    "Classify: I've been waiting two weeks for delivery.",
    Literal["Positive", "Negative", "Neutral"],
)

언제 쓰면 좋은가

  • LLM 출력을 바로 데이터베이스나 API에 넣어야 할 때
  • 분류 라벨이 제한된 값 집합 안에 있어야 할 때
  • JSON 파싱 실패로 재시도 비용이 커지는 배치 파이프라인
  • llm-guardrails처럼 출력 형식과 안전 규칙을 별도로 검증해야 하는 시스템

한계

형식을 강제해도 내용의 사실성까지 보장되지는 않는다. 예를 들어 JSON 스키마가 맞아도 필드 값이 틀릴 수 있고, 선택지는 유효해도 분류 기준이 잘못될 수 있다. Outlines는 파서 안정성을 높이는 도구이지 평가 데이터, 검증 규칙, 비즈니스 로직을 대체하지 않는다.

관련 문서

  • llm-tips-output-control — 파인튜닝 없이 AI 출력을 더 잘 제어하는 방법
  • llm-guardrails — LLM 출력의 환각과 장황함을 측정·통제하는 인프라
  • pydantic-ai — 타입 안전한 구조화 출력과 도구 호출을 제공하는 Python 프레임워크

참고 자료



AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)