DTC Wayne

我让 AI 把网页翻成日文,为啥结果页面出现了波兰语???

Wayne · 2026-05-05 · #ai-agent #codex #shopify #i18n #debugging

我让 AI 把网页翻成日文,为啥结果页面出现了波兰语???

凌晨 1 点,朋友把截图甩到群里,我盯着屏幕愣了几秒。日文集合页,URL 是 /ja/,第二屏标题底下,竟然是一整段 Chłodnice telefonów——波兰语。

日文页面 URL 路径明明是 /ja/,正文却整段波兰语,关键店铺信息已脱敏

事情的起点很简单:我让 AI agent 帮我把店铺多语言页面批量翻译,明确告诉它”日文 locale 写日文”。它跑完以后兴高采烈跟我说”翻译完成”,我也信了。

直到这张截图出现。

我以为是浏览器抽风。换隐私窗口、切手机 Safari、换网络,波兰语都还在那儿,连位置都不挪。

不是乱码,不是自动翻译插件。是一整段可读的波兰语,端端正正躺在 AI 给我”翻成日文”的页面里。

这篇会帮你看清一件事:当 AI agent 跟你说”完成了”的时候,你能信几分。

后台居然真的是这样存的

我打开 Admin API(店铺后台的数据接口)翻了一下,想看看是不是缓存没刷、CDN 抽风,结果——

  • 日文 locale(也就是语言版本)里这条字段,原文就是 Chłodnice telefonów ...
  • 切到波兰语 locale 同一条,一字不差。

不是页面渲染的锅,AI 真的把波兰语原原本本塞进了日文槽位,然后给后台的”已翻译”亮了绿灯。就好比你让搬家工把日文文件归档到日文抽屉,他归档完了打卡走人,你拉开抽屉一看,里面全是波兰语文件——而打卡记录上写着”完成”。

这一轮翻出来的问题数量人话
写错语言13 条日文位置塞了法语 / 德语 / 波兰语 / 西语
缺翻译30 条后台留了空槽,前台 fallback 回英语
主题默认文案102 条购物车、404、退款页这些角落根本没进过翻译流程

13 条写错语言这件事,比 30 条缺翻译更恶心。缺翻译至少 fallback 回英语,用户能看懂;写错语言是用户来到一个标着”日本店铺”的页面,看到的是另一种欧洲文字——这种感受比看到英文更糟。

第二次”完成”,我又被骗了一次

我换了一个 AI agent 来收拾烂摊子——这次用 Codex(OpenAI 的代码 agent,能直接改文件)。把 13 个最严重的页面塞给它重翻。最长那篇 HTML 54KB,标签嵌套很深。

REDO_BATCH1_COMPLETE files=3

我看到这行就去喝水了。回来抽查,尴尬——只翻了标题,正文一动没动。日文覆盖率 5% / 2% / 3%。

这就像请装修师傅来刷墙,他把门牌号擦干净就交工了。

不是模型笨。是单文件超过它一次能处理的窗口,它做完前面那块就交卷,但 wrapper 脚本读到的是 exit 0,于是写出 COMPLETE。我从头到尾就被这一行字骗了。

两次被同一种”完成”骗,我后来才反应过来:AI agent 说”完成”,跟人类说”完成”根本不是一回事。

人类说完成的时候,脑子里有一份”完成的样子”在做对照——你交付的是结果。模型说完成,意思往往只是”这一段流程我跑完了”——它交付的是动作。中间差着一整个”是不是真的对了”。

AI 说 done,是流程意义上的 done。任务意义上 done 不 done,得你自己去看。

把 AI 关进可验证的笼子里

我把整条流水线重写了一遍。两条核心思路:

第一,长 HTML 不直接喂给 LLM(也就是大语言模型)。先用谷歌翻译这种批量服务把每个文本节点过一遍,确保每一小段都有日文存在;再让 LLM 逐段润色,每次只看一小段。LLM 擅长写得通顺,不擅长在一个 54KB 文件里不漏一句话。

第二,结构和内容分开。HTML 标签、链接、icon 名、CSS class 这些,翻译器一律不能碰。脚本里写死,宁可少翻,不能翻错位置。

写入也不一次推完。本地先 lint 一遍 HTML 看有没有标签崩,再分批写后台,每批之间留时间观察。这跟我之前一把梭哈完全不同——之前是”反正最后能验”,现在是”每一步都能验”。

验证我只信能直接看到的东西

最后写入 337 条,0 错误,4 小时跑完。

但写完不算完。Shopify 边缘缓存按 UA(也就是你的设备身份)分桶,桌面浏览器和手机浏览器命中的是不同的缓存条目。我之前栽过坑:电脑上看一切正常,第二天客户从手机打开还在串台,因为手机这个桶根本没刷新。

所以验证只信两件事:

  • iPhone Safari 上能看到这次写入独有的新文案
  • 之前那段波兰语,在桌面和手机两端都消失

两端不一致就当没修。

如果你也在让 AI agent 干活

留三件能立刻用的:

  1. 永远不要把”AI 说完成”当成”任务完成”。去看真实输出。不要看 exit code,不要看它自己打的 COMPLETE,抽几个样本看实际结果。被骗一次正常,第二次就是你流程的问题。
  2. AI 擅长写得好,不擅长不漏一句。长任务先用确定性工具(脚本、批处理服务)保证覆盖,再让 AI 在小窗口里润色。让 AI 干它擅长的事,覆盖率交给确定性的东西。
  3. 验证要绕过 AI 自己声称的结果。AI agent 的”完成”是它自己的视角,你要用人类的视角再走一遍——多语言电商就是用桌面 + 手机两端各看一遍,看到了才是真的。

我把这次的审计和修复脚本扔到 GitHub 了:github.com/wayne-wei/shopify-i18n-toolkit,可以参考。下一篇大概会写 Cloudflare Worker 怎么修 Shopify 的 fallback——那是这次事故的另一层根因,单独够一篇。如果你也在让 AI agent 干生产环境的活,或者被 AI 的”完成”坑过,可以找我聊聊。

← 回到首页