跳转到主要内容

基于规则 + LLM 混合方案

核心思想: 对于你确信正确的模式(形态词缀、数字格式、已知短语结构),使用确定性语言学规则;对于其他内容,交由 LLM 处理。规则在适用范围内优先于 LLM;LLM 填补空白。

:::info 这是一份食谱指南,不是完整实现 本指南勾勒了混合架构的轮廓。具体规则完全取决于目标语言的语法和可用的语言学资源。 :::

何时使用此方案

  • 你在目标语言方面具有深厚的语言学专业知识(或能获得语言学家的支持)
  • 某些翻译模式是确定性的 — 你能确定正确的输出
  • LLM 持续失败于特定模式(数字格式、敬语、粘着语特征)
  • 你希望对高风险模式保证正确性,同时保持其余部分的流畅性

工作原理

Input ──→ [Rule Engine] ──→ [LLM] ──→ [Merge] ──→ Output
│ │ │
│ Known patterns │ Unknown │ Rules override
│ handled here │ parts │ LLM where both
▼ ▼ ▼ produced output
Deterministic Creative Final translation
fragments translation
  1. 定义规则 — 正则表达式、FST 查询、已知翻译的查找表
  2. 预处理 — 从源文本中识别并提取规则匹配的片段
  3. LLM 翻译 — 剩余文本,以规则输出作为约束
  4. 合并 — 重新组装翻译,优先使用规则输出
  5. 验证 — 可选的 FST/规则检查合并后的结果

示例:数字和日期规则

import re

# Rule: Numbers stay as-is (don't let the LLM hallucinate number translations)
def rule_preserve_numbers(text):
return re.sub(r'\b\d+\b', lambda m: f'__NUM_{m.group()}__', text)

# Rule: Known greetings have exact translations
GREETING_RULES = {
"hello": "tânisi",
"goodbye": "êkosi",
"thank you": "kinanâskomitin",
}

# Rule: Date format conversion
def rule_date_format(text):
# "January 15" → "kisê-pîsim 15" (deterministic month mapping)
...

关键设计决策

规则优先级: 当规则和 LLM 对同一片段都产生输出时,哪个优先?规则应在正确性关键的模式中优先。LLM 应在流畅性关键的模式中优先。

粒度: 词级规则(字典查询)vs. 短语级规则(习语映射)vs. 结构级规则(句子重排)。从词级开始;随着你识别模式,逐步添加短语级规则。

规则维护: 每条规则都是一项维护义务。宁可采用少量高置信度规则,也不要采用大量近似规则。如果你不确定某条规则是否正确,就交由 LLM 处理。

优缺点

✅ 规则适用范围内保证正确性❌ 需要深厚的语言学专业知识
✅ 透明 — 规则可读且可审计❌ 规则/LLM 接缝可能产生不自然的输出
✅ 规则速度快(无 API 成本)❌ 维护负担随规则数量增加而增长
✅ 渐进式 — 随着学习添加规则❌ 难以处理规则边界处的屈折变化

配合良好的方案

另见