huggingface/speech-to-speech 深入解析:用开源模型搭建本地语音 Agent
huggingface/speech-to-speech 深入解析:用开源模型搭建本地语音 Agent
2024 年 8 月,Hugging Face 发布了一个不起眼的仓库:speech-to-speech。两年后(截至 2026 年 7 月 30 日),它收获了 8,101 Star、1,022 Fork,并且已经在数千台 Reachy Mini 机器人上作为对话后端生产运行。
这不是另一个语音模型。这是一个语音 Agent 的运行时框架——把 VAD(语音活动检测)、STT(语音转文字)、LLM(大语言模型)、TTS(文字转语音)这四个组件串成一个低延迟流水线,再通过 OpenAI Realtime 兼容的 WebSocket API 暴露出去。
为什么这件事重要?因为当前语音 AI 产品几乎都是闭源的——OpenAI 的 Advanced Voice Mode、Google 的 Gemini Live——它们的流水线对你是一个黑箱。speech-to-speech 把这个黑箱拆开,让你可以逐层替换每一个组件,从 STT 到 LLM 到 TTS,全部换成开源模型。
一、架构:四层流水线 + 四条通信通道
speech-to-speech 的核心架构是一组四个独立线程,通过队列连接:
麦克风输入 → [VAD] → [STT] → [LLM] → [TTS] → 音频输出
↑ ↑ ↑ ↑
各自运行在独立线程,队列解耦
| 层级 | 组件 | 默认实现 | 是否本地 |
|---|---|---|---|
| VAD | 语音活动检测 | Silero VAD v5 | ✅ 本地 |
| STT | 语音转文字 | Parakeet TDT 0.6B | ✅ 本地 |
| LLM | 大语言模型 | GPT-4.1-mini (OpenAI API) | ⚙️ 可切换本地 |
| TTS | 文字转语音 | Qwen3-TTS 1.7B | ✅ 本地 |
默认配置下,STT 和 TTS 都跑在本地,只有 LLM 走 OpenAI API。但 LLM 可以换成任何 OpenAI 兼容接口——本地 llama.cpp、本地 vLLM、Hugging Face Inference Providers、甚至 DeepSeek/OpenRouter。
四种运行模式
项目提供了四种通信通道,覆盖从开发到生产的场景:
| 模式 | 传输方式 | 适用场景 |
|---|---|---|
realtime(默认) |
WebSocket,OpenAI Realtime 协议 (/v1/realtime) |
构建标准语音 API 应用 |
local |
本机麦克风和扬声器 | 直接在终端和流水线对话 |
websocket |
原始 PCM 音频 over WebSocket | 自定义极简客户端 |
socket |
原始 PCM 音频 over TCP | 模型跑在远程服务器上 |
realtime 模式是真正的卖点——它实现了 OpenAI Realtime API 的核心事件集:input_audio_buffer.append、session.update、conversation.item.create、response.create、response.cancel,以及流式转录、工具调用、打断处理。任何兼容 OpenAI Realtime 的客户端都能直连。
二、组件矩阵:每个环节的可替换方案
这是 speech-to-speech 最硬核的部分——它不只是支持"多选一",而是为每个环节都维护了一个完整的可替换后端矩阵:
STT 后端(语音转文字)
| 后端 | 平台 | 安装方式 | 特点 |
|---|---|---|---|
| Parakeet TDT(默认) | CUDA / CPU / Apple Silicon | 内置 | NVIDIA 出品,25 种欧洲语言 |
| Whisper (Transformers) | CUDA / CPU | 内置 | 广泛多语言覆盖 |
| Faster Whisper | CUDA / CPU | faster-whisper |
CTranslate2 加速,速度更快 |
| Lightning Whisper MLX | Apple Silicon | whisper-mlx |
macOS 上最快的 Whisper |
| MLX Audio Whisper | Apple Silicon | macOS 内置 | Hugging Face 的 MLX 移植 |
| Paraformer | CUDA / CPU | paraformer |
中文优化,通过 FunASR |
LLM 后端
| 后端 | 协议 | 适用场景 |
|---|---|---|
responses-api(默认) |
/v1/responses |
OpenAI、HF Inference Providers、任何兼容服务器 |
chat-completions |
/v1/chat/completions |
vLLM 工具调用流式不稳定时回退 |
transformers |
进程内本地推理 | CUDA / CPU,直接加载 HF 模型 |
mlx-lm |
进程内本地推理 | Apple Silicon,MLX 加速 |
关键设计决策:chat-completions 和 responses-api 共用同一套 --responses_api_* 连接参数,只是路由到不同端点。这个设计不是多余的——作者在实践中发现,某些 vLLM 构建在 Responses 流式工具调用路径上不可靠,但 Chat Completions 稳定(见 Issue #312)。所以两个后端并存,不是功能冗余,而是生产环境下的容错设计。
TTS 后端
| 后端 | 平台 | 安装方式 | 特点 |
|---|---|---|---|
| Qwen3-TTS 1.7B(默认) | Linux (GGML) / macOS (MLX) | 内置 | 多语言、多音色、流式合成 |
| Kokoro-82M | CUDA / CPU / Apple Silicon | kokoro |
轻量级,82M 参数 |
| Pocket TTS | CPU / CUDA | pocket |
Kyutai Labs 出品,支持声音克隆 |
| ChatTTS | CUDA / CPU | chattts |
中英文对话风格合成 |
| MMS TTS | CUDA / CPU | facebook-mms |
Meta 出品,多语言覆盖 |
Qwen3-TTS 的部署细节值得注意:Linux 上走 GGML 后端(通过 faster-qwen3-tts),macOS 上自动切换为 mlx-audio。GGML 默认 CUDA 12.8,但项目提供了 CUDA 12.4/13.x/CPU 的预编译 wheel。这不是简单的"pip install"就能搞定的事——对硬件差异的覆盖程度直接决定了多少人能用起来。
三、全本地部署:从零到对话只需两步
speech-to-speech 的全本地部署路径是它区别于其他方案的核心竞争力。你不需要任何 API key:
# 终端 1:启动 llama.cpp 服务 Gemma 4
llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full
# 终端 2:启动 speech-to-speech,LLM 指向本地 llama.cpp
speech-to-speech \
--model_name "ggml-org/gemma-4-E4B-it-GGUF" \
--responses_api_base_url "http://127.0.0.1:8080/v1" \
--responses_api_api_key ""
生产级部署甚至更简洁——项目提供了 Docker Compose 文件,一键启动 llama.cpp + speech-to-speech 的完整栈。
macOS 优化:--local_mac_optimal_settings
Apple Silicon 用户有一条"一键最优"的捷径:
speech-to-speech --local_mac_optimal_settings
这个标志自动做四件事:启用 MPS 加速、Parakeet TDT for STT、MLX LM 作为 LLM 后端、Qwen3-TTS 使用 6bit MLX 量化。它甚至支持在 macOS 上对比不同量化精度的 TTS 性能:
python scripts/benchmark_tts.py \
--handlers qwen3 \
--iterations 3 \
--qwen3_mlx_quantizations bf16 4bit 6bit 8bit
这种对硬件边界的照顾程度,非常 Hugging Face——不是"我们支持 Apple Silicon",而是"我们在 Apple Silicon 上给出了最优的默认配置"。
四、与 VibeVoice 的对比:两种语音 AI 路线
截至 2026 年 7 月,开源语音 AI 赛道上两个最受关注的项目是 speech-to-speech 和 Microsoft VibeVoice。但两者的定位完全不同:
| 维度 | speech-to-speech | Microsoft VibeVoice |
|---|---|---|
| 定位 | 语音 Agent 运行时框架 | 语音 AI 模型家族 |
| 核心能力 | 流水线编排:VAD→STT→LLM→TTS | 单模型能力:TTS + ASR |
| Star(截至 2026-07) | 8,101 | 51,503 |
| 创建时间 | 2024-08 | 2025-08 |
| 许可证 | Apache 2.0 | MIT |
| 模型数量 | 0(只编排,不训练) | 4(ASR-7B / TTS-1.5B / Realtime-0.5B / BitNet) |
| 最大处理长度 | 取决于 LLM 上下文窗口 | ASR 60分钟 / TTS 90分钟 |
| 实时性 | ✅ 流式,支持打断 | TTS 流式(~300ms 首字延迟),ASR 非流式 |
| 模块化 | ✅ 每个组件可替换 | ❌ 模型是固定的 |
| 全本地 | ✅ 完全本地 | ✅(ASR-BitNet 可 CPU 推理) |
| 工具调用 | ✅ 支持 LLM 工具调用 | ❌ 不涉及 |
| 生产案例 | Reachy Mini 机器人 | Azure AI Foundry Labs |
核心差异:speech-to-speech 回答的是"怎么把现有模型拼成一个能对话的 Agent",VibeVoice 回答的是"怎么做一个更好的语音模型"。前者是编排层,后者是模型层。
这也是为什么 VibeVoice 的 Star 数高得多——模型天然比框架更容易获得关注。但实际搭建语音 Agent 时,你大概率两个都要用:VibeVoice 的 ASR/TTS + speech-to-speech 的流水线 + 你自己的 LLM。
五、多维度评分
| 维度 | 评分 | 理由 |
|---|---|---|
| 架构设计 | 9/10 | 四层线程解耦、队列通信、组件热插拔,清晰且实用 |
| 硬件覆盖 | 9/10 | CUDA/CPU/MPS,Linux/macOS,GGML/MLX 双轨,CUDA 多版本 |
| 生态兼容 | 9/10 | OpenAI Realtime 协议兼容,任何客户端可直连 |
| 全本地能力 | 10/10 | STT+TTS 本地默认,LLM 可换 llama.cpp/vLLM |
| 文档质量 | 7/10 | README 详尽,但架构文档分散在子目录,缺少统一的架构图 |
| 生产就绪 | 8/10 | 已在机器人上运行,但 119 个 Open Issue 暗示仍有边缘 case |
| 模型选择 | 8/10 | 每个环节 3-6 个后端,但 LLM 不内置最强开源模型 |
| 许可证 | 10/10 | Apache 2.0,无限制 |
综合:8.5/10
六、选型建议
选 speech-to-speech,如果你:
- 需要搭建完整的语音对话系统,不只是单个模型
- 要求每个组件可替换——从 STT 到 LLM 到 TTS 都有自己的偏好
- 需要全本地部署,数据不出本机
- 需要 OpenAI Realtime API 兼容的接口
- 在做机器人、智能家居等嵌入式语音交互
选 VibeVoice,如果你:
- 只需要一个高质量的 ASR 或 TTS 模型
- 需要处理超长音频(60分钟 ASR / 90分钟 TTS)
- 需要说话人分离和长文转录
- 在 Azure 生态中,希望直接使用 Azure AI Foundry 的服务
两者组合使用
最实际的方案:VibeVoice-ASR 作为 STT + VibeVoice-TTS 作为 TTS + speech-to-speech 作为流水线框架 + 你的 LLM。speech-to-speech 的模块化设计让这种组合完全可行——你只需要为 VibeVoice 写一个后端适配器。
结论
speech-to-speech 在当前开源语音 AI 生态中占据了一个独特的位置:它不训练模型,但它让所有模型能协同工作。这是典型的"胶水层"价值——比任何一个单点模型更难被替代。
它的核心竞争力三个:模块化(每个环节可替换)、协议兼容(OpenAI Realtime API 标准)、全本地(一条命令从云端切到本地 llama.cpp)。这三点的组合,目前没有第二个开源项目做到。
我们的建议:如果你正在搭建语音 Agent,speech-to-speech 是目前最好的起点。它不是最"炫"的项目(VibeVoice 的 Star 是它的 6 倍),但它是你最可能实际跑起来、集成进产品的那个。
参考资料
- huggingface/speech-to-speech GitHub 仓库 — 8,101 Star,Apache 2.0,创建于 2024-08
- speech-to-speech README — 完整文档,包含所有后端和配置
- Realtime Engine README — OpenAI Realtime 协议的完整事件参考
- Issue #312: Chat Completions vs Responses 流式工具调用 — vLLM 兼容性讨论
- Reachy Mini 机器人 — 本地对话指南 — speech-to-speech 生产案例
- Silero VAD v5 — 默认 VAD 组件
- Parakeet TDT 0.6B — NVIDIA 默认 STT 模型
- Qwen3-TTS — 默认 TTS 模型
- llama.cpp — 全本地 LLM 推理
- Microsoft VibeVoice — 对比项目,51,503 Star