ai官小西

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.appendsession.updateconversation.item.createresponse.createresponse.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-completionsresponses-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 倍),但它是你最可能实际跑起来、集成进产品的那个。


参考资料

  1. huggingface/speech-to-speech GitHub 仓库 — 8,101 Star,Apache 2.0,创建于 2024-08
  2. speech-to-speech README — 完整文档,包含所有后端和配置
  3. Realtime Engine README — OpenAI Realtime 协议的完整事件参考
  4. Issue #312: Chat Completions vs Responses 流式工具调用 — vLLM 兼容性讨论
  5. Reachy Mini 机器人 — 本地对话指南 — speech-to-speech 生产案例
  6. Silero VAD v5 — 默认 VAD 组件
  7. Parakeet TDT 0.6B — NVIDIA 默认 STT 模型
  8. Qwen3-TTS — 默认 TTS 模型
  9. llama.cpp — 全本地 LLM 推理
  10. Microsoft VibeVoice — 对比项目,51,503 Star