把一个语音识别模型压到 16.9 MB,在纯 CPU 上只吃 124 MB 内存,还能跑出每秒 1,300 多个 Token。Cactus Compute 推出的 Whistle 刚拿出来时,几乎被包装成了端侧工控的救星。官方声称它在 LibriSpeech 上击败了体积极其庞大的行业标杆 OpenAI Whisper base。
把模型压到原来的八分之一,还能在标准测试集上反超对手,听起来像某种工程奇迹。
但最新一轮独立实测拆穿了这个神话。这不仅是一场基准口径被精巧剪裁过的跑分魔术,更暴露出了极轻量模型在长语音处理中最危险的工程缺陷:当音频跨过 30 秒窗口时,系统会在没有任何报错提示的情况下,静默丢弃整段音频。
跑分拆妆:束搜索带来的统计幻觉
语音转录在本地设备上的瓶颈往往不是算力,而是内存占用与首字延迟。Whisper base 在 CPU 上以 FP32 运行,启动后峰值内存直奔 823 MB。Cactus Whistle 搭配自身的 Needle C++ 推理引擎,将峰值内存压制在 124 MB,基于 Apache-2.0 协议开源,原生支持英、德、法、西等 7 种语言。
官方给出的成绩十分亮眼:在 Apple M4 Pro 上首字延迟仅 11.1 毫秒,LibriSpeech clean 评测集词错率 4.31%,甚至在带噪的 other 子集录得 10.49%。

但独立的配对检验揭开了对照组的猫腻:官方对比的基准,是未启用束搜索的贪婪解码版 Whisper。
在 100 组测试样本的配对检验中,Whistle 录得 10.27% 的词错率,确实好于贪婪解码下 Whisper base 的 12.46%。然而一旦为 Whisper base 打开标准的 5-beam 束搜索,后者的错误率随即降至 10.83%。经过配对说话人重采样与统计校正后,两者的精度差异在统计学上直接归零。
| 模型 | 存储体积 | 运行内存 (CPU) | LibriSpeech Clean | TED-LIUM (演讲) | AMI (会议噪声) |
|---|---|---|---|---|---|
| Whistle | 16.9 MB | ~124 MB | 4.31% | 7.61% | 26.07% |
| Whisper base (5-beam) | 145.3 MB | ~823 MB | 4.5% 左右 | 5.00% | 21.50% |
| Moonshine tiny v2 | 41.9 MB | 未公布 | 12.00% | 未公布 | 未公布 |
脱离干净朗读集后,抗噪能力的短板更难掩盖。长演讲 TED-LIUM 测试中,Whistle 词错率为 7.61%,落后于 Whisper base 的 5.00%;高噪会议 AMI 数据集上,Whistle 词错率直接飙升到 26.07%,显著弱于对手的 21.50%。
所谓全面超越,无非是在自己精选的跑道上,挑了一个没穿跑鞋的对手。
速度衰减与 30 秒静默截断
比起精度注水,推理效率的递减与工程稳定性才是更现实的硬伤。Whistle 的速度优势并不是恒定的,加速比随音频长度出现断崖式衰减。
在 5 秒以内的短语音输入下,Whistle 凭借极轻的计算负荷跑出 Whisper base 近 7.7 倍的速度;但音频拉长到 30 秒时,加速优势迅速缩水到 2.8 倍。极小架构在长序列注意力矩阵上的低效,大幅消耗了它原本建立的轻量红利。

比速度衰减更致命的是滑动窗口的处理逻辑。
Whistle 单次推理的硬性上限被锁在 30 秒,长音频必须依赖底层引擎切片与窗口拼接。但在 Needle 3.3.0 动态库实测中,当音频跨越 30 秒窗口边界时,引擎在没有抛出任何系统异常的情况下,静默丢弃了中间几秒的音频内容。
程序正常返回,退出状态码为零,日志毫无异样,但说话人的中段语音直接凭空蒸发。在真实产线中,一个直接崩溃并报出段错误的程序,远比一个假装成功却把业务数据吃掉的系统好排查得多。
- 风险警示.在官方彻底修复 Needle 引擎的长音频窗口重叠逻辑前,切忌将该模型直接挂载到无外部切片守护的长录音、长会议实时转录管线中。
语音直通工具链的脆弱闭环
Cactus 的产品野心从来不是做一个听写记事本,而是要充当端侧微控制器的执行中枢。它把 16 kHz 单声道输入剧烈下采样为每 80 毫秒一帧,解码端设计了门控交叉注意力,只做一次投影缓存,配合内置的 Aho-Corasick 自动机硬锁特定关键词,力求直接输出 JSON 工具调用指令。

这套单二进制直通管线省去了中间进程通信的开销,却把整条容错防线压得极脆。
在云端,大模型尚有充足的上下文窗口做二次推演纠错。但在 120 MB 的严苛端侧环境里,没有任何空间容纳一个冗余的纠错语言模型。语音端一旦因为噪声或口音误读动词,下游的 Tool Call 链路就会直接被标记为抑制状态,物理外设当场失联;若是非英语环境,Needle 还会频繁出现参数漂移。
追求纯离线部署的嵌入式团队还必须提防另一件事:项目的底层 C++ 库以预编译二进制形式提供,训练管线未开源,且配套的 Python SDK 默认回传带有匿名 ID 的遥测日志。要彻底切断网络上传,必须手动在系统环境中显式注入 NEEDLE_TELEMETRY=0 或 DO_NOT_TRACK=1。
边缘模型的真实账本
汉代扬雄在《法言》里写过一句话:山不让凌陟,故莫之极大;地不让舨步,故莫之广厚。做系统架构同样如此。
把参数压缩到 16.9 MB、把内存压到 124 MB,本身是一项极高水平的工程剪裁。如果应用场景被死死限制在智能家居开关、车载唤醒词、工业手柄操作这类 5 秒以内的短指令里,Whistle 带来的延迟红利与极低资源开销,确实是体量庞大的 Whisper 无法提供的。
但参数规模欠下的债务,在长文本、高抗噪和多轮拼接这些硬指标上,终究无法单凭算子技巧凭空抹平。
轻量化模型适合做锋利的单功能工兵,而不是挑大梁的通用听写核心。盲信跑分表上的超越,往往是系统事故的起点。把守护机制、切片逻辑与外围校验做严密,才不至于让硬件上省下来的几百兆内存预算,最后全部变成售后排障时结算不完的代价。
