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 프레임워크
참고 자료
- Structured Language Model Generation with Outlines — KDnuggets (2026-07-13)