Ir para o conteúdo principal

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çãoO Que DetectaRótulo do Portão
Vazio/em brancoModelo retornou string vazia ou apenas espaços em branco[GATE] empty
Eco da fonteModelo retornou o texto original em inglês[GATE] source-echo
Loop de alucinaçãoPadrões de trigrama repetidos (ex: "Qo' Qo' Qo'")[GATE] hallucination
Inflação de comprimentoSaída significativamente mais longa que a fonte[GATE] length
Conformidade de scriptScript errado para o locale de destino[GATE] script
Categorias plurais ICUFormas 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

  1. A tradução que falhou é registrada em stderr com um prefixo [GATE], o nome da chave, o motivo e uma prévia do valor
  2. A chave não é escrita no arquivo de locale
  3. 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