返回开发博客 工程更新

SyncTrans 1.0 之路:为 Mac 打造一台实时口译机

阅读本文的其他语言版本:English · 中文 · 日本語 · Español · Français · 한국어 · Українська

SyncTrans 1.0.0 本周发布了。它是一款面向 macOS 14 及更高版本、运行于 Apple Silicon 的实时语音翻译器:你开口说话,译文随句子成形即时出现,合成语音再把 它朗读出来。这篇文章是它的工程实录 —— 我们做了什么、按什么顺序做、接受了 哪些取舍。面向用户的简要说明在 最新动态里。

为什么要为 Mac 做一台口译机

手机上的翻译应用用来问路、找洗手间挺好用。但应付一场真正的对话就差得远了, 因为它们把对话变成了两个人轮流盯着一小块屏幕、把设备递来递去。而我们真正在 意的那些对话 —— 客户会议、业务咨询、和律师或医生坐下来谈家事 —— 桌上放 着笔记本电脑的时候,远比放着一本会话手册的时候多。

Mac 恰好也是干这件事的绝佳硬件。Apple Silicon 能以可交互的速度在本地跑语音 识别、机器翻译和语音合成,而且机器自带不错的麦克风链路、真正的扬声器,想接 几台显示器就接几台。我们定下的目标说起来很简单:让机器去对付语言,让人专心 对付对话。

两大引擎家族,并行开发

从第一个原型开始,SyncTrans 就有两条路径做同一件事。托管的云端引擎开箱即用: 登录、选语言、开始。端侧引擎则把识别、翻译、合成全部放在 Mac 上运行 —— 任 何数据都不离开这台机器,没有网络也能照常工作。

我们刻意让两条路径同步推进,而不是先上云端、事后再把本地推理硬塞进来。代价 是实实在在的:每个功能都要在两套差异巨大的技术栈上做两遍。回报则是一个两套 技术栈都能接入的统一引擎抽象,以及一种「先测量、再下结论」的习惯。每个本地 模型档位都有实测的内存下限,应用会先检查这台机器到底跑不跑得动,再决定是否 提供 —— 对老 Mac,我们会如实告诉它哪些档位跑不了,而不是把它导去一个会疯 狂换页的地方。

第三种引擎选项几乎是这个抽象的免费副产品:如果你已经有自己信任的语音和翻译 服务,可以把 SyncTrans 指向你自己的 API 端点,应用的其余部分原样工作。三种 引擎、一个界面,切换只是设置里的一个选项,不需要重装。

为面对面的场景而设计

对产品影响最大的功能,来自我们观察早期版本的真实使用。只给一个窗口时,两位 说话者总会不可避免地把屏幕转来转去。于是 1.0 提供了双屏会话视图:每台显示 器全屏显示一种语言,把 Mac 摆在两人中间,各自看属于自己的那块屏幕。每个窗 口都可以在应用内指定到各自的显示器。

音频也享受了同样的待遇。两个人共用一副耳机时,SyncTrans 可以把一种语言送到 左耳、另一种送到右耳,让共用一台 Mac 的两个人各自听到属于自己的译文。说起 来是个小功能,实际用起来影响大得惊人:对话终于不再围着机器转了。

同一份会话记录上的三种布局

不同时刻需要以不同方式看待同一场对话,所以 1.0 在单份底层会话记录之上提供 了三种布局。聊天气泡布局按轮次交替排列两种语言,就像即时通讯应用那样。双栏 布局给每种语言一栏,两个人同时跟进时读起来更顺。会议纪要布局则把整场会话渲 染成一份持续生长的文档,可以像翻笔记一样快速浏览。因为布局只是同一份记录上 的视图,会话中途切换不会丢任何东西。

术语表、上下文,以及守规矩的数字

有两个质量相关的功能进了 1.0,因为它们比选哪个原始模型更要紧。翻译在滚动的 会话上下文中进行,代词和话题指代会依据本场会话里真实说过的内容来消解。按项 目划分的术语表则钉住那些模型原本只能靠猜的词:产品名、人名、专业术语。一个 词只要进了术语表,每次译出来都一样。

1.0 还包含一个位于模型后方的确定性规则层,专门处理数字和折扣说法 —— 在这 些地方,逐字直译会悄无声息地把意思整个颠倒过来,中文的折扣习惯就是最著名的 例子。这部分工作有单独的一篇文章: 经得起翻译的数字

可搜索、可导出的历史记录

一场翻译过的对话往往在事后还用得上,所以每场会话都会按项目保存在 Mac 上。 历史记录可以跨项目搜索,单个轮次可以修正或删除,一场完成的会话可以导出为 TXT、Markdown 或 SRT —— 可以是会议纪要、需要落字为凭的报价,也可以是同 一场活动录像的字幕。无论由哪个引擎产生,记录都只存在你自己的机器上。

七种语言的界面

一台界面只会说一种语言的口译机,可信度是要打问号的。所以 1.0 的界面本地化为 七种语言:英语、中文、日语、西班牙语、法语、韩语和乌克兰语。我们把本地化当 成工程工作来做,而不是丢进来一堆译文就完事 —— 会截断的工具栏标签、撑出容 器的按钮、只放得下英文的布局,全都被逐项审计并修掉了。这个博客也以同样的七 种语言发布,我们觉得这才是诚实的做法。

1.0 意味着什么

对我们来说,1.0 是一条底线承诺:完整闭环 —— 说、看、听、存 —— 在我们 发布的每一个引擎上端到端可用,在我们宣称支持的硬件上真实可用。SyncTrans 1.0.0 需要 macOS 14 或更高版本,运行于 Apple Silicon,你可以 在这里下载。 功能巡览在功能页面上。

有问题或要报 bug?反馈板是找到我们最快的途径。