Portão de Qualidade
Toda tradução passa por um portão de validação determinístico antes de ser escrita no disco. O portão de qualidade captura modos de falha comuns em tradução automática — sem fallbacks silenciosos, sem lixo escrito nos seus arquivos de locale.
Verificações de Validação
| Verificação | O Que Detecta | Rótulo do Portão |
|---|---|---|
| Vazio/em branco | Modelo retornou string vazia ou apenas espaços em branco | [GATE] empty |
| Eco da fonte | Modelo retornou o texto original em inglês | [GATE] source-echo |
| Loop de alucinação | Padrões de trigrama repetidos (ex: "Qo' Qo' Qo'") | [GATE] hallucination |
| Inflação de comprimento | Saída significativamente mais longa que a fonte | [GATE] length |
| Conformidade de script | Script errado para o locale de destino | [GATE] script |
| Categorias plurais ICU | Formas plurais obrigatórias ausentes para o locale | [GATE] icu-plural |
Vazio/Em Branco
Rejeita traduções que são strings vazias, apenas espaços em branco, ou null. Isso captura modelos que não retornam nada para chaves difíceis.
Eco da Fonte
Detecta quando o modelo retorna o texto fonte em inglês em vez de traduzi-lo. Comum com strings curtas e prompts mal especificados.
Loop de Alucinação
Analisa padrões de trigrama (3 caracteres) na saída. Se algum trigrama se repete mais que um número limite de vezes em relação ao comprimento da saída, a tradução é rejeitada. Isso captura saídas degeneradas como "Qo' Qo' Qo' Qo' Qo'".
Inflação de Comprimento
Rejeita traduções onde o comprimento da saída excede maxLengthRatio × source length (padrão: 4×). Isso captura alucinações do modelo que produzem paredes de texto para uma entrada curta.
Configurável via maxLengthRatio na sua configuração.
Conformidade de Script
Para locales com um campo script configurado (ex: "script": "cans" para Silábicos Plains Cree), valida que a saída contém caracteres não-ASCII apropriados para o script de destino. Saída apenas em Latin para um locale árabe, CJK ou Silábicos é rejeitada.
O Que Acontece em Caso de Falha
- A tradução que falhou é registrada em stderr com um prefixo
[GATE], o nome da chave, o motivo e uma prévia do valor - A chave não é escrita no arquivo de locale
- A cascata de retry é acionada (veja abaixo)
[GATE] hero.title: source-echo — "Welcome to our platform"
[GATE] nav.about: hallucination — "À À À À À À À À"
Cascata de Retry
Quando um lote falha (erro de parse JSON ou rejeições do portão de qualidade), champollion tenta novamente com lotes progressivamente menores:
Full batch (80 keys) → parse error
└→ Half batch (40 keys) → 2 failures
└→ Individual keys (1 each) → isolates the 2 problem keys
O orçamento de retry é limitado por maxRetries (padrão: 3, configurável por idioma). Isso previne gasto de tokens descontrolado em chaves que falham consistentemente.
Após esgotar os retries, as chaves problemáticas são registradas e puladas. Elas serão retentadas na próxima execução de sync.
Cache de Prompt
A mensagem do sistema (registro, regras de gramática, notas de estilo) é separada da mensagem do usuário (as chaves a traduzir). Essa separação é intencional:
- A mensagem do sistema é idêntica entre lotes para um dado locale
- Provedores como Anthropic e Google fazem cache de mensagens de sistema repetidas
- Resultado: o primeiro lote paga o custo total de tokens, lotes subsequentes pagam apenas pela mensagem do usuário
Isso pode reduzir significativamente os custos de tokens para projetos com muitos lotes.
Validação de ICU MessageFormat
O comando integrity valida padrões plurais de ICU MessageFormat contra regras plurais CLDR. Se seu arquivo fonte usa sintaxe ICU como:
"items": "{count, plural, one {# item} other {# items}}"
Champollion verifica que versões traduzidas incluem todas as categorias plurais obrigatórias para o locale de destino. Por exemplo, árabe requer seis categorias (zero, one, two, few, many, other) — não apenas one e other.
Execute champollion integrity para verificar completude plural em todos os locales.
Aplicação de Terminologia
Para pares treinados com um dicionário, champollion executa uma verificação de terminologia pós-tradução. Após o portão de qualidade passar, verifica se o LLM realmente usou os termos de dicionário obrigatórios.
[TERM] en→fr: 2 term violation(s)
• hero.title: "dashboard" → expected "tableau de bord" but got "panneau de contrôle"
Violações de terminologia são avisos, não erros bloqueadores. A tradução ainda é escrita no disco. Isso é intencional — o LLM pode ter razões válidas para escolher uma alternativa (contexto, gramática), e bloquear em incompatibilidades de termos causaria mais dano que bem.
Para corrigir violações, atualize o dicionário de treinamento ou edite manualmente o arquivo de locale.
Veja Também
- Como Sync Funciona — onde o portão de qualidade se encaixa no pipeline
- Métodos de Tradução — métodos que alimentam o portão
- Conversores de Script — conversão de script pós-portão
- Dados de Treinamento — melhorando qualidade de tradução upstream
- Memória de Tradução — cacheando traduções validadas
- Referência CLI — sync — flags de sync incluindo comportamento de retry
- Referência CLI — integrity — auditoria plural ICU