6.3 LLM의 구조화 출력 기술 발전사 및 메커니즘
어떻게 하면 변덕스러운 거대 언어 모델(LLM)로부터 단 한 치의 오차도 없는 완벽한 JSON을 뽑아낼 수 있을까? 이는 AI 엔지니어들의 오랜 숙원이었다. 단순히 “JSON으로 줘“라고 애원하던 시절부터, 토큰 단위의 수학적 통제로 진화하기까지 ‘구조화 출력(Structured Outputs)’ 기술이 걸어온 발전사를 이해하는 것은, 결정론적 오라클을 설계하는 메커니즘을 꿰뚫는 핵심 열쇠다.
1. 1세대: 프롬프트 엔지니어링 (Prompt Engineering)
초창기 모델(GPT-3 시절)에서 구조화를 쟁취하는 유일한 무기는 프롬프트였다.
개발자들은 문자열 끝에 \n\n\``json을 강제로 붙여 모델이 어쩔 수 없이 대괄호({`)로 시작하게 유도하거나, “절대 부연 설명을 달지 마시오“라는 협박성 프롬프트를 시스템 메시지에 빽빽하게 채워 넣었다. 하지만 이 방식은 모델의 파라미터 업데이트나 미세한 파라미터(Temperature 등) 변화에도 쉽게 무너지는 극강의 브리틀니스(Brittleness)를 보여주었으며, 정규표현식(Regex)과 결합된 ‘두더지 잡기’ 식의 유지보수 지옥을 낳았다.
2. 2세대: 함수 호출과 도구 사용 (Function Calling / Tool Use)
패러다임의 혁신은 2023년 중반, 모델이 단순히 다음 토큰을 뱉어내는 대신 ’외부 함수를 호출하기 위해 스스로 인자(Arguments)를 조립’할 수 있도록 파인튜닝(Fine-tuning)된 Function Calling 기술의 등장과 함께 시작되었다.
개발자가 모델에게 get_user_info(name: string, age: int)라는 함수의 스펙(JSON Schema 형태)을 건네주면, 모델은 학습된 본능에 따라 사용자와의 자유로운 텍스트 대화를 멈추고 {"name": "Alice", "age": 28} 이라는 JSON 페이로드를 생성해 반환했다. 이 시기부터 LLM의 출력물을 파이썬의 json.loads()에 던져 넣었을 때 에러가 발생할 확률이 획기적으로 줄어들며, AI 모델을 기존의 소프트웨어 파이프라인에 조립하는 것이 현실화되었다.
하지만 이 역시 ’확률이 매우 높은 통계적 결과’일 뿐, 구조적 무결성(Structural Integrity)을 100% 보장하는 수학적 증명(Guaranteed)은 아니었다. 여전히 복잡한 중첩 구조에서는 환각이 발생했다.
3. 3세대: JSON 모드 (JSON Mode)
벤더들은 모델이 오직 JSON 형태의 구문(Syntax)만을 반환하도록 강제하는 ‘JSON 모드’ 응답 옵션을 속속 출시했다. 이를 활성화하면, 모델은 중괄호의 짝이 맞는지, 따옴표가 제대로 이스케이프(Escape) 되었는지에 대한 문법적 완벽성을 갖춘 JSON 문자열을 생성해 냈다.
그러나 JSON 모드의 한계는 ’구문(Syntax)’은 맞을지언정 ’스키마(Schema)’가 의도한 대로 나왔느냐는 보장할 수 없다는 점에 있었다. 모델은 완벽한 JSON 포맷형식으로 우리가 전혀 묻지도 않은 {"unknown_field": "hallucinated_data"}를 뱉어내며 정적 타이핑 생태계를 또다시 파괴했다.
4. 4세대 (SOTA): 제약 기반 디코딩 (Constrained Decoding)
현재 LLM 업계의 기술적 정점이자 궁극의 오라클 통제망은 바로 **제약 기반 디코딩(Constrained Decoding)**이다. 대표적으로 OpenAI의 Structured Outputs (strict: true) 옵션이나 오픈소스 Outlines 라이브러리가 이 메커니즘을 사용한다.
이 기술은 본질적으로 모델의 ‘생성 과정(Decoding)’ 자체에 물리적으로 개입한다.
- FSM (Finite State Machine) 컴파일: 사용자가 던진 JSON Schema가 백엔드에서 실시간으로 정규 문법인 유한 상태 기계(FSM)로 컴파일된다.
- 토큰 마스킹 (Logit Masking): 모델이 매번 다음 토큰을 고를 때, FSM을 통과할 수 없는 모든 어휘(Token)의 확률(Logit) 값을 마이너스 무한대(
-inf)로 강제로 덮어씌운다. - 예시: 모델이
{"age":까지 생성했을 때, 사전 학습된 지식에 의해"twenty"라는 문자열을 쓰고 싶어 하더라도, FSM이"type": "integer"를 요구하고 있다면 알파벳 토큰들의 확률은 0%가 되고 오직 숫자 토큰들 중에서만 샘플링이 이루어진다.
제약 기반 디코딩은 LLM을 사실상 **‘신경망(Neural Network)을 엔진으로 달고 있는 결정론적 FSM’**으로 변모시킨다. 이 4세대 기술이 탄생하면서, 비정형 텍스트에 의존하던 블랙박스 오라클은 완벽하게 사라지고, 그 자리에 데이터 정합성이 수학적으로 증명(Guaranteed)되는 진정한 의미의 확정적 검증 오라클 시스템을 구축할 수 있는 기반이 마련되었다.