跳转到主要内容

质量门

每次翻译在写入磁盘前都会通过一个确定性的验证门。质量门捕捉常见的机器翻译失败模式——没有无声回退,没有垃圾数据写入你的本地化文件。

验证检查

检查捕捉内容门标签
空白/空字符串模型返回空字符串或仅空格[GATE] empty
源文本回显模型返回原始英文输入[GATE] source-echo
幻觉循环重复的三字符模式(例如 "Qo' Qo' Qo'"[GATE] hallucination
长度膨胀输出明显长于源文本[GATE] length
脚本合规性目标语言环境的脚本错误[GATE] script
ICU 复数类别缺少该语言环境所需的复数形式[GATE] icu-plural

空白/空字符串

拒绝空字符串、仅空格或 null 的翻译。这捕捉模型对困难键返回空值的情况。

源文本回显

检测模型返回英文源文本而不是翻译的情况。常见于短字符串和规范不足的提示。

幻觉循环

分析输出中的三字符(trigram)模式。如果任何三字符相对于输出长度重复次数超过阈值,翻译将被拒绝。这捕捉产生退化输出的情况,如 "Qo' Qo' Qo' Qo' Qo'"

长度膨胀

拒绝输出长度超过 maxLengthRatio × source length(默认值:4×)的翻译。这捕捉为短输入产生大量文本的模型幻觉。

可通过配置中的 maxLengthRatio 配置。

脚本合规性

对于配置了 script 字段的语言环境(例如 "script": "cans" 用于平原克里音节文字),验证输出包含适合目标脚本的非 ASCII 字符。对于阿拉伯文、CJK 或音节文字语言环境,仅拉丁文输出将被拒绝。

失败时的处理

  1. 失败的翻译被记录到 stderr,带有 [GATE] 前缀、键名、原因和值的预览
  2. 该键不会被写入本地化文件
  3. 重试级联启动(见下文)
[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 命令根据 CLDR 复数规则验证 ICU MessageFormat 复数模式。如果你的源文件使用 ICU 语法,如:

"items": "{count, plural, one {# item} other {# items}}"

Champollion 验证翻译版本包含目标语言环境所需的所有复数类别。例如,阿拉伯文需要六个类别(zeroonetwofewmanyother)——而不仅仅是 oneother

运行 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 可能有选择替代方案的有效理由(上下文、语法),而对术语不匹配的阻止会造成更多伤害。

要修复违规,请更新教练字典或手动编辑本地化文件。


另见