소형 로컬 모델은 JSON을 출력할 때 왜 더 많이 환각하나요?

에바 왕기술 작가 그리고 이자 ZimaSpace의 상주 장인입니다. 평생을 기술에 열정을 가진 사람으로서 홈랩과 오픈소스 소프트웨어에 열정을 가지고 있으며,복잡한 기술 개념을 쉽게 이해할 수 있는 실습 가이드로 번역하는 데 전문성을 가지고 있습니다.에바는 셀프 호스팅이 어렵지 않고 재미있어야 한다고 믿습니다. 그녀의 튜토리얼을 통해 커뮤니티가 하드웨어 설정의 신비를 풀도록돕고 있습니다. 첫 NAS 구축부터 Docker 컨테이너 마스터링까지.

소형 로컬 모델은 엄격한 스키마와 유효한 구문을 유지하면서 동시에 작업을 해결해야 하므로 JSON을 출력할 때 환각을 더 많이 일으킵니다.

홈 AI 워크플로에서는 소형 모델에 파일 이름, 날짜, 태그, 장치 상태 또는 자동화 인수를 추출해 기계가 읽을 수 있는 JSON으로 반환하도록 요청할 수 있습니다. 모델은 한 가지 작업만 수행하는 것이 아닙니다. 올바른 사실을 식별하고, 이를 의도한 필드에 매핑하며, 필수 유형과 열거형을 준수하고, 구두점과 중첩 구조를 기억한 뒤, 설명을 덧붙이지 않고 멈춰야 합니다. 모델의 용량이 제한적이면 이러한 제약이 값을 사실에 근거하도록 유지하는 데 필요한 추론 능력과 서로 경쟁하게 됩니다.

JSON은 정확성을 두 계층의 문제로 만듭니다

답변은 의미적으로 정확하면서 동시에 구조적으로 유효해야 합니다. 자유 형식의 답변은 불확실성을 표현하거나 누락된 값을 설명할 수 있지만, JSON 계약에서는 근거가 약하더라도 모델이 필드 값을 선택해야 하는 경우가 많습니다.

유효성과 정확성의 상충 관계에 관한 연구는 이러한 측정값을 분리해서 다뤄야 하는 이유를 보여 줍니다. 출력 제약을 강화하면 스키마 유효성은 향상될 수 있지만, 선택된 값의 정확성은 낮아질 수 있습니다.

이러한 압박은 소형 로컬 모델에서 더욱 뚜렷합니다. 지시 추적, 추출, 직렬화를 처리할 여유 용량이 적기 때문입니다. 대형 모델도 필드를 지어낼 수 있지만, 소형 모델은 형식 준수가 답변 품질을 밀어내는 지점에 더 빨리 도달합니다.

유효한 객체에도 환각된 답변이 포함될 수 있습니다

제약 디코딩은 잘못된 중괄호, 알 수 없는 키 또는 유효하지 않은 열거형 값이 출력되는 것을 막을 수 있습니다. 하지만 선택한 고객 ID, 날짜, 경로 또는 상태가 원본 자료에 실제로 존재하는지는 증명하지 못합니다.

vLLM은 JSON 스키마 제약을 생성된 출력의 형식을 제한하는 방법으로 설명합니다. 디코더는 다음에 올 수 있는 토큰을 좁히지만, 해당 토큰이 전달하는 의미는 여전히 모델이 제공합니다.

이로 인해 자동화에서 위험한 실패가 발생합니다. 객체는 성공적으로 파싱되므로 후속 코드가 이를 신뢰하지만, 그중 한 필드는 조작된 값일 수 있습니다. 파싱 성공을 사실적 정확성으로 간주하지 말고, 스키마 검증 후에 비즈니스 규칙과 원본 근거를 검증하세요.

중첩 스키마는 분기와 상태 추적을 늘립니다

필수 속성, 선택적 분기, 중첩 배열, null 허용 필드, 열거형이 추가될 때마다 모델이 생성 과정 전체에서 추적해야 할 상태가 늘어납니다. 비슷한 키 이름이나 반복되는 객체 구조는 올바른 값을 잘못된 위치에 배치하기 쉽게 만듭니다.

llama.cpp의 문법 제약 JSON 가이드는 허용되는 출력 문법과 필드의 의미를 설명하는 프롬프트를 구분합니다. 문법은 구조를 강제할 수 있지만, 스키마에는 여전히 명확한 의미 지침이 필요합니다.

동시에 내려야 하는 결정의 수를 줄이세요. 깊게 중첩된 객체를 평탄화하고, 사용하지 않는 선택적 필드를 제거하며, 서로 구분되는 키 이름을 사용하세요. 로컬 모델이 관련 없는 필드를 반복해서 뒤바꾸거나 채운다면 대규모 추출 작업을 더 작은 객체로 나누세요.

JSON 전용 프롬프트는 유용한 추론을 억제할 수 있습니다

“JSON만 반환”이라는 엄격한 지시는 모델이 즉시 답변을 포장하도록 만듭니다. 어려운 추출 작업에서는 모델이 서로 경쟁하는 구절을 비교하거나 모호한 날짜를 해결하기 전에 필드 값을 성급하게 선택할 수 있습니다.

Hugging Face 평가 결과는 프롬프트 형식의 민감도를 보여 줍니다. 기본 질문이 같더라도 예상 구조와 추론에 사용할 수 있는 공간을 바꾸면 작업 성능이 달라질 수 있습니다.

비공개 사고 연쇄를 노출하지 말고, 내부 작업 해결과 최종 직렬화를 분리하세요. 먼저 간결한 근거 기록을 추출하거나 결정론적 조회를 수행한 다음, 검증된 필드만 출력하도록 모델에 요청할 수 있습니다.

프롬프트 기반 JSON과 제약 디코딩은 서로 다르게 실패합니다

프롬프트만 사용하는 JSON 출력은 코드 펜스, 설명, 중복 키, 후행 쉼표 또는 끝나지 않은 객체를 추가할 수 있습니다. 제약 디코딩은 많은 구문 오류를 제거하지만, “알 수 없음”이 허용되지 않은 경우 유효한 값 중 하나를 선택하도록 모델을 강제할 수 있습니다.

Fireworks는 스키마로 제한된 토큰 선택이 생성 과정에서 출력 계약을 지키게 하면서도, 프롬프트가 의도한 데이터를 정확히 설명해야 한다고 설명합니다.

두 가지 실패 유형을 모두 추적하세요. 프롬프트만 사용한 출력에서는 파싱 실패를 측정하고, 제약 디코딩을 활성화한 후에는 잘못되었지만 유효한 필드, 원치 않는 기본값, 근거 없는 확신을 측정하세요.

샘플링과 잘림은 작은 오류를 증폭합니다

온도가 높으면 키 선택과 필드 값이 달라질 수 있으며, 토큰 예산이 부족하면 배열이나 닫는 중괄호가 잘릴 수 있습니다. 온도를 낮추면 변동성은 줄어들지만, 근거 없는 값이 사실이 되는 것은 아닙니다.

로컬 구조화 출력 파이프라인에 관한 실용적인 검토는 검증과 제약 생성이 하나의 프롬프트 기법이 아니라 서로 분리된 구성 요소인 이유를 보여 줍니다.

가장 큰 합법적 객체를 출력할 수 있도록 충분한 토큰을 확보하고, 배열 길이를 제한하며, 실패한 부분만 재시도하세요. 전체 객체를 다시 생성하면 이미 올바른 필드가 새로운 환각으로 대체될 수 있습니다.

2단계 로컬 JSON 파이프라인을 사용하세요

먼저 작업을 최소한의 유형화된 레코드로 정리하세요. 여기에는 정확한 원본 구간, 정규화된 날짜, 선택된 식별자, 신뢰도 상태, 명시적으로 누락된 값이 포함될 수 있습니다. 이 단계에서는 필수 데이터가 없을 때 지어내지 말고 요청을 거부할 수 있어야 합니다.

그런 다음 스키마 제약 디코더를 통해 해당 레코드를 렌더링하고, 이를 파싱한 뒤 파일 존재 여부, 날짜 범위, 열거형 호환성, 필드 간 일관성 등을 의미적으로 검사하세요. 검증기는 수정해야 할 필드를 식별하는 구체적인 오류를 반환해야 합니다.

ZimaSpace가 소형 모델이 더 안정적일 수 있는 이유를 설명한 내용은 경계를 제시합니다. 소형 모델은 작업, 컨텍스트, 도구 세트, 출력 계약이 검증할 수 있을 만큼 좁을 때 가장 잘 작동합니다.

FAQ

유효한 JSON이면 모델이 환각을 일으키지 않았다는 뜻인가요?

아니요. 유효한 JSON은 객체가 구문 또는 스키마 규칙을 따른다는 사실만 증명합니다. 필드 값이 원본에서 가져왔거나 실제 시스템 상태와 일치한다는 것을 증명하지는 않습니다.

온도를 0으로 설정하면 JSON 환각이 해결되나요?

아니요. 출력의 반복 가능성은 높일 수 있지만, 근거 없는 값이 일관되게 선택되더라도 여전히 환각입니다.

자동화에는 제약 디코딩만으로 충분한가요?

아니요. 원본에 근거한 추출, 스키마 파싱, 의미 검증, 누락되었거나 모호한 데이터에 대한 안전한 거부 경로와 함께 사용하세요.

기술 및 AI 허브

더 읽어보기

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.