12개의 대규모 언어 모델(LLM) API를 대상으로 한 새로운 벤치마크 결과에 따르면, 거의 모든 서비스가 요청된 스키마와 일치하는 JSON을 반환하지만, 상당수의 모델이 사실과 다른 값을 출력하는 것으로 나타났습니다. 동일한 스키마에 대한 토큰 비용은 수십 토큰에서 거의 5,000 토큰까지 크게 요동칩니다. 추출 파이프라인이나 데이터 기반 에이전트를 구축하는 개발자들은 이제 "스키마 유효성(schema-valid)"을 "정확성(correct)"의 대리 지표로 더 이상 신뢰할 수 없게 되었습니다.

이 테스트가 중요한 이유

API 제공업체들은 파싱 오류를 제거하는 방법으로 '구조화된 출력(structured output)'을 홍보해 왔습니다. 그 약속은 간단합니다. 모델에 JSON 스키마를 제공하면, 개발자가 취약한 후처리 코드를 작성하지 않아도 모델이 필드를 채워준다는 것입니다. 실제로 많은 운영 시스템이 시스템 충돌을 방지하고 다운스트림 분석 파이프라인을 깨끗하게 유지하기 위해 이미 이 보장에 의존하고 있습니다. 만약 이 보장이 절반만 사실일 경우, 버그가 조용히 침투하고 토큰 사용량에 기반한 비용 계산이 크게 어긋나게 됩니다.

좋은 소식: 스키마가 이제 대부분 강제 적용됩니다

  • 테스트 스위트의 대부분의 모델이 엄격한 검증기를 통과하는 JSON을 생성했습니다.
  • 제약된 디코딩(Constrained decoding) – 디코더를 스키마에 고정하는 모델은 불필요한 문자를 내뱉을 수 없으므로, 형식이 잘못된 페이로드는 사실상 사라졌습니다.
  • 파싱 오류율 – 개발자들은 더 이상 JSON 구문 오류를 방지하기 위해 모든 호출을 try-catch 블록으로 감쌀 필요가 없습니다.

나쁜 소식: 유효성 ≠ 정확성

유효한 형태가 유효한 값을 보장하지는 않습니다. 12개의 모델 중 4개(DeepSeek V4, Qwen, GLM-5.2 — 후자의 두 모델은 보고서에서 두 가지 다른 이름으로 등장함)는 '사고(thinking)' 또는 '생각의 사슬(chain-of-thought)' 모드가 켜져 있을 때, 완벽한 형태의 JSON을 생성하면서도 잘못된 숫자를 포함했습니다.

  • Qwen 모델의 경우, 추론 기능이 활성화되었을 때 단순 산술 추출의 정확도는 16개 중 1개였으나, 추론 기능을 비활성화했을 때는 8개 중 8개로 나타났습니다.
  • DeepSeek V4 Pro도 유사한 변화를 보였습니다. 모델이 단계별 설명을 멈추자 추출 정확도가 1/8에서 7/8로 상승했습니다.

추가적인 추론 단계가 제약된 디코더를 방해하여, 모델이 외부 괄호는 준수하면서도 환각(hallucination) 상태로 빠져들게 만듭니다.

추악한 이면: 토큰 비용의 반전과 무시된 파라미터

  • Claude의 응답 형식 – OpenAI 호환 엔드포인트를 통해 접근할 때, Claude는 response_format 플래그를 완전히 무시하여 스키마를 준수하는 출력이 **0%**였습니다. 이 모델은 구조화된 호출을 지원하지만, Anthropic의 네이티브 도구 호출(tool-call) 인터페이스를 통해서만 가능합니다.
  • 스키마 토큰 인플레이션 – 12KB 정도의 적당한 스키마가 DeepSeek에서는 30 토큰의 비용이 들지만, Claude에서는 동일한 페이로드가 4,959 토큰을 소모했습니다.
  • 과금 불일치 – 일부 제공업체는 스키마를 프롬프트의 일부로 간주하여 소비되는 모든 토큰에 대해 비용을 청구하는 반면, 다른 업체들은 이를 무료 오버레이로 취급합니다. 대규모 운영 시, 스키마 비용이 모델이 생성한 콘텐츠 비용을 능가할 수 있습니다.

개발자가 지금 해야 할 일

  1. 형태뿐만 아니라 값도 검증하십시오 – 스키마 검증기는 값이 예상된 유형에 맞더라도 잘못된 숫자 답변을 잡아내지 못합니다. 도메인 특화 검증(범위, 단위, 필드 간 일관성 등)을 추가하십시오.
  2. 추출 작업 시에는 사고(chain-of-thought) 기능을 끄십시오 – DeepSeek, Qwen, GLM 모델을 사용할 때 신뢰할 수 있는 필드 채우기가 필요하다면 추론 기능을 꺼야 합니다. 추가적인 추론 단계는 선택 사항이지 정확성을 위한 필수 사항이 아닙니다.
  3. 토큰 사용량을 감사하십시오 – 각 요청이 스키마 부분을 포함하여 얼마나 많은 토큰을 소비하는지 기록하고, 대규모 배포를 결정하기 전에 여러 벤더의 비용을 비교하십시오.
  4. 이식성을 테스트하십시오 – OpenAI에서 작동하는 스키마가 Gemini나 Claude에서는 조용히 무시될 수 있습니다. 코드를 배포하기 전에 각 대상 플랫폼에서 신속하게 무결성 검사를 수행하십시오.

벤더 측의 반론

일부 제공업체는 '사고' 모드가 단순 추출 정확도보다 설명이 더 중요한 작업에 적합한, 개발자의 선택 사항이라고 주장합니다. Claude는 response_format 플래그를 무시하는 대신 Anthropic 네이티브 도구 호출을 사용할 것을 권장합니다. 이러한 설명은 기술적으로는 옳지만, 어떤 모드를 선택해야 할지, 숨겨진 토큰 비용을 어떻게 예산에 반영할지에 대한 부담을 개발자에게 전가하는 것입니다.

결론

JSON 스키마는 더 이상 안전망이 아닙니다. 그것은 그저 형태일 뿐입니다. 데이터 내부의 내용이 실제와 일치하는지 확인하고, 숨겨진 토큰 비용을 주시하며, 모델의 '사고' 과정이 가장 깔끔해 보이는 출력물조차 오염시킬 수 있음을 명심하십시오.