返回概览 · 深入分析

原始记录

来源、收到日期和原话

深入分析

证据、对比和深入分析

解决方案

可落地的方案、流程和基础设施

建议

结论、工作量和建议的第一步

E001 分析:本地可打断语音

阅读日:2026-11-12(UTC)。数字只来自当天打开的 GitHub API、Hugging Face API 和下列原文。没有在 64GB 机器上跑过这些模型。凡是「估计」都单独标出。

agent24 对照提交仍是 阅读快照 的 bc923205。这次没有因为语音材料去改基线。

1. 问题怎么拆

用户要的是学校里、本机、中英、可打断的语音 Agent,并且后台能调用同一台机器上的 API。内存档是 Mac 统一内存 64 / 128 / 256GB,以及同级 Windows,外加服务器对照。

这里把两件事分开:

学校第一版要的「可以被打断」用第二类就能满足。「边听边说」才需要第一类。

2. 调查范围和当天的公开热度

GitHub stargazers_count、pushed_at、license.spdx_id 取自 2026-11-12 的 REST API。Hugging Face downloads 与 lastModified 取自同一天的 https://huggingface.co/api/models/<repo>。OpenMOSS 的模型 API 返回 401,下载量记为未知,不估计。

对象 Stars 最近 push (UTC) SPDX 和本题的关系
OpenBMB/VoxCPM 42359 2026-11-09 Apache-2.0 TTS。VoxCPM2,2B,30 种语言含中英
OpenMOSS/MOSS-TTS 4321 2026-09-06 Apache-2.0 TTS 家族,含 Realtime 与 TTSD
OpenMOSS/MOSS-TTSD 1420 2026-09-06 Apache-2.0 长对话合成,不是实时打断对话
OpenMOSS/MOSS-Speech 148 2026-02-13 Apache-2.0 端到端语音,基座权重未发布
OpenMOSS/MOSS-Live 101 2026-11-11 API 未返回 SPDX 全双工系统说明,入口是线上 playground
QwenLM/Qwen3-TTS 14372 2026-03-17 Apache-2.0 0.6B / 1.7B,流式,中英等 10 种语言
QwenLM/Qwen3-ASR 3881 2026-06-26 Apache-2.0 0.6B / 1.7B,流式,52 种语言和方言
QwenLM/Qwen3-Omni 4099 2026-04-23 Apache-2.0 全模态。服务文档把它标成轮次式
QwenAudio/SenseVoice 9744 2026-09-30 MIT 小 ASR。论文里的测量是整段,不是流式
QwenAudio/CosyVoice 24369 2026-05-25 Apache-2.0 中文 TTS 主力之一。CosyVoice 2 官网写首包 150ms
kyutai-labs/moshi 11491 2026-09-09 Apache-2.0 原生全双工,有 MLX
OpenBMB/MiniCPM-V 27136 2026-11-09 Apache-2.0 MiniCPM-o 文档所在仓库
fishaudio/fish-speech 33691 2026-11-12 NOASSERTION 热度高。许可未在本次读完,不进学校默认
index-tts/index-tts 25052 2026-09-29 NOASSERTION 同上
hexgrad/kokoro 10061 2025-08-06 Apache-2.0 82M。MLX 有中文前端,活跃度更早
pipecat-ai/pipecat 17211 2026-11-12 BSD-2-Clause 编排
livekit/agents 15191 2026-11-12 Apache-2.0 编排,WebRTC
TEN-framework/ten-framework 11230 2026-11-11 NOASSERTION 编排。README 写 Apache-2.0 另有附加限制
Neywa-Labs/mlx-audio(由 Blaizzy/mlx-audio 指向) 8251 2026-11-11 MIT Apple 上的 ASR/TTS 运行库

Hugging Face downloads(API 字段,不另分时间窗):

模型 downloads lastModified
hexgrad/Kokoro-82M 12541810 2025-04-10
Qwen/Qwen3-ASR-1.7B 1667507 2026-01-30
Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice 1298088 2026-01-29
openbmb/VoxCPM2 989117 2026-11-09
Qwen/Qwen3-TTS-12Hz-0.6B-CustomVoice 739268 2026-01-29
Qwen/Qwen3-ASR-0.6B 584234 2026-01-30
Qwen/Qwen3-Omni-30B-A3B-Instruct 403894 2025-09-22
nvidia/parakeet-tdt-0.6b-v2 167950 2026-06-29
openbmb/MiniCPM-o-2_6 41124 2026-11-09
FunAudioLLM/SenseVoiceSmall 26756 2026-06-20
FunAudioLLM/CosyVoice2-0.5B 14656 2026-05-31
mlx-community/VoxCPM2-4bit 1753 2026-04-08
kyutai/moshika-mlx-q4 803 2024-09-18

下载量高不等于适合教室。Kokoro 最高,但仓库最后 push 停在 2025-08-06,中文要额外装 misaki[zh],本次没有找到官方中文音质表。

3. 必须单列的 VoxCPM 和 MOSS

VoxCPM2

官方 README(2026-11-12 读取)写明:2B,30 种语言,含中文和英文,以及一批汉语方言。48 kHz。流式 API 是 generate_streaming。Apache-2.0。RTX 4090 上 RTF 约 0.30,Nano-vLLM 或 vLLM-Omni 约 0.13。这里 RTF 小于 1 表示快于实时,是 TTS 论文里的常见定义。见 https://github.com/OpenBMB/VoxCPM

MLX 社区卡 mlx-community/VoxCPM2-bf16 写权重体积:bf16 4.96 GB、8-bit 3.23 GB、4-bit 2.30 GB。同一张卡把 RTF 定义成大于 1 才快于实时,并给出 0.48 / 0.85 / 0.90。机型没有写。因此不能把这三行当成 M 系列 Max 64GB 的实测。第三方 VoxWeft(stars 16,push 2026-09-22)报告他们自己的流式解码器首包:M5 约 169 ms,M2 16GB 约 303 ms,M3 Ultra 约 124 到 168 ms。这是移植作者的数字,不是 OpenBMB 的承诺。

结论:VoxCPM2 是学校中英音质的优先候选,CUDA 上有官方实时系数。Apple 上能装,但是否快于实时要在目标 Mac 上重测。它是 TTS,不是全双工对话模型。

MOSS-TTS、MOSS-TTSD、MOSS-TTS-Realtime

MOSS-TTS README 把家族分成长期合成、对话合成、声音设计和实时 TTS。Apache-2.0。

MOSS-Speech 和 MOSS-Live

MOSS-Speech 的 README 写它不先出文本、直接出语音,骨干是 Qwen3-8B。Next Steps 仍勾着两件未完成的事:开放 base 模型,以及 Gradio 流式输出。不能当作今天可部署的全双工。

MOSS-Live 和 Hugging Face 博客(2026-11-07)描述的是全双工、可打断、能区分「嗯」和抢话,后台工具和前台说话并行。开始方式是线上 playground 和 realtime API。README 没有本地权重和显存表。他们自己的表里,用户打断后的响应延迟是 1.38 秒,Candor 接话延迟 1.14 秒。这些是他们的评测,不是本校网络。学校要求音频留在本机,所以 MOSS-Live 只作能力对照,不进部署排序。

4. 其他一线组件,按角色

听

说

原生或接近原生的对话模型

编排

5. 八个完整方案,按学校可部署性排序

每个方案都是「模型组合 + 编排」,不是单颗模型。排序看的是:中英、可打断、本机、许可清楚、目标内存放得下、能调用本机 agent24。不按 stars 排序。

名次 方案 组合 双工 中英 Apple 许可与缺口
1 S1 教室级联 Pipecat,Silero 或以后替换的 TEN VAD,Qwen3-ASR,MLX/llama.cpp 上的 Qwen 文本模型,Qwen3-TTS-0.6B。VoxCPM2 作音质 A/B 可打断,非原生 官方都覆盖 ASR 与两种 TTS 都有 MLX 端口 全部 Apache-2.0 或 BSD。Apple 首包延迟未由原厂公布
2 S2 CUDA 音质级联 同 S1,TTS 主选 VoxCPM2,跑在 RTX 4090 级 GPU 可打断 是 MLX 有端口但 RTF 机型不明 4090 RTF 是官方数字
3 S3 低延迟 TTS 级联 同 S2,TTS 换成 MOSS-TTS-Realtime 可打断 20 种语言含中英 Realtime 的 MLX 未证实 L20 上 180 ms TTFB 是官方数字。codec 另占约 8 GB
4 S4 服务器级联 SGLang-Omni 的 cascaded:Qwen3-ASR、文本 LLM、Qwen3-TTS 可打断 是 不是这条路径 指南要求级联一张或两张大 GPU。并发见下节
5 S5 Omni 轮次 SGLang-Omni 上的 Qwen3-Omni-30B-A3B-Instruct 说话时可掐断,模型不边听边说 是 无 MLX 证据,BF16 门槛高于 64GB 2x H100 或 1x H200
6 S6 传输升级 S1 的模型不变,编排换成自建 LiveKit Agents,媒体走 WebRTC 与 S1 相同 同 S1 同 S1 要 TURN。自适应打断的默认条件含云
7 S7 Moshi 旁路 Moshi MLX q4 或 q8,只接英语陪练,不接工具 原生全双工 官方材料未证明中文 MLX,M3 测过 CLI 无回声消除
8 S8 原生双工实验 MiniCPM-o 4.5 duplex,一台独占 GPU 原生,默认 1 秒一块 模型家族支持中英,本次未引用教室指标 无 MLX duplex 证据 指南写至少 80GB GPU

不进入这八名的:

6. 各档第一名

并发一栏没有本校测量。估计只写设计目标。

档 第一名 为什么不是更大的模型 打断 并发
Mac 64GB 统一内存 S1。ASR 用 mlx-community/Qwen3-ASR-0.6B-8bit。TTS 先用 Qwen3-TTS-0.6B-8bit。LLM 用 MLX 上能与这两颗同时常驻的 Qwen3 量化,具体 id 等第一刀量内存再定。VoxCPM2-4bit(2.30 GB)或 8bit(3.23 GB)做 A/B Qwen3-Omni 的 15 秒视频 BF16 表是 78.85 GB。MiniCPM-o duplex 的服务指南是 80GB GPU。两者都超过 64GB 的可用余量 级联可打断 设计目标 1 路
Mac 128GB 仍是 S1。ASR 可升到 1.7B。VoxCPM2-8bit 可以常驻。LLM 用余量,不把三颗都顶到最大 128GB 仍低于 78.85 GB 与 80GB 这两条官方门槛之上的安全余量,系统和其他进程还要占内存 同上 设计目标仍是 1 路。多出来的内存给上下文,不先分给学生
Mac 256GB 产品路径仍是 S1。可选旁路 S7,只给英语会话 256GB 容量上可能装下 Omni 或 MiniCPM-o,但没有 MLX duplex 实现,也没有本校延迟 S1 可打断。S7 才是原生全双工 未测
Windows,64GB 内存 + 24GB 级 GPU(RTX 4090 这一类) S2。VoxCPM2 用官方 4090 RTF。ASR 0.6B。LLM 放在剩余显存,放不下就放系统内存里的 llama.cpp 24GB 装不下 Qwen3-Omni 的 78GB 级 BF16,也装不下「6+8 GB Realtime」再加一个大 LLM 还同时保持余量。Realtime 留给下一档 级联可打断 设计目标 1 路
Windows,128GB 内存 + 48GB 级 GPU S3。MOSS-TTS-Realtime 的 180 ms 是为语音代理测的。VoxCPM2 留作音质开关 48GB 仍不是 SGLang 为 Omni 写的 2x H100 或 1x H200 级联可打断 未测
Windows,256GB 内存 + 80GB 级 GPU S4 的级联,TTS 仍可用 VoxCPM2 或 Qwen3-TTS。S8 只作实验进程 单张 80GB 刚好碰到 Omni 15 秒视频的理论下限,不把第一名押在这条下限上 级联可打断。S8 是原生 未测
服务器,1 张 H200 S4 作者博客写级联在准入上限上每卡 16 个会话,MiniCPM-o 8 个,单卡 Qwen3-Omni 布局 2 个(https://edwingao.com/posts/sglang-omni-interactive-runtime)。这是作者自己的服务测量,不是本校 级联可打断 只引用上述上限,不换算成班级人数
服务器,2 张 H100 S5,若目标是单模型轮次语音。若目标是工具和人数,仍用 S4 SGLang 写短对话 max_sessions 为 4 可掐断,非原生全双工 槽位 4,见指南

64GB 能不能用:能。指的是一路中英、可打断、模型和 API 都在本机的级联对话。不能指原生全双工,也不能指未经测量的多学生同时说话。

更大的显存会更好的部分,只在官方材料里出现过的范围:4090 上 VoxCPM2 有 RTF,H200 / 双 H100 才能按 SGLang 的配置跑 Omni 或原生 duplex。它不自动让 64GB 上的中文对话变得不可用。

7. 和 agent24 的缝

基线见 agent24 架构基线。和语音直接相关的代码是:

因此语音时钟应留在 AgentEar。agent24d 继续通过已有的 _a24/model/complete 回答,而不是再为语音开一条 /api/v1/runs。闲聊如果要边出边合成,仍走 AgentEar 本机边车的流式。附着路径今天是整句。

9. AgentEar 已经覆盖什么

阅读提交 17e911b。对照表:

E001 需要 AgentEar 现状 缺口
采集 src/audio.rs 的 cpal,16 kHz 播放时没有第二条监听流
传输 本机进程,没有浏览器 多学生浏览器不在这个仓库
VAD fsmn-vad.gguf 只切已经录完的 wav(src/asr.rs 第 181-187 行) 不是 barge-in
ASR 松键后整段转写。中英 SenseVoice,另有 Qwen3 后端 没有边说边出字
轮次 按键开始和结束 没有语义轮次
叫 agent24 A3 _a24/model/complete(src/a3.rs 第 515 行) 非流式,HostLlm 第 584-618 行
取消 超时发 $/cancelRequest(src/a3.rs 第 451-455 行)。按键走 stop_playback 开口不会取消还在飞的模型调用
TTS 默认 VoxCPM2-4bit,POST /speak 整段 wav。句子级重叠 不是音频 token 流。播放期间不听用户
打断 推键半双工。README 第 38 行写自动打断未做 没有全双工

结论:Mac 上的语音网关应做在 AgentEar 里面,不从 Pipecat 重写采集、识别和 VoxCPM2。Windows 档 AgentEar 跑不了,仍用原来的 S2 到 S5,那是另一条以后的移植,不是第一刀。

8. 事实、推断、未验证

事实是第 2 到第 4 节里带链接的句子。推断是:64GB 同时装下 ASR 0.6B 8-bit、TTS 0.6B 8-bit 和一个中小 LLM 后仍有余量。权重体积支持这个方向,进程开销和 KV 缓存没有测。

未验证:任何一档的端到端毫秒、同时学生数、VoxCPM2 在 M 系列 Max 上的 RTF、MOSS-TTS-Realtime 的中文主观音质、教室扬声器下的误打断率、MiniCPM-o 4.5 在 Apple 上能否跑。AgentEar README 里的 2.80 秒中位数是他们自己的句子级流水线,这次没有重测,也不能当成语音打断之后的数字。