
我眼看着免下车点餐 AI 打断了一位口吃者。于是我构建了不一样的东西。
有一段视频最近在 Reddit 上广为流传。一位女士在 Wendy's 的免下车点餐窗口想点一份 Baconator。她口吃了——卡在了「b」这个音上——AI 在她话说到一半时打断了她,还兴高采烈地推荐了一份 Frosty。她又试了一次。系统把她的重复当成了一份新订单。三次尝试之后,她对着一个毫不在意的扬声器喊出「AGENT」(人工坐席)。
这段视频我大概看了三十遍。不是因为它好笑——它并不好笑——而是因为那次交互中的每一个失败,都精准地对应着某个人在会议室里做出的架构决策,而他当时很可能正盯着一张写着「86% 成功率」的幻灯片。
剩下的那 14% 呢?那些都是活生生的人。而我要说,这套架构从一开始就根本不是为他们而建的。
这是一个关于为什么我在 Veriprajna 的团队花了将近两年时间、拒绝走语音 AI 领域最快上市捷径的故事——以及我们转而构建了什么。
「企业级语音 AI」到底意味着什么?
我们这个领域的大多数公司做的事情简单得惊人:把麦克风接到一个 API 上。OpenAI、Google、Anthropic——挑一个你最喜欢的大语言模型,把音频灌进去,拿回文本,生成回应。发布上线。
我把这称为API 封装式做法,它在演示中效果绝佳。安静的房间、清晰的说话者、简单的需求。演示总是奏效。
演示总是奏效。而深夜 11:47、一辆柴油卡车在你身后怠速轰鸣、后座还有个幼儿尖叫哭闹的免下车点餐窗口——那才是架构真正见真章的地方。
Wendy's 的 FreshAI 系统——构建于 Google Cloud 的 Vertex AI 之上——大概是这种做法大规模落地的最高调案例。而那些被报道出来的顾客体验,把它的局限说得一清二楚:顾客点一份简单的餐要试三次甚至更多次,系统在人话说到一半时打断,推荐一些顾客根本没点的东西,还有一种被形容为对任何有言语不流畅问题的人来说都「无法使用」的体验。
然而 Wendy's 仍在把它扩展到 500 到 600 家门店。原因是一笔简单的账——这套系统通过追加销售抬高了平均客单价,而人力效率的数字在季度财报电话会上很好看。如果你优化的是平均值,那这套架构就是成功的。如果你恰好是它服务不了的那个人,那这套架构就是坏的。
我曾深入探讨过这一矛盾——就在我们研究的互动版本之中。但其核心论点,我想亲自来讲,因为它塑造了我们构建一切的方式。
我们意识到「从麦克风起步是个错误」的那个夜晚
那是暮春时节一个周四的晚上九点左右。我、我的联合创始人,还有两名工程师,站在一家已经关门的 Taco Bell 的停车场里——我们获准用它来做测试。我们把原型机装在一根柱子上——一个扬声器、一个麦克风,全靠几段胶带勉强固定在一起。我们已经在实验室里跑了好几周,准确率约 95%。我们觉得准备好了。
第一辆开过来的车里,是一位开着本田思域(Honda Civic)、车窗摇下一半的女士。她相当清晰地说了「我要一份三号套餐」。系统却听成了「island numb recon bowl」。我看向我的联合创始人。他盯着地面。
准确率不只是差——它根本没法用。我们在那个停车场又站了两个小时,一遍又一遍地测试,而随着晚间车流变多,数字只会越来越糟。我清楚地记得那一刻:我不再感到沮丧,而是开始感到某种更接近恐惧的东西——这不是调参的问题。我们整套方法都错了。
问题不在语言模型。模型没问题。真正的问题,出在音频抵达模型之前所发生的一切。风噪。引擎的轰鸣。二十英尺外一台暖通空调机组的机械嗡鸣。三个街区外的一声汽车喇叭。我们的系统分不清人声和柴油发动机的区别,因为在信号层面,从没有人教过它。
就在那一刻,我明白了一件我认为这个领域里大多数人至今仍未真正领会的事:语音 AI 不是一个 NLP(自然语言处理)问题。它首先是一个信号处理问题,其次才是一个语言学问题,第三才是一个 NLP 问题。如果你的第一层就是坏的,那下游的任何环节都救不了你。
免下车点餐 AI 为什么总是打断顾客?

罪魁祸首是一种叫做语音活动检测(Voice Activity Detection,简称 VAD)的东西。它是决定你何时开始说话、何时停下的那套系统。在大多数封装式方案里,它就是一个简单的能量阈值:声音超过一条线,就开始录音;声音跌破一条线,就停止录音。
想象一下这在免下车点餐窗口会怎样。你停顿半秒,瞥一眼菜单牌。能量下降。VAD 判定你说完了。它把一个句子片段发给模型,模型对一个你根本没问完的问题凭空编造出一个回应,于是你就开始跟一个扬声器争执了。
我们从零开始重建了自己的 VAD。我们不用能量阈值,而是用神经网络模型——Silero、Cobra——它们能在各种不同频率上为人声输出一个概率分数。我们的系统给出的不是二元的开/关,而是一个置信度。我们也不用固定的 500 毫秒停顿容差,而是采用一个 600 到 1000 毫秒的动态窗口,会根据对话语境进行调整。
不过,带来最大改变的诀窍,是我们所称的推测式转写。系统在 250 毫秒时就开始处理音频,但要等到确认有 600 毫秒的静默后才敲定一个终点。这段重叠把感知到的延迟降低了 350 到 600 毫秒,同时彻底消除了过早的打断。
我的联合创始人有好几个星期都坚称那个动态停顿窗口是过度设计。有天深夜我们还在办公室——咖啡凉透了,白板上画满了延迟图——他把椅子往后一推,说:「我们在一个只省下半秒钟的功能上花整整三个工程师周。没人会在免下车点餐时整整停顿一秒。这是个虚荣心作祟的问题。」我大概是这么回的:「可要是你错了,我们就造出了一个会打断每一个需要思考的顾客的系统。」那晚剩下的时间我们谁都没再说话。他午夜前后离开了。我留了下来,继续跑模拟。
后来我们拿真实顾客做了测试。结果发现,人们会不停地停顿——看菜单、转头问同车的人想要什么、盘算自己是不是真的需要薯条。整整一秒的自然停顿并不是沉默。那是在思考。我的联合创始人看到测试结果后,给我发了一句话:「你是对的。椅子的事对不起。」
当你把速度置于耐心之上去做优化,你造出来的系统就只对那些已经知道自己想要什么的人有用。
8000 万人
口吃影响着全球超过 8000 万人。在那次停车场经历之后,这个数字对我而言有了不一样的分量。
它表现为重复(「b-b-b-baconator」)、拖音(「mmmmilk」),以及卡壳——在一个词的中间出现的无声停顿,此时说话者在生理上根本发不出声音。
现在想想标准 VAD 遇到卡壳会怎么做。说话者在词说到一半时停止发声。系统把这段沉默理解为一轮对话结束。它对着半个词做出回应。说话者再试一次。系统又把这次重复当成一份新订单。不到十秒钟,你就有了一个一头雾水的 AI、一个沮丧的人,以及在他们身后越排越长的车队。
这不是一个边缘案例。这是一个设计选择。当你几乎只用「标准」美式英语——吐字清晰、停顿极少——来训练一个 ASR(自动语音识别)模型时,你就是在替「你的系统是为谁而造的」做决定。研究表明,基于 Conformer(一种将卷积与自注意力结合起来处理音频的神经网络架构)的 ASR 模型——它是当今大多数系统的骨干——在障碍性言语上的性能退化得如此严重,以至于有些会返回负的语义相似度分数。不只是不准确——在语义上完全颠倒。
当你的 AI 模型在障碍性言语上返回负的语义分数时,你造出来的并不是一个在边缘案例上吃力的系统。你造出来的,是一个从设计之初就压根没打算听见相当一部分人类的系统。
有位投资人曾直截了当地对我说:「直接用 API,以后再微调就好。你在一个只影响一小部分顾客的问题上白白烧钱。」我在手机上调出了数字——光是口吃就有 8000 万人,这还没算上各种口音、ESL(英语作为第二语言)人群、年长的顾客,以及任何在嘈杂车厢里点餐的人。我看着他的表情变了。「那可不是一小部分。」他说。「对,」我说,「不是。」
我们在重新标注过的不流畅言语数据集上微调自监督模型。我们采用合成不流畅插入的方法——拿来流畅的文字稿,加入卡壳和重复,再把它们合成为训练用音频。这是极耗心力的工作。它不是那种会出现在功能对比表上的东西。但它正是「对所有人都管用的系统」和「只对平均值管用的系统」之间的区别。
当语音 AI 运行在边缘端而非云端时,会发生什么?

对着 Wendy's 免下车点餐麦克风说出的每一个词,都要穿越公共互联网抵达一个 Google 数据中心,再返回。光是这一个来回,就要在模型开始处理之前先耗掉 100 到 500 毫秒。在语音交互中,黄金标准是低于 300 毫秒的响应时间——一旦超过这个数,对话就不再让人觉得自然。到了 700 到 900 毫秒,感觉就像一通糟糕的电话。到了两秒,人们就会开始抢在系统前面说话。
我们把一切都搬到了边缘端。在餐厅现场的专用硬件上进行本地处理。我们的延迟降到了 5 到 10 毫秒。
但真正的洞见不只是速度——而是模型的大小。一个通用大语言模型需要无所不知、样样都懂。而一个领域专用的小型语言模型只需要知道「Dave's Single」是一款汉堡,而不是一张音乐专辑。这种专注意味着更快的推理、更可预测的回应,以及只需一小部分的计算成本。相比基于云端的做法,我们看到了 3 倍的速度提升和 30% 到 40% 的运营成本降低。
边缘架构还解决了一个我们此前没有完全预料到的问题:可靠性。当网络中断时——而它一定会中断——一个依赖云端的系统就变成了一块非常昂贵的镇纸。而我们的系统照常运行。若想全面了解我们的边缘架构与云端做法的技术剖析,你可以深入研读这篇研究论文。
那堵没人在谈论的监管之墙
CAN-ASC-6.2:2025 于 2025 年初摆上了我的办公桌,我记得自己读它时怀着一种介于宽慰与被证明正确之间的心情——终于有一部标准说出了我们一直在为之努力的方向:残障人士必须参与到 AI 系统的设计、测试和治理中来。不是作为事后的补充。而是从一开始就参与。《欧洲无障碍法案》将于 2025 年 6 月开始强制执行,并附有高额罚款,而《美国残疾人法案》(ADA)也正被重新解读,以涵盖针对言语障碍人士的数字障碍。在 600 家门店对一套不合规的系统进行事后改造,其成本大约是一开始就把它做对的五倍。
「万一我们只是在打造一种极其昂贵的点汉堡方式呢?」
那个念头在凌晨两点左右击中了我,那大概是开发进行到第六个月的时候。我独自待在办公室里,盯着一个口吃词语的声谱图——那个词我们的系统仍然解析不出来。我们已经在这件事上耗了好几个月。我们已经烧掉了大部分初始资金。而那些做 API 封装的公司都在发布产品了,我们却还在调试信号处理流水线。
我差点就放弃了。差点就决定像其他所有人一样,干脆封装一下 API,先发布点什么,以后再迭代。
但在语音 AI 里,「以后再迭代」是一句谎言。一旦你把架构建立在依赖云端、VAD 阈值、只服务流畅言语这些假设之上,每一次顾客交互都会在你的训练数据里强化这些假设。你不会朝着无障碍的方向迭代。你只会离它越来越远。
先为边缘案例而造,那平均情形自会水到渠成。若为平均值而造,那边缘案例永远得不到修复。
那个让我重新思考一切的轮流对话问题
人类对话中有一种微妙之处,是我们完全习以为常的。当你说「我要一份 Baconator,还有……」——末尾那个「还有」就意味着你还没说完。人类收银员会等。而大多数免下车点餐 AI 不会。
我们把一种我称之为对话语法的东西内建进了我们的端点判定逻辑。系统会实时解析各种语言线索:表示话未说完的连词、表示话已说完的音高变化,以及「就这些」这个字面意思就是它本意的短语。当顾客说「就这些」时,我们的系统会在 200 毫秒内做出响应,因为意图毫不含糊。而当他们以「还有……」拖着尾音时,系统会等待,哪怕要等上整整一秒的沉默。
这也是我们「人在回路」(human-in-the-loop)理念所在之处。我们不认为 AI 应该在无人监督的情况下处理整笔交易。简单的、事务性的请求——交给 AI 处理。复杂的情形、沮丧的顾客、高摩擦的时刻——这些则会在交互彻底崩掉之前、而不是之后,升级转交给人工。
我们的目标从来都不是取代免下车点餐窗口的人工。而是要确保,再也没有任何一位顾客不得不对着一台根本不在听的机器高喊「AGENT」(人工坐席)。
我一次又一次地回想起 Wendy's 报告的那个 86% 的成功率。在大多数软件场景里,86% 都会算作失败。想象一个只能正确处理 86% 交易的银行 App。想象一个只有 86% 的时候能把你带到正确目的地的导航系统。而免下车点餐窗口,却不知怎么地把一个在任何其他消费者交互中都无法接受的失败率变成了常态。
这是一个架构问题,而不是一个 AI 问题
我在整个行业里看到的模式,是各家公司把语音 AI 当作一个软件层——一个只要有对的 API 密钥就能栓在现有基础设施之上的东西。我也理解其中的缘由。它快、它便宜,而且演示效果好得惊人。
但免下车点餐窗口不是一场演示。它是柴油发动机、是风、是幼儿、是各种口音、是口吃,是那些会停下来思考的人。它是人类沟通那种完整而无法化约的复杂性,发生在最糟糕的声学环境里。你没法靠封装蒙混过关。
最终会赢下这个市场的公司——我说这话,带着一个把自己整个职业生涯都押在这上面的人的偏见——是那些愿意钻得够深的公司。深入信号处理。深入声学建模。深入研究人们实际是怎么说话的语言学,而不是 ASR 训练数据认为他们应该怎么说。深入那种不依赖千里之外某个数据中心的边缘基础设施。
语音 AI 里没有捷径。有的只是那种严谨的、不光鲜的、极度技术性的工作——去构建能听见每一位顾客的系统。不是听见其中 86%。而是每一个,无一例外。
这才是「企业级」的含义。而在整个行业接受这个定义之前,我们还会继续看到一段段视频——视频里的免下车点餐扬声器,连「Baconator」这个词都听不懂。
