본문으로 건너뛰기

AWS에서 Dottxt Outlines를 활용한 LLM 구조화된 출력 생성 가이드

AWS SageMaker와 .txt의 Outlines 프레임워크를 결합하여 LLM이 정해진 스키마를 엄격히 따르는 구조화된 데이터를 생성하는 방법과 이점을 다룹니다.

섹션별 상세

01
구조화된 출력은 LLM 응답을 JSON Schema, Enum, 정규 표현식 등 미리 정의된 형식에 맞게 강제하는 기술이다. 이는 단순한 텍스트 생성을 넘어 금융 보고서, 의료 기록, 전자상거래 물류 등 정확한 데이터 교환이 필요한 비즈니스 워크플로우에 LLM을 통합하는 데 필수적이다.
02
Outlines 프레임워크는 '생성 시간 검증(Generation-time validation)'이라는 고급 접근 방식을 사용한다. 모델이 토큰을 생성할 때마다 로짓 프로세서가 개입하여 정의된 문법에 어긋나는 토큰의 확률을 0%로 설정함으로써, 생성 완료 후 검증하는 방식보다 훨씬 빠르고 정확하게 형식을 준수한다.
03
Outlines 도입 시 표준 생성 방식 대비 최대 5배 빠른 속도와 98%의 스키마 준수율을 달성할 수 있다. 이는 유효하지 않은 경로를 미리 차단하여 모델의 의사결정을 단순화하고 계산 리소스를 절감하기 때문에 가능하며, 추론 시 추가적인 연산 오버헤드가 거의 발생하지 않는다.
python
from pydantic import BaseModel
from outlines import models, generate

class Patient(BaseModel):
    id: int
    name: str
    diagnosis: str
    age: int

model = models.transformers("microsoft/DialoGPT-medium")
generator = generate.json(model, Patient)

prompt = "Create a patient record for John Smith, 45, with diabetes"
result = generator(prompt)
print(result.name) # "John Smith"

Pydantic 모델을 사용하여 Outlines에서 구조화된 JSON 생성을 설정하는 기본 예시

04
AWS 환경에서는 SageMaker Marketplace를 통해 .txt의 dotjson 솔루션을 직접 배포할 수 있다. DeepSeek-R1-Distill-Qwen-32B와 같은 모델을 엔드포인트로 배포하면 API 호출 시 response_format 파라미터에 JSON 스키마를 전달하는 것만으로 즉시 구조화된 출력을 얻을 수 있다.
python
payload = {
    "messages": [
        {"role": "user", "content": f"Create a medical record from: {structured_data}"}
    ],
    "response_format": {
        "type": "json_schema",
        "json_schema": {
            "name": "Medical Record",
            "schema": {
                "properties": {
                    "patient_id": {"type": "integer"},
                    "diagnosis": {"type": "string"},
                    "treatment": {"type": "string"}
                },
                "required": ["patient_id", "diagnosis", "treatment"]
            }
        }
    }
}
response = runtime.invoke_endpoint(EndpointName=endpoint_name, Body=json.dumps(payload))

AWS SageMaker 엔드포인트에 JSON 스키마 제약 조건을 포함하여 요청을 보내는 방법

05
구조화된 출력을 구현하는 대안으로 Amazon Nova의 toolConfig, Instructor, LMQL, Guidance 등이 존재한다. Instructor는 사후 검증 및 재시도 방식을 사용하며, Outlines는 토큰 레벨의 제약 조건을 통해 지연 시간을 최소화하므로 실시간성이 중요한 서비스에 더 적합하다.

용어 해설

구조화된 출력(Structured Output)
LLM이 생성하는 텍스트가 JSON, XML 등 미리 정의된 특정 형식이나 스키마를 엄격히 따르도록 강제하는 기술이다. 이는 AI 응답을 기존 데이터베이스나 API 시스템에 오류 없이 통합하기 위해 필수적이다.
제약된 디코딩(Constrained Decoding)
모델이 다음 토큰을 생성할 때 문법적으로 유효한 토큰만 선택하도록 확률 분포를 조정하는 기법이다. 생성 후 검증하는 방식과 달리 생성 과정 자체에서 오류를 차단하여 효율성을 높인다.
로짓 프로세서(Logits Processor)
모델의 출력값인 로짓(Logits)을 변형하여 특정 토큰의 생성 확률을 0으로 만들거나 조정하는 구성 요소이다. Outlines는 이를 통해 정의된 스키마에 어긋나는 토큰이 생성되지 않도록 제어한다.
유한 오토마타(Finite Automata)
상태와 전이 규칙을 가진 추상적 기계 모델로, 정규 표현식이나 문법의 유효성을 검사하는 데 사용된다. Outlines는 정규식을 오토마타로 변환하여 실시간으로 유효한 다음 토큰 후보를 결정한다.
JSON 스키마(JSON Schema)
JSON 데이터의 구조를 정의하고 유효성을 검사하기 위한 표준 명세이다. 데이터 타입, 필수 필드, 값의 범위 등을 명시하여 시스템 간 데이터 교환의 정확성을 보장한다.

기술

  • Outlines
  • AWS SageMaker
  • Pydantic
  • Boto3
  • DeepSeek-R1
  • Amazon Bedrock

활용 사례

  • 금융 거래 데이터 추출
  • 의료 기록 자동화
  • 전자상거래 인보이스 생성
  • 고객 지원 케이스 요약 및 CRM 통합
AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 02. 25.수집 2026. 02. 25.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.