跳到正文
AIHOT · AI行业动· 来源· noreply@aihot.news (OpenRouter:Announcements)·· 18 小时前精选AI 评分78

OpenRouter 详解自纠错网站本地化流水线:GPT-6.1 Sol 翻译 7 种语言全站约 $460

引擎 / 框架
Web(原生)
模型
GPT-6.1 Sol、Claude Opus 5.5、Gemini 4 Argon、DeepSeek V4 Pro
耗时
未说明
成本 / 额度
全站重译 7 种语言约 $460
产出
工具 / 流程
AI 用在
代码 · 流程编排
辅助工具
未说明
参与人数
工作室

流程:脚本扫描前端字符串并写入源目录 → 按批次发送 GPT-6.1 Sol 进行翻译 → 代码检查拦截格式与术语违规 → 同模型校验译文并退回重试 → AI 审核差异并发布问题报告

字段由模型依据原文抽取,未说明不代表没有。请核对原文。字段有误?

推荐理由

原文披露了自纠错本地化流水线的设计与成本数据,其指纹重排与代码前置检查方法可直接迁移。

正文

OpenRouter:Announcements·2026-11-12 08:00· 16 小时前精选AI 评分73

How We Built a Self-Correcting Localization System for OpenRouter

AI 导读

OpenRouter 上线简体中文、日语等 7 种语言 Beta 本地化,并详解配套的自纠错翻译流水线:GPT-6.1 Sol 翻译 16,918 条字符串,经代码检查、同模型校验和每日 AI 审查重试,最坏情况每条约 20 次模型调用。全站重译 7 种语言约 $460,约为 Smartling 机器翻译牌价的 6%,错误报告会转化为术语规则、风格注释或评测用例。

推荐理由

原文完整披露了自校验本地化流水线的设计、评测数据和成本对比,其指纹重排与代码前置检查方法可直接迁移。

The OpenRouter homepage in Japanese.

OpenRouter 现在支持简体中文、西班牙语、巴西葡萄牙语、德语、法语、日语和韩语,以及英语。本地化从今天开始进入测试阶段。要切换语言,可以从账户菜单中选择一种语言,或者直接访问类似 openrouter.ai/ja 或 openrouter.ai/ko/models 的地址。

The OpenRouter models page in Korean, with filters, tabs, and model metadata translated.

翻译一个网站并让译文保持最新并不容易,对我们来说尤其如此。OpenRouter 的站点有 16,918 条英文字符串,而且我们每天都在改动其中一些,所以一次性的翻译一周之内就会过时。我们搭建了一套循环流程来大规模处理这件事。它每天找出发生变动的字符串,翻译它们,在代码中提交,再由第二个模型对照英文核验含义。当某条译文未通过检查,或核验模型将其驳回时,循环会把原因一并附上退回重试。这个重试循环正是系统自我纠错的部分。

仍有一些错误会漏过去,由人来发现。当审校人员和读者报告错误时,我们会把它转成一条术语表规则、一条风格说明或一条覆盖规则;而每日审校发现的错误也会变成测试用例,未来每个模型都必须通过。整条流水线都运行在 OpenRouter 上。

译文与代码一起存放在 Git 中

在任何模型介入之前,译文需要有个落脚之处。我们用开源的 General Translation 运行时在 React 代码中包裹字符串。译文以 JSON 目录的形式与代码一起提交,运行时在本地加载,因此请求路径上不经过任何翻译服务。字符串合并后一天之内就会被纳入翻译。在此之前,页面显示英文原文。每条译文条目还会存下其英文来源的指纹。一旦有人修改了英文,指纹就不再匹配,该条目会被重新放回队列。这条规则让每日运行能找出所有过时条目,而无需重新翻译整个目录。

流水线

队列中的每条字符串在到达站点之前都要经过五个阶段。

How a string gets translated: new text goes to a translator model, then code checks, then a verifier model, then review, then live. Failed checks and verifier rejections go back to the translator, and fixes flagged by reviewers or readers go into the glossary.

脚本扫描前端,把每个被包裹的英文字符串写入源目录。每条条目记录其所在文件和 UI 角色,例如按钮、标题或表头。角色很重要,因为同一个英文单词在不同位置可能需要不同的译法。按钮上的“Queue”是一条指令,而本文后面提到的一个缺陷,就是模型把它译成了名词。

2. 翻译

我们把新增和变动的字符串按每批最多 40 条发给 GPT-6.1 Sol,并用 Structured Outputs 让回复严格遵循 JSON schema。每个请求都带上我们的全局和分语言风格说明、批次中涉及产品术语的术语表规则,以及每条字符串的 UI 角色。

下面是一个简化示例,展示某个日语批次的翻译请求,其中风格说明和术语表规则有所删节。

{
  "model": "openai/gpt-6.1-sol",
  "messages": [
    {
      "role": "system",
      "content": "Translate OpenRouter UI strings into Japanese. ..."
    },
    {
      "role": "user",
      "content": "[{\"id\":\"q1\",\"role\":\"button\",\"text\":\"Queue\"}]"
    }
  ],
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "translations",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "translations": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": { "type": "string" },
                "text": { "type": "string" }
              },
              "required": ["id", "text"],
              "additionalProperties": false
            }
          }
        },
        "required": ["translations"],
        "additionalProperties": false
      }
    }
  }
}

由于 OpenRouter 上的每个模型都接受同样的请求,换一个翻译模型只需改一下模型 slug。本文后面的模型对比就是这么做的。

3. 检查

代码会拒绝以下回复:破坏 ICU 占位符、复数分支、富文本标签,或首尾空白,或以术语表禁止的形式呈现产品术语。我们会把被拒的批次拆小后重发,并说明失败原因,默认最多重试 4 轮。上限是一个可调设置,最高可到 20。经过最后一轮仍然失败的字符串保留英文,并在拉取请求中标记出来。

4. 校验

第二次调用同一个模型,让它充当校验者,对照英文逐条阅读译文,并按严重程度列出错误。任何严重或重大错误,比如漏译从句、意思颠倒,都会把该字符串退回给翻译器,并附上此前所有异议。翻译器在首次尝试之后最多可重试 3 次,最后一次重试会投入更多推理。每个字符串的花费没有单独上限,因为重试次数本身已经限定了开销。算上校验重发,一个字符串最多可经历四次翻译尝试,每次最多四轮校验,外加每次尝试后的一次校验调用。这样最坏情况下,每个字符串每种语言约需 20 次模型调用。如果校验器宕机,流水线不写入任何内容,字符串保留英文。读者看到一天英文,也好过看到未经校验的译文。

5. 审核

每天的批次以拉取请求的形式提交。AI 审核者阅读差异并发布发现的问题,由人来合并拉取请求。

我们如何衡量

本文余下部分依赖三套评测集,所以在看数字之前,先了解每套测什么会有帮助。

  • 模型对比(254 个用例)用不同的翻译模型运行流水线,并用生产校验器给每条回复打分。我们据此选定了翻译器。
  • 流水线对比(454 个用例)让同一个模型跑两次,一次走完整流水线,一次只用两行提示词。代码检查、校验器、来自另外三个模型家族的评判者,以及回译检查都会给它打分。
  • 缺陷集(22 个用例)收录了日常审核在校验器放行之后抓到的真实错误。每个用例都禁止当初漏出去的那个错误。

试过又放弃的做法

流水线现在看起来简单,是因为评测量化之后,我们去掉了初版设计中的三个部分。

更便宜的翻译器

我们最初测试了一个更小、更便宜的模型 GPT-6 Luna(openai/gpt-6-luna)。在模型对比中,它首次尝试通过 91.7% 的用例,而 GPT-6.1 Sol 为 99.2%。它最弱的语言是韩语和日语。最难处理的失败是回复无法被我们的翻译框架 General Translation 编译,比如它对“Legacy alias of {value}”的翻译。这些失败在每一轮重试中都依然存在。

更重的模型成本约为 3.4 倍,这 254 个用例是 1.94 美元对 0.57 美元。我们愿意付这个差价,因为一个始终无法收敛的错误字符串,修复起来比一开始就译对要花更多时间和精力。

单独的评判模型

在验证器出现之前,我们用一个独立的评判模型给每一条译文打分,凡是被它标记或判定为不确定的,都会重新翻译。为了检验效果,我们给一个基准集标注了三类字符串:已知错误、修正后的译文(对早前错误手工修复的版本,理应通过),以及一份干净样本。评判模型确实抓到了真问题。在一次基准运行中,它把该次运行中 91% 的真实缺陷标记为不确定。但它也误报了 14 条修正译文中的 11 条、150 条干净样本中的 42 条,导致大量本来合格的译文被退回重译。

启用验证器后,关掉评判模型使首轮准确率从 99.2% 降到 98.8%,最终结果没有变化。此前评判模型会把约 45% 的初稿退回重译。现在我们默认关闭它。

难处理的字符串交给人

起初,验证器每次重试都拒绝的字符串会一直保持未翻译状态,直到有人手工修复。对整个目录做一次完整重译——16,274 条字符串译成 7 种语言——留下了 97 条这样的字符串(0.09%)。现在流水线会按验证器发现的问题给被拒的草稿排序,提交其中错误最少的一版,并在拉取请求中标记出来供审查。这个循环最终总会产出一条译文,即使这条译文仍带有被标记的错误,而标记会让它直接呈现在合并拉取请求的人面前。

流水线比裸模型多做了什么

流水线带来的大部分改进是更少的明显错误。为了量化这一点,我们的评测让同一个模型跑 454 个用例两遍,一遍走完整流水线,一遍只用两行提示词,不带风格说明、术语表或重试。裸模型返回了一条格式错误的回复,剩下 453 对可供比较。

指标裸模型完整流水线
未通过术语表或人工编写检查453 条中 147 条454 条中 4 条
首轮即被验证器接受通过代码检查的 306 条中 263 条(85.9%)全部 454 条中 448 条(98.7%)
严重错误数,由来自其他模型家族的三个评判模型分别统计后加总203109
双方在整体偏好上各自胜出的对数117139
含义在回译后保持不变90.8%89.3%

人工编写检查是针对单个评测用例手写的规则。例如,中文里的“Queue”不能译成“队列”,也就是已上线的那个名词形式。检查失败从 147 条降到 4 条,这是术语表和重试在起作用。

验证器的首轮数据基数不同。裸模型用的是通过代码检查的 306 条字符串,流水线用的是全部 454 条。验证器与译者来自同一模型家族,所以它的通过率只能说明模型在多大程度上与自己一致。两项工作我们都用 GPT-6.1 Sol,因为在我们测试的两个译者中它更准确。为了获得外部视角,评测还会把每一对译文匿名送给来自其他模型家族的三个评判模型:Claude Opus 5.5、Gemini 4 Argon 和 DeepSeek V4 Pro。三个评判模型合计在流水线输出中发现 109 个严重错误,在裸模型输出中发现 203 个。每个评判模型发现的错误单独计数,所以三个评判模型都标记的字符串会在总数中计三次。

在 453 对的整体偏好上,评判模型选了流水线 139 次、裸模型 117 次,另有 61 次平局和 136 对两条译文完全相同。这一差距远小于检查失败和严重错误所显示的差距,所以流水线的价值主要在于它消除的那些具体错误。

最后一行会把每条回复回译成英文,再判断意思有没有走样。裸模型得分 90.8%,流水线 89.3%。回译看不出术语和语域,而这恰恰是流水线改动最大的部分,所以我们把这一结果视为平手。

反馈闭环

验证器在译文上线前拦下大部分错误,读者再发现剩下的一部分。

Highlighted text on the Japanese homepage with the popover for sending feedback on it.

在“语言”对话框里打开“选中即报告”,然后选中任意译文,加上备注并发送。每份报告都会带上语言、页面和具体文本。先由模型做初步分诊,从四种修复方式中选一种,几分钟内就把修复上线。我们的 AI 审核员检查修复,最后由人工完成合并。

  • 意思错了。 该字符串当天回退为英文,随后换上修正后的译文。
  • 术语错了。 我们把这个术语连同该语言认可的译法和要拒绝的译法一起加进术语表。HIPAA、SOC 2、OAuth、SAML 这类合规和协议名称我们固定保留英文,流水线不会翻译它们。
  • 语气或标点不对。 这条规则写进该语言的风格说明。
  • 单个字符串有问题。 用精确覆盖固定住已批准的措辞,之后的任何运行都改不了它。

验证器放行、但每日审核事后发现的错误,会进入缺陷测试集。目前有 22 个用例,包括把按钮上的“Queue”译成名词(这里需要动词)、把“shadow traffic”译成道路交通,以及一个意思被弄反的 HIPAA 设置。每个用例都禁止当初上线的那种错误,今后任何模型、提示词或术语表的改动只要让它重现,评测就不通过。

成本

我们最初估价时,把全部 16,274 个字符串完整重译成 7 种语言,共 113,918 条译文,翻译加验证合计约 430 美元。这个数字是按各语言生产规模的批次定价再放大算出来的,折合每个字符串每种语言不到半美分。验证略超一半,约 228 美元,即每个字符串每种语言 0.002 美元。此后字符串目录增长到 16,918 个,今天完整重译一遍约需 460 美元。每日循环只发送有改动的部分,某天 7 种语言共 677 个字符串有改动,花费约 18 美元。

这两个数字只涵盖翻译和验证调用,不含搭建流水线的工程时间、AI 审核员和分诊模型发起的调用,以及每天合并每个拉取请求的人工。

今天的 16,918 个字符串包含 136,429 个英文单词,7 种语言合计 955,003 词,折算下来我们的成本约为每词 0.0005 美元。下表是同样一次完整重译,按 Smartling 和 Gengo 公布的每词起步价计算,价格截至 2026 年 11 月 10 日。

方案单价全站 7 种语言
我们的流水线(翻译加验证)约每词 0.0005 美元约 460 美元
Smartling 机器翻译每词 0.0075 美元约 7,200 美元
Smartling AI 翻译每词 0.06 美元约 57,300 美元
Gengo 标准每词 0.09 美元约 86,000 美元
Smartling AI 人工翻译每词 0.12 美元约 114,600 美元
Gengo 高级每词 0.18 美元约 171,900 美元
Smartling 人工翻译每词 0.20 美元约 191,000 美元

以上都是标价;企业合同另行商定,而且除我们之外,上面每一行机器翻译都包含人工审校或项目管理,我们的数字没有算这部分。最接近的同口径选项是 Smartling 的机器翻译,我们的流水线成本约为它的 6%。

哪些部分可以直接复用

如果你正在为自己的产品做本地化,这套设计里有四个部分可以直接照搬。

  • 为每条译文建立与英文原文的指纹比对,过期的条目就会自动重新排队。
  • 让代码在模型审查语义之前,先拦下损坏的占位符、复数分支、标签和违禁词。
  • 用校验器逐条指出错误及其严重程度,再把这些意见退回给翻译环节。
  • 把人发现的每一个错误,都变成一条术语表规则、一条风格说明、一条覆盖规则或一个评测用例。

把反馈发给我们

测试期间部分措辞可能不够准确,最快的修复方式是在“语言”对话框里用“选中即报告”功能提交。我们会审阅每一份报告,并把它转化为术语表规则、风格说明或覆盖规则。

常见问题

OpenRouter 支持哪些语言?

OpenRouter 目前提供英语、简体中文、西班牙语、巴西葡萄牙语、德语、法语、日语和韩语。本地化仍处于测试阶段。

如何在 OpenRouter 上切换语言?

在账户菜单里选择语言,或直接打开本地化地址,例如 openrouter.ai/ja。

OpenRouter 用哪些模型来翻译?

由 GPT-6.1 Sol(openai/gpt-6.1-sol)逐条翻译每个字符串,再对同一模型发起第二次调用,对照英文原文进行校验。两次调用都通过 OpenRouter API 完成。

翻译整个网站要花多少钱?

把目前的 16,918 条字符串全部重新翻译成 7 种语言,翻译加校验合计约 460 美元,平均每条字符串每种语言不到半美分。同样的工作按 Smartling 公布的机器翻译价格约需 7,200 美元,按公布的 AI 翻译和人工翻译价格则约需 57,300 至 191,000 美元。

如何报告糟糕的译文?

在“语言”对话框里开启“选中即报告”,高亮读起来不对的文字,添加说明并提交即可。

来源:OpenRouter:Announcements · openrouter.ai

来源:AIHOT · AI行业动 · aihot.news