품질 게이트
모든 번역은 디스크에 기록되기 전에 결정론적 검증 게이트를 통과해요. 품질 게이트는 일반적인 기계 번역 실패 유형을 잡아냅니다 — 조용한 폴백도, 로케일 파일에 쓰레기 값이 기록되는 일도 없어요.
검증 검사
| 검사 | 잡아내는 항목 | 게이트 라벨 |
|---|---|---|
| Empty/blank | 모델이 빈 문자열 또는 공백을 반환한 경우 | [GATE] empty |
| Source echo | 모델이 원본 영어 입력을 그대로 반환한 경우 | [GATE] source-echo |
| Hallucination loop | 반복되는 trigram 패턴 (예: "Qo' Qo' Qo'") | [GATE] hallucination |
| Length inflation | 출력이 원본보다 현저히 긴 경우 | [GATE] length |
| Script compliance | 대상 로케일에 잘못된 스크립트인 경우 | [GATE] script |
| ICU plural categories | 로케일에 필요한 복수형 양식이 누락된 경우 | [GATE] icu-plural |
Empty/Blank
빈 문자열, 공백만 있는 문자열, 또는 null인 번역을 거부해요. 어려운 키에 대해 아무것도 반환하지 않는 모델을 잡아냅니다.
Source Echo
모델이 번역하지 않고 영어 원본 텍스트를 그대로 반환하는 경우를 감지해요. 짧은 문자열이나 명세가 불충분한 프롬프트에서 흔히 발생합니다.
Hallucination Loop
출력의 trigram(3자) 패턴을 분석해요. 출력 길이에 비해 특정 trigram이 임계값 이상으로 반복되면 번역을 거부합니다. "Qo' Qo' Qo' Qo' Qo'"와 같은 비정상적인 출력을 잡아냅니다.
Length Inflation
출력 길이가 maxLengthRatio × source length(기본값: 4×)을 초과하는 번역을 거부해요. 짧은 입력에 대해 긴 텍스트 덩어리를 생성하는 모델 환각을 잡아냅니다.
설정의 maxLengthRatio를 통해 구성할 수 있어요.
Script Compliance
script 필드가 구성된 로케일(예: Plains Cree Syllabics의 경우 "script": "cans")에 대해, 출력이 대상 스크립트에 적합한 비ASCII 문자를 포함하는지 검증해요. 아랍어, CJK, Syllabics 로케일에 대해 라틴 문자만 있는 출력은 거부됩니다.
실패 시 동작
- 실패한 번역은
[GATE]접두사, 키 이름, 사유, 값 미리보기와 함께 stderr에 기록돼요 - 해당 키는 로케일 파일에 기록되지 않아요
- 재시도 캐스케이드가 작동해요 (아래 참조)
[GATE] hero.title: source-echo — "Welcome to our platform"
[GATE] nav.about: hallucination — "À À À À À À À À"
재시도 캐스케이드
배치가 실패하면(JSON 파싱 오류 또는 품질 게이트 거부) champollion은 점점 더 작은 배치로 재시도해요:
Full batch (80 keys) → parse error
└→ Half batch (40 keys) → 2 failures
└→ Individual keys (1 each) → isolates the 2 problem keys
재시도 예산은 maxRetries(기본값: 3, 언어별로 구성 가능)로 제한돼요. 이는 지속적으로 실패하는 키에 대해 토큰 소비가 무한정 늘어나는 것을 방지합니다.
재시도를 모두 소진한 후에는 문제 키들이 기록되고 건너뛰어져요. 다음 sync 실행 시 다시 시도됩니다.
프롬프트 캐싱
시스템 메시지(레지스터, 문법 규칙, 스타일 노트)는 사용자 메시지(번역할 키)와 분리돼요. 이 분리는 의도적입니다:
- 시스템 메시지는 특정 로케일에 대해 배치 간 동일해요
- Anthropic 및 Google과 같은 제공자는 반복되는 시스템 메시지를 캐싱해요
- 결과: 첫 번째 배치는 전체 토큰 비용을 지불하고, 이후 배치는 사용자 메시지에 대해서만 지불해요
이는 배치가 많은 프로젝트에서 토큰 비용을 크게 줄일 수 있어요.
ICU MessageFormat 검증
integrity 명령은 ICU MessageFormat 복수형 패턴을 CLDR 복수형 규칙과 대조해 검증해요. 원본 파일이 다음과 같은 ICU 구문을 사용하는 경우:
"items": "{count, plural, one {# item} other {# items}}"
Champollion은 번역된 버전이 대상 로케일에 필요한 모든 복수형 카테고리를 포함하는지 확인해요. 예를 들어, 아랍어는 one와 other뿐만 아니라 여섯 개의 카테고리(zero, one, two, few, many, other)를 필요로 해요.
모든 로케일에 걸쳐 복수형 완전성을 확인하려면 champollion integrity를 실행하세요.
용어 적용
사전이 있는 코칭 쌍의 경우, champollion은 번역 후 용어 검사를 실행해요. 품질 게이트를 통과한 후, LLM이 실제로 필수 사전 용어를 사용했는지 검증합니다.
[TERM] en→fr: 2 term violation(s)
• hero.title: "dashboard" → expected "tableau de bord" but got "panneau de contrôle"
용어 위반은 차단 오류가 아니라 경고예요. 번역은 여전히 디스크에 기록돼요. 이는 의도적입니다 — LLM이 대안을 선택한 데에 타당한 이유(맥락, 문법)가 있을 수 있으며, 용어 불일치로 차단하면 득보다 실이 클 수 있기 때문이에요.
위반을 수정하려면 코칭 사전을 업데이트하거나 로케일 파일을 수동으로 편집하세요.
함께 보기
- 동기화 작동 방식 — 품질 게이트가 파이프라인의 어디에 위치하는지
- 번역 방법 — 게이트로 입력되는 방법들
- 스크립트 변환기 — 게이트 이후 스크립트 변환
- 코칭 데이터 — 상류에서 번역 품질 개선하기
- 번역 메모리 — 검증된 번역 캐싱하기
- CLI 레퍼런스 — sync — 재시도 동작을 포함한 sync 플래그
- CLI 레퍼런스 — integrity — ICU 복수형 감사