1 / 1
2-1
JEV & System One 완전정복 · 2강 / 4강 · 2-1 / 3

타입 안전 구조적 출력

왜 JEV는 스키마를 벗어난 답을 '만들 수 없는가' — 환각과 타입 에러가 수학적으로 불가능한 이유

생성 후 검증 vs 사전 정의된 출력 공간 · 계약이 코드와 모델 사이에 고정된다
문제 재확인

LLM은 '생성한 뒤에' 뜯어고친다

문자열1
JSON 강제2
다시 파싱3
검증4
생성 후 교정 파이프라인 — 매 단계마다 '어긋날 위험'이 새로 생긴다
📌
핵심 정리

LLM은 유효성 검증을 출력을 만든 뒤에 수행합니다. 문자열 생성 → JSON 강제 → 파싱 → 검증의 각 단계마다 스키마와 어긋난 값이 끼어들 수 있어, 타입 에러가 구조적으로 가능한 상태로 남습니다.

JEV의 반전

출력 공간을 '미리' 못 박는다

JEV는 순서를 뒤집습니다. 고를 수 있는 답을 미리 목록으로 정해두고, 그 목록 안에서만 하나를 고릅니다 — 목록에 없는 답은 아예 낼 수 없습니다. 이렇게 '가능한 답의 집합'을 스키마에 먼저 정의해 두는 방식이라, 생성이 아니라 선택·평가에 가깝습니다.

단계기존 LLMJEV
동작 방식문자열을 자유 생성정의된 집합에서 선택
출력 공간사실상 무한(모든 문자열)스키마로 사전 확정
검증생성 후 파싱·검증 필요불필요 (구조상 항상 유효)
스키마 밖 값지어낼 수 있음(환각)표현 자체가 불가능
🛡️ 스키마: 허용된 값만 통과
"billing" "technical" "account" "refund_v2"
스키마에 정의된 값만 나옵니다 — 목록 밖의 값은 표현 자체가 불가능합니다.

💡 핵심은 출력 공간이 스키마로 사전 확정된다는 점입니다. 후보 집합에 없는 값은 고를 수 없으므로, 스키마 밖의 값을 내는 일이 원천적으로 불가능합니다.

왜 환각이 불가능한가

환각은 '표현할 수 없는 것'이 된다

📥상태(state)비정형 입력
🔒타입 집합스키마로 사전 확정된
후보들만
🎯집합 안에서 결정밖의 값 = 표현 불가
데이터는 오직 정의된 타입 집합을 통과합니다 — 집합 밖으로 나가는 경로 자체가 없습니다
모델이 참조하는 후보 자체가 타입 집합 안의 값들뿐입니다. 집합 밖의 값은 애초에 후보에 없으므로, "지어낼" 대상이 존재하지 않습니다.
실무 효과

파싱 코드가 사라지고, 계약이 고정된다

0
환각 발생 건수 (스키마 밖 값 표현 불가)
0
파싱 실패 건수 (검증 단계 자체가 제거됨)
0
출력이 타입 계약을 만족하는 비율

💡 "출력이 맞는지 확인"하는 방어 코드가 없어진다는 건, 버그가 숨을 자리가 그만큼 줄어든다는 뜻입니다.

정리

2-1강 한 장 요약

Next up — 2-2강

타입은 안전해졌습니다. 그런데 왜 빠르기까지 한 걸까요? 2-2강에서는 병렬 샘플링의 원리를 파고듭니다. 토큰을 하나씩 만드는 자기회귀 대신, 모든 출력을 단일 쿼리로 한 번에 뽑아내는 방식이 어떻게 40–200배의 속도 차이를 만드는지 살펴봅니다.