huggingface / speech-to-speech

huggingface/speech-to-speech

open_in_new前往仓库

使用开源模型构建本地语音代理

项目概览

项目概述

speech-to-speech 是 Hugging Face 推出的开源语音智能体构建框架,旨在通过开源模型快速搭建本地语音助手。它提供了一个低延迟、模块化的语音处理流水线:语音活动检测(VAD)→ 语音转文本(STT)→ 大语言模型(LLM)→ 文本转语音(TTS),并通过 OpenAI Realtime 兼容的 WebSocket API 对外提供服务。该项目已在生产环境中作为数千台 Reachy Mini 机器人的对话后端运行。

核心功能

  • 模块化流水线:VAD、STT、LLM、TTS 四个组件均可独立替换,支持多种后端实现。
  • OpenAI Realtime 兼容:提供与 OpenAI Realtime 协议兼容的 WebSocket 和 WebRTC 接口,方便集成现有客户端。
  • 多后端支持:STT 支持 Parakeet TDT、Whisper、Faster Whisper、Paraformer 等;TTS 支持 Qwen3-TTS、Kokoro、Pocket TTS、ChatTTS 等;LLM 支持 OpenAI 兼容 API、Transformers、mlx-lm 等。
  • 完全本地运行:支持通过 llama.cpp、vLLM 等自托管 LLM 服务器实现全本地部署,无需联网。
  • 多语言支持:根据所选 STT/TTS 后端,支持多种语言,包括自动语言检测和切换。
  • 低延迟交互:支持实时转录、打断(barge-in)、Smart Turn 端点检测等特性,优化对话体验。
  • LLM 代理:可选的 LLM 代理功能,允许客户端在语音对话的同时执行后台任务。

适用与不适用场景

适用场景:

  • 构建语音助手、语音交互应用或智能设备。
  • 需要低延迟、可定制的语音对话流水线。
  • 希望使用开源模型实现本地化、隐私保护的语音处理。
  • 需要与 OpenAI Realtime 客户端兼容的语音服务。

不适用场景:

  • 需要图形界面或完整语音应用框架的场景(本项目仅提供核心流水线和 CLI)。
  • 对语音识别或合成质量有极高要求,且不愿自行调优模型和参数。
  • 需要多轮复杂对话管理或长期记忆功能(需自行扩展)。

技术架构与依赖

  • 语言:Python 3.10+。
  • 架构:四阶段流水线(VAD→STT→LLM→TTS),每个组件运行在独立线程,通过队列连接。
  • 主要依赖:
    • VAD:Silero VAD v5。
    • STT:Parakeet TDT(默认)、Whisper、Faster Whisper、Paraformer 等。
    • LLM:OpenAI 兼容 API、Transformers、mlx-lm。
    • TTS:Qwen3-TTS(默认)、Kokoro、Pocket TTS、ChatTTS 等。
  • 可选依赖:通过 pip extras 安装,如 [kokoro]、[pocket]、[faster-whisper] 等。
  • 平台支持:Linux、macOS(Apple Silicon)、Windows(部分功能)。

安装与快速开始

安装:

pip install speech-to-speech

快速开始:

export OPENAI_API_KEY=...
speech-to-speech serve

启动后,服务器监听 ws://localhost:8765/v1/realtime。在另一个终端运行客户端:

speech-to-speech talk --url ws://127.0.0.1:8765/v1/realtime

或使用一条命令同时启动服务器和客户端:

speech-to-speech local

从源码安装:

git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speech
uv sync

典型使用方法

使用 OpenAI 兼容 LLM 后端:

speech-to-speech serve \
    --stt parakeet-tdt \
    --llm_backend responses-api \
    --tts qwen3 \
    --model_name "gpt-4o-mini" \
    --responses_api_api_key "$OPENAI_API_KEY" \
    --responses_api_stream \
    --enable_live_transcription

完全本地部署(使用 llama.cpp):

# 终端1:启动 llama.cpp 服务器
llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full

# 终端2:启动 speech-to-speech
speech-to-speech serve \
    --stt parakeet-tdt \
    --llm_backend responses-api \
    --tts qwen3 \
    --model_name "ggml-org/gemma-4-E4B-it-GGUF" \
    --responses_api_base_url "http://127.0.0.1:8080/v1" \
    --responses_api_api_key "" \
    --responses_api_stream \
    --enable_live_transcription

多语言支持:

# 自动语言检测
speech-to-speech serve --language auto --llm_backend mlx-lm --model_name "mlx-community/Qwen3-4B-Instruct-2507-bf16"

# 指定中文
speech-to-speech serve --language zh --stt whisper-mlx --stt_model_name large-v3 --llm_backend mlx-lm --model_name mlx-community/Qwen3-4B-Instruct-2507-bf16

配置与部署要点

  • 服务器绑定:默认绑定 127.0.0.1,如需网络访问,使用 --host 0.0.0.0。
  • LLM 代理安全:启用 --enable_llm_proxy 时,服务器不进行认证和限流,仅应在可信网络中使用,或部署在网关之后。
  • CUDA 版本:Qwen3-TTS 的 GGML 后端默认针对 CUDA 12.8,若环境不匹配,需手动安装对应 wheel。
  • 离线运行:先在线运行一次以缓存模型,然后设置 HF_HUB_OFFLINE=1 即可离线运行。
  • Docker 部署:提供 docker compose up 一键启动,包含 llama.cpp 和 Realtime 服务器。
  • 参数调优:VAD 阈值、Smart Turn 延迟等参数可通过 CLI 调整,以适应不同场景。

限制、风险与许可证

  • 许可证:Apache-2.0。
  • 限制:
    • 依赖外部模型和库,部分组件可能需要特定硬件(如 CUDA)。
    • 默认配置使用 OpenAI API,需要 API 密钥。
    • 多语言支持取决于所选 STT/TTS 后端。
  • 风险:
    • LLM 代理无内置认证,需自行保护。
    • 模型可能产生不准确或不当内容,需自行评估。
    • 依赖的第三方库可能存在安全漏洞,需及时更新。

官方链接

信息来源和分析时间