你正说“帮我查一下明天的天气,地点是——”,语音助手却把停顿当成句号,抢先回答;等你纠正,它又听不见,因为它正忙着播放自己的声音。Speakrail 想解决的就是这种“不像聊天”的感觉:让语音 Agent 在说话时仍能听见用户,判断什么时候该接话、沉默或被打断,而且整套系统都在本地运行。
项目作者称,Speakrail 是一个开源的全双工语音 Agent——“全双工”指系统播放回答时仍持续接收语音,因此能处理打断和插话。作者还称,它能在单张 RTX 4090 上低延迟运行,并在部分基准中媲美 GPT-Live。不过,这些性能说法目前都来自作者自述,材料没有给出具体指标或第三方复现。
难点不是听见,而是知道谁该说话
传统语音助手常像接力赛:先把用户的话听完并转成文字,再让语言模型回答,最后由 TTS——文字转语音系统——朗读。任何一棒变慢,等待就会累积成端到端延迟,也就是从用户开口或说完,到听见回答之间的总时间。
更棘手的是轮次判断:用户是真的说完了,还是只停下来想了半秒?系统太积极就抢话,太谨慎又显得迟钝。作者表示,他试过 Hugging Face speech-to-speech、Unmute 和 Pipecat 等本地方案,但认为它们受到 Whisper 转写幻觉或轮次判断缓慢的限制。他也参考了具备全双工能力的 DuplexCascade,不过对其模型和合成数据带来的实际表现并不满意。这些评价带有作者个人判断,不能视为横向测评结论。
把对话切成更小的瞬间
Speakrail 的核心思路是 microturn,即把一轮对话拆成连续的小片段。模型不必等用户完整说完,而是不断接收流式语音识别结果,边听边决定下一步。它可以输出 <listen>、<interject> 等控制 token——可以理解为写给系统的动作指令——分别表示继续听或现在插话。
作者披露的本地语音栈包括三个主要组件:带轮次判断模块的 Voxtral Realtime 负责接收语音,经 microturn 微调的 Gemma 4 12B 负责决定如何回应,Breeze TTS 2 再把文字读出来。这里的“12B”表示模型约有百亿级参数。项目所列部分模型名称尚缺少独立来源确认,因此更稳妥的说法是:这是作者公布的组件配置。
第一次训练,助手成了话痨
据作者在 Reddit r/LocalLLaMA 的发布帖回忆,他通过 Fireworks,用 GLM 5.3 Flash 和 GLM 5.3 生成包含指令遵循、工具调用的合成对话,再把它们转换为 microturn 训练数据,并在 vast.ai 租用 H100 训练。
第一次结果很糟:模型没有学会何时沉默,几乎一直说个不停。作者随后给语音识别部分加入专门的轮次判断模块,把“用户仍在说”或“用户已经说完”等提示传给语言模型,系统才逐渐像正常对话。
插话同样依赖数据。作者检查约 15 万条训练样本后发现,真正包含打断行为的只有约 150 条。他随后补造和筛选数据、修复生成脚本,并调整训练。这个经历点明了全双工语音 Agent 的关键:它不仅要会组织答案,还要从数据中学会谈话礼仪。
为什么值得关注
Speakrail 的意义不只在于“语音助手搬到本地”。本地语音栈把语音输入、轮次控制、对话生成和朗读都放在用户自己的硬件上,可以减少云端依赖,也回应了隐私与响应速度的需求。更重要的是,它把竞争焦点从“回答得对不对”推向“交流得自然不自然”:能否听懂停顿,能否接受打断,能否在恰当时机简短附和。
如果作者公布的体验能够被复现,那么单张高端消费级显卡运行全双工系统,会降低研究和试用本地实时语音 Agent 的硬件门槛。但目前更适合把 Speakrail 看成一份值得拆解的开源方案,而不是已经得到充分验证的 GPT-Live 替代品。
局限与未知
- “低延迟”没有对应的首字延迟、端到端延迟或实时系数;单张 RTX 4090 的显存占用、量化方式和并发能力也未披露。
- “部分基准媲美 GPT-Live”缺少基准名称、测试集、指标、分数和对照设置,不能当作已证实结论。
- 全双工、打断与插话效果,以及作者列出的部分模型标识,目前均未获独立验证;现有材料还在结尾处截断,可能遗漏训练和测试细节。