Constrained Decoding
제약 디코딩(Constrained Decoding)이 유효한 JSON, 스키마, 문법, 도구 출력을 강제하여 AI 응답을 더 안전하고 구조화하며 소프트웨어가 쉽게 파싱할 수 있도록 만드는 방법을 알아보세요.
제약 디코딩은 생성 모델이 각 토큰을 생성할 때 유효한 출력만 생성하도록 제한하는 추론 기법입니다. 모델이 전체 어휘에서 선택할 수 있도록 허용하는 대신, 디코더는 허용된 레이블 목록, 정규표현식, 문법 또는 JSON Schema와 같은 규칙을 위반하는 선택지를 제거합니다. 이를 통해 소프트웨어가 모델 응답을 더 쉽게 안전하게 파싱할 수 있으며, 특히 AI 시스템이 구조화된 데이터를 반환하거나 허용된 액션을 선택해야 할 때 유용합니다.
제약 디코딩의 작동 방식#
자기회귀 언어 모델은 한 번에 하나의 토큰씩 시퀀스를 생성합니다. 각 단계에서 모델은 가능한 다음 토큰에 로짓이라는 점수를 부여하고 일반적으로 softmax를 사용하여 이를 확률로 변환합니다. 제약 디코딩은 다음과 같은 추가 필터링 단계를 삽입합니다.
- 이미 생성된 출력 부분을 추적합니다.
- 제약 조건 하에서 어떤 다음 토큰이 유효한 상태로 유지되는지 확인합니다.
- 유효하지 않은 토큰의 확률이 0이 되도록 마스킹합니다.
- 나머지 유효한 토큰 중에서 선택하거나 샘플링합니다.
- 제약 조건 상태를 업데이트하고 반복합니다.
유효한 집합은 동적으로 변경됩니다. 예를 들어 {"status": "을 생성한 후 스키마는 "approved", "rejected" 또는 "review"을 완성할 수 있는 토큰만 허용할 수 있습니다. vLLM structured outputs를 제공하는 엔진은 선택지, 정규표현식, 문법 및 JSON 스키마를 강제할 수 있으며, Outlines JSON generation은 스키마 또는 타입이 지정된 Python 모델에서 제약 조건을 유도할 수 있습니다.
그래프 제약 디코딩은 유효한 시퀀스를 그래프나 상태 머신을 통과하는 경로로 표현하는 구현 방식을 설명합니다. 생성된 각 토큰은 디코더를 다른 상태로 이동시키며, 해당 상태의 나가는 간선이 다음 유효한 선택지를 정의합니다. 이 접근 방식은 문법, 엔티티 관계 및 기타 상태 종속 규칙에 유용합니다.
관련 개념 및 주요 차이점#
제약 디코딩은 여러 AI 개념과 밀접하게 연결되어 있지만 상호 교환이 가능하지는 않습니다.
- Structured outputs: 필수 필드와 데이터 타입을 가진 객체와 같은 원하는 결과물입니다. 제약 디코딩은 해당 결과물을 생성하는 데 사용되는 메커니즘 중 하나입니다. OpenAI Structured Outputs, Claude structured outputs, Gemini structured outputs를 포함한 서비스는 스키마 기반 제어를 제공합니다.
- JSON 모드: 일반적으로 유효한 JSON 구문을 보장하지만 특정 키, 타입 또는 허용된 값을 강제하지 않을 수 있습니다. 스키마 제약 디코딩은 특정 구조를 타겟으로 합니다.
- Function calling and tool use: 모델이 외부 연산을 요청하는 방식을 정의합니다. 제약 디코딩은 유효한 함수 이름과 인자 형태를 강제할 수 있지만, 애플리케이션은 여전히 툴을 실행하고 권한을 부여합니다.
- Prompt engineering: 모델에게 지시사항을 통해 형식을 따르도록 요청합니다. 이는 동작에 영향을 주지만 유효하지 않은 토큰을 기계적으로 제거하지는 않습니다.
- Speculative decoding: 토큰을 제안하고 검증하여 생성을 가속화합니다. 주요 목표는 속도인 반면, 제약 디코딩은 유효성을 제어합니다.
타입이 지정된 시스템은 모든 규칙을 수동으로 작성하는 대신 Pydantic JSON Schema와 같은 툴을 통해 스키마를 정의할 수 있습니다.
실제 적용 사례#
문서 처리: 인보이스 처리 시스템은 스캔된 문서에서 vendor, invoice_number, total, currency을 추출할 수 있습니다. 제약 디코딩은 응답이 회계 소프트웨어로 들어가기 전에 예상되는 키와 데이터 타입을 갖도록 보장합니다. 추출된 총액이 사실상 정확하다는 것을 보장할 수는 없지만 잘못된 형식의 페이로드를 방지합니다.
비전 기반 안전 자동화: 시스템은 Ultralytics YOLO26을 사용하여 작업자와 보호구를 감지한 다음 관련 관측값을 언어 모델에 보낼 수 있습니다. 디코더는 모델의 결정을 no_action, manual_review, send_alert으로 제한할 수 있습니다. Ultralytics Platform Agents workflow에서는 비전 모델, 조건, 언어 모델, 액션을 연결하여 자격을 갖춘 이미지만 다음 단계로 진행되도록 할 수 있습니다.
실무 워크플로 예시#
컴퓨터 비전 예측은 토큰별로 생성되는 것이 아니라 이미 구조화되어 있습니다. 다음 YOLO Predict mode 워크플로는 다운스트림 제약 언어 모델 결정의 입력이 될 수 있는 JSON을 생성합니다.
from ultralytics import YOLO
# Load the recommended object detection model
model = YOLO("yolo26n.pt")
# Run inference and select the first result
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Serialize detections for a downstream constrained decoder
json_output = result.to_json()
print(json_output)여기서 to_json()은 제약 디코딩이 아니라 결정론적 직렬화를 수행합니다. 제약 단계는 생성 모델이 이러한 감지를 스키마 제한 보고서나 액션으로 변환하는 경우 나중에 발생합니다.
이점, 한계 및 권장 사항#
제약 디코딩은 파싱 실패, 재시도, 예상치 못한 필드 및 유효하지 않은 툴 인자를 줄여줍니다. 그러나 구조적 유효성이 LLM hallucinations을 없애는 것은 아닙니다. 완벽하게 형성된 응답이라도 여전히 잘못된 사실이나 부적절한 액션을 포함할 수 있습니다.
좁은 스키마, 의미 있는 필드 설명, 닫힌 선택지에 대한 enum, 정보가 없을 수 있는 경우 널(nullable) 가능 필드를 사용하세요. 생성 후 비즈니스 규칙을 검증하고, 거부 및 잘린 응답을 처리하며, 각 제공자가 지원하는 스키마 서브셋을 테스트하세요. 프로덕션에서는 형식 준수 여부만 평가하는 대신 스키마 컴파일 오버헤드, 디코딩 지연 시간, 시맨틱 정확도도 측정하세요.









