Loading...

文章背景图

Hugging Face speech-to-speech:本地全链路实时语音对话开源智能体|部署与使用全指南

2026-10-25
1
- 字
- 分钟
|

Hugging Face speech-to-speech —— 本地全链路实时语音对话(语音进、语音出)开源语音智能体

适用场景说明:面向博主个人电脑本地部署,基线环境 Windows 10/11 + WSL2(Ubuntu 24.04)、RTX 3070 8GB / RTX 4090 24GB,另含 Linux 云服务器视角。本节严格以官方仓库 README、docs/configuration.md、demo/README.md 与 src/speech_to_speech/ 下 STT / LLM / TTS 组件指南原文为事实来源;README 未提供的 Colab / T4 方案、官方未给出的显存数值均如实标注,不做推测补充。

项目定位与基本信息

项目 内容
一句话定位 一个由开源模型拼装、完全在本机运行的低延迟语音智能体:一条命令启动对话,无需 API key、不依赖云服务;默认流水线为 Silero VAD → Parakeet TDT → Qwen3.5-4B → Qwen3-TTS,每个环节均可替换;服务端以 WebSocket / WebRTC 提供 OpenAI Realtime 协议,原本对接 OpenAI Realtime API 的客户端可直接指向本机(README 开篇原文:"A low-latency voice agent built from open models that runs entirely on your computer. One command starts a conversation: no API key, no cloud service.")。
开源许可 Apache License 2.0。出处:README 顶部 License 徽章链接 ./LICENSE;官方仓库 LICENSE 文件开头为 Apache License Version 2.0, January 2004(已下载原文核对)。注意:项目代码 Apache-2.0,但部分可选 TTS 模型权重另有许可(如 OmniVoice 预训练权重为 CC-BY-NC、Phonon 40M 为 CC BY-NC 4.0,README 各小节警示,商用前需单独核对模型卡)。
官方 GitHub 仓库 https://github.com/huggingface/speech-to-speech
官方文档 / 官网 主文档即仓库 README:https://github.com/huggingface/speech-to-speech ;YAML 配置指南:https://github.com/huggingface/speech-to-speech/blob/main/docs/configuration.md ;浏览器 Demo 说明:https://github.com/huggingface/speech-to-speech/blob/main/demo/README.md ;组件指南:STT https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/STT/README.md 、LLM https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/LLM/README.md 、TTS https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/TTS/README.md ;PyPI 发行页:https://pypi.org/project/speech-to-speech/ 。
版本信息 截至 2026-10-25 官方 PyPI 最新版:1.1.0(来源:https://pypi.org/pypi/speech-to-speech/json ,info.version;requires_python: >=3.11)。README 要求 CPython 3.11–3.14(推荐 3.11);README 原文注明 Python 3.10 已于 2026-10-01 EOL 后不再支持。
默认流水线各环节模型(README「How it works」「Supported Components」表) ① VAD:Silero VAD v5;② STT:Parakeet TDT 0.6B v3;③ LLM:Linux/Windows NVIDIA 走 Transformers 加载 Qwen3.5-4B,Apple Silicon 走 MLX 加载 Qwen3.5-4B-4bit;④ TTS:Qwen3-TTS-12Hz-1.7B-CustomVoice(Linux 下 GGML 后端,macOS 下 mlx-audio)。
协议与端口 服务端实现 OpenAI Realtime 协议核心事件集,WebSocket 路径 /v1/realtime,默认 ws://127.0.0.1:8765/v1/realtime(README「Realtime API」节);浏览器 Demo 端口 7860(demo README)。

官方图片

  • 下图为官方 README 顶部 logo(README 第 3 行 <img src="https://raw.githubusercontent.com/huggingface/speech-to-speech/main/logo.png" width="600"/>):

Hugging Face speech-to-speech 官方 logo

项目 记录
本地文件 https://zhouruolin.cn/upload/08_speech2speech_logo.png
图片来源 URL https://raw.githubusercontent.com/huggingface/speech-to-speech/main/logo.png
下载方式 curl -sL -o 08_speech2speech_logo.png "https://raw.githubusercontent.com/huggingface/speech-to-speech/main/logo.png"
格式 / 体积校验 file 命令确认:PNG image data, 1677 x 1155, 8-bit/color RGBA, non-interlaced;体积 66,165 字节(约 64.6 KB),大于 20 KB 阈值。
  • 补充素材(非 PNG/JPEG,按本节图片规则不嵌入正文,仅登记来源):README 「How it works」上方的端点切换演示动图 docs/assets/endpoint-swap-light.gif(暗色模式 endpoint-swap-dark.gif),来源 https://raw.githubusercontent.com/huggingface/speech-to-speech/main/docs/assets/endpoint-swap-light.gif ,curl 200 已验证可访问。

环境要求

维度 官方说明(README Quickstart / Installation / LLM Backends / Supported Components 节 + PyPI 元数据)
操作系统 README CI 覆盖矩阵:Linux(CPython 3.11、3.12、3.13、3.14,完整测试套件 + 冒烟测试);Apple Silicon macOS(3.11–3.14 冒烟测试);Windows 不在该兼容性矩阵覆盖范围内(README 原文:"Windows is not covered by this compatibility matrix")。Ubuntu 需先安装音频库 libportaudio2、libsndfile1;Windows 激活命令为 .venv\Scripts\Activate.ps1。WSL2(Ubuntu 24.04)按 Linux 路径部署是官方文档描述最完整的 NVIDIA 路径。
GPU 与显存 README「Quickstart」平台模型表:Apple Silicon Mac:Qwen3.5-4B 4-bit(MLX LM),规划 16 GB 统一内存;Linux / Windows NVIDIA:Qwen3.5-4B(Transformers),规划 24 GB 显存;其他机器:Qwen3.5-4B 走 Transformers 跑 CPU,回复缓慢。README「Combining with llama.cpp」节:使用默认语音模型时,Mac 规划 24 GB 统一内存、NVIDIA 规划 16 GB 显存,其中约 8 GB 由语音流水线占用。README 未公布 8GB 显卡的官方可行配置(见 08.4「RTX 3070 8GB 现实说明」)。
内存 README 未单独公布系统内存下限;Mac 路径以 16 GB 统一内存为规划值(MLX 4-bit);NVIDIA 路径按 24 GB 显存规划。
依赖 基础包 pip install speech-to-speech 已包含默认流水线全部依赖:Silero VAD + Parakeet TDT(监听)、Qwen3.5-4B(回复)、Qwen3-TTS(语音)、本地音频客户端与 Realtime 服务端。可选后端以 pip extras 方式安装(清单见 08.4)。浏览器 Demo 另需 Node.js / npm 与 uv;源码开发方式依赖 uv。默认 Linux Qwen3-TTS wheel 面向 CUDA 12.8 + Ubuntu 24.04 编译(README「CUDA Note for Qwen3-TTS」节)。
磁盘空间(含模型权重体积,本环境经 HF tree API 实测) 默认流水线首次运行自动下载模型;以下为实测仓库体积:
默认模型 HF 仓库 实测体积
Qwen3.5-4B(Linux/Windows Transformers 权重) https://huggingface.co/Qwen/Qwen3.5-4B 约 8.7 GB
Qwen3-TTS-12Hz-1.7B-CustomVoice https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice 约 4.2 GB
Parakeet TDT 0.6B v3 https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3 约 5.3 GB
Qwen3.5-4B-4bit(仅 Mac MLX) https://huggingface.co/mlx-community/Qwen3.5-4B-4bit 约 2.9 GB

另含 Silero VAD、Smart Turn v3.2 ONNX 检查点等小型资源;首次在线启动缓存完成后可离线运行(README「Offline Operation」节)。

最详细部署步骤(Windows 与 WSL2 双视角)

1. 依赖安装

WSL2(Ubuntu 24.04,官方文档描述最完整的 Linux 路径):

# README Quickstart 原文:先装音频系统库
sudo apt-get install libportaudio2 libsndfile1

# Python 3.11–3.14(推荐 3.11),创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate

Windows 原生:README 仅给出环境激活命令 .venv\Scripts\Activate.ps1,并明确 Windows 不在 CI 兼容性矩阵内;默认 Qwen3-TTS GGML wheel 面向 Linux 编译,原生 Windows 预期存在兼容性风险。建议 NVIDIA 显卡用户优先走 WSL2 路径;原生 Windows 步骤如下,问题需自行排查:

python -m venv .venv
.\.venv\Scripts\Activate.ps1

源码开发方式(README「From Source」节,Linux/macOS):

git clone https://github.com/huggingface/speech-to-speech.git
cd speech-to-speech
uv sync --python 3.11
source .venv/bin/activate

2. 项目下载 / 安装(README「Installation」节,PyPI 官方方式)

pip install speech-to-speech

可选后端 extras(README「Optional Components」节原文命令):

pip install "speech-to-speech[kokoro]"          # Kokoro-82M TTS(macOS 需 Python 3.11–3.12)
pip install "speech-to-speech[kitten]"          # KittenTTS
pip install "speech-to-speech[pocket]"         # Pocket TTS
pip install "speech-to-speech[phonon]"         # Phonon TTS(检查点另行提供)
pip install "speech-to-speech[chattts]"        # ChatTTS
pip install "speech-to-speech[omnivoice]"      # OmniVoice TTS(CUDA / Intel XPU / Apple Silicon)
pip install "speech-to-speech[faster-whisper]" # Faster Whisper STT
pip install "speech-to-speech[whisper-mlx]"   # Lightning Whisper MLX STT(macOS)
pip install "speech-to-speech[paraformer]"     # Paraformer STT(FunASR)
pip install "speech-to-speech[fireredvad]"     # FireRed streaming VAD
pip install "speech-to-speech[nemo]"           # Parakeet Unified / Nemotron / Orukeet STT(NeMo)
pip install "speech-to-speech[mlx-lm]"        # macOS mlx-vlm 视觉模型支持

3. 模型 / 权重下载(官方来源 + 国内加速 + 显存现实说明)

官方来源:首次 speech-to-speech local 启动时自动从 Hugging Face Hub 下载默认流水线模型(README Quickstart:"The first run downloads the models, so give it a few minutes");README「Offline Operation」节要求先在线跑通一次、缓存齐 STT / LLM / TTS / Silero VAD / NLTK / Smart Turn 资源后,再用 HF_HUB_OFFLINE=1 离线运行。

国内加速:沿用 huggingface_hub 标准环境变量 HF_ENDPOINT(机制说明:https://huggingface.co/docs/huggingface_hub/guides/environment-variables ):

export HF_ENDPOINT=https://hf-mirror.com

CUDA wheel 适配(README「CUDA Note for Qwen3-TTS」节原文):Linux 下 Qwen3-TTS GGML 后端来自 faster-qwen3-tts[ggml],PyPI 默认 qwentts-cpp-python wheel 面向 CUDA 12.8 与 manylinux_2_39(即 Ubuntu 24.04);CUDA 运行时或 glibc 更旧时,先从 HF wheelhouse 安装匹配 wheel,再装 speech-to-speech:

# CUDA 13.x
pip install "qwentts-cpp-python==0.3.1+cu130" \
  -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu130

# CUDA 12.4
pip install "qwentts-cpp-python==0.3.1+cu124" \
  -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu124

# 纯 CPU 退路
pip install "qwentts-cpp-python==0.3.1+cpu" \
  -f https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cpu

pip install speech-to-speech

备选:README 注明可传 --qwen3_tts_backend torch 使用旧版 CUDA-graphs 实现替代 GGML。

RTX 3070 8GB 现实说明(严格按 README 边界,不做外推):

路径 README 依据 8GB 可行性结论
默认 NVIDIA 流水线(Qwen3.5-4B Transformers + Qwen3-TTS + Parakeet) README 平台表规划 24 GB 显存 8GB 不满足官方规划值;README 未提供 8GB 官方配置与量化降级命令,能否跑通需本机实测,本节不承诺可用。
llama.cpp 外接 LLM README「Combining with llama.cpp」节规划 NVIDIA 16 GB 显存,其中约 8 GB 归语音流水线 16 GB 规划值仍高于 8GB;README 未给出 8GB 量化方案,属待实测路径。
纯 CPU 兜底 README 平台表「Other machines: Qwen3.5-4B via Transformers on CPU — Slow replies」 官方明示可用但回复缓慢;8GB 显卡机器可作为验证流程的退路。
托管 LLM 后端(语音识别 / 合成留在本地,LLM 走远程) README「Local speech with a hosted LLM」节:"Speech recognition and synthesis stay local, so your audio never leaves your computer; transcribed text and conversation history go to the provider." 本机仅承担 STT + TTS 流水线,显存压力下降;需对应服务商 API key(凭据见 08.4 第 4 步)。
更换更小 LLM README 仅给出 --model_name Qwen/Qwen3.5-9B(Linux/Windows)与 mlx-community/Qwen3.5-9B-4bit(Mac)示例,未列出 4B 以下官方推荐档位 自定义模型需自行核对显存与兼容性;README 未给出 8GB 量化方案,属待实测路径。

关于 Colab / T4:官方 README、docs/ 与 demo/README.md 全文未提供 Colab 笔记本或 T4 免费运行方案,本节不编造 Colab 路径;如需云端体验,请以官方仓库后续更新为准。

4. 关键配置(凭据与开关表)

凭据要求(README 各节原文,默认本地流水线不需要任何 key):

场景 凭据 / 环境变量 来源
默认本地流水线(STT + LLM + TTS 全本地) 无需 API key、无需云服务 README 开篇原文
OpenAI 托管 LLM(--llm_backend responses-api) OPENAI_API_KEY(export OPENAI_API_KEY=...) README「Local speech with a hosted LLM」节
HF Inference Providers(https://router.huggingface.co/v1) HF_TOKEN,参数 --responses_api_api_key "$HF_TOKEN" README「Responses API Backend」provider 表
OpenRouter(https://openrouter.ai/api/v1) OPENROUTER_API_KEY README provider 表
本地 vLLM / llama.cpp 服务 无需 key(vLLM omit or any string;llama.cpp 传空字符串 "") README provider 表
受限模型 Phonon 40M 检查点 先在 HF 接受条款,再设置 HF_TOKEN 或执行 hf auth login README「Phonon TTS」节
浏览器 Demo 网页搜索工具(可选) SERPER_API_KEY(Serper.dev);不配置则工具禁用 demo README「Tools」节
摄像头视觉输入 需服务端选视觉语言模型并传 --llm_is_vlm;默认模型为纯文本 demo README「Tools」节 + LLM README

模块级与流水线开关(README「CLI Reference」节 + 组件指南):

参数 默认 / 取值 说明
--device 按平台自动 所有环节统一设备;--llm_device 仅改 LLM 设备,--stt_device / --qwen3_tts_device 等仅改对应环节
--stt parakeet-tdt 识别后端;可选 whisper、faster-whisper、paraformer、qwen3-asr、parakeet-unified、nemotron-streaming、orukeet、openai、openai-realtime、vllm-realtime 等(STT README 清单)
--llm_backend Linux/Windows:transformers;macOS:mlx-lm 可选 responses-api / chat-completions 接远程或独立服务
--tts qwen3 合成后端;可选 kokoro、kitten、pocket、phonon、chattts、omnivoice、mms、openai、minimax、drama3 等(TTS README 清单)
--model_name 平台默认模型 替换本地 LLM 模型;Mac 用 MLX 转换名,Linux/Windows 用 Transformers 检查点名
--num_pipelines 1 隔离实例数量;服务端每流水线单元一个并发会话
--torch_num_threads N 未设置(Silero 加载后单线程) 进程级 PyTorch CPU 线程数;CPU STT 可权衡提速 Silero 变慢
--log_transcripts 关 开启后日志记录完整用户 / 助手转写(启动时告警:对话内容会进入日志收集系统)
--verbose / --log_level debug 关 诊断输出;--log_level debug 配合 --verbose 出详细本地日志
--no_smart_turn 默认开启 Smart Turn v3.2 关闭端点确认 ONNX 模型;--smart_turn_model_path 可指定本地 ONNX 路径
--host 0.0.0.0 默认 127.0.0.1 serve 暴露到网络时显式指定;服务端自身不做鉴权与限流,仅应在可信网络开启(README「LLM Proxy」节警示)
--playback-buffer-ms 后端默认缓冲(OpenAI 兼容 TTS 客户端缓冲 196 ms) 调大抗卡顿但延迟首句,调小启动快但易抖动

VAD 参数(README「VAD Parameters」节,Silero VAD v5):

参数 默认 说明
--thresh 源码默认 触发语音活动检测的阈值
--min_speech_ms 推荐搭配 384 判定为语音的最短语音时长
--min_speech_continuation_ms 推荐搭配 192 可重开软结束回合内的续说话滞回阈值
--min_silence_ms 64 ms 切分语音的最短静音长度
--short_segment_merge_ms 未设置 短于 --min_speech_ms 的相邻 VAD 段合并窗口
--speculative_reopen_ms 800 ms 软结束后延迟 800 ms 才提交回复,便于接续语音重开回合
--unanswered_reopen_ms 未设置 未收到助手输出的软结束回合最长可重开时长上限

Qwen3-TTS 参数(TTS README「6) Qwen3-TTS」节):

参数 默认 / 取值 说明
--qwen3_tts_model_name Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice TTS 检查点
--qwen3_tts_device 按平台自动 如 cuda / cpu
--qwen3_tts_backend 非 macOS 默认 ggml;可 torch GGML 或 CUDA-graphs 后端
--qwen3_tts_speaker Aiden 内置音色;Demo 可选 Aiden、Ryan、Dylan、Eric、Ono_Anna、Serena、Sohee、Uncle_Fu、Vivian(demo README 音色表)
--qwen3_tts_language auto 语言码;如 zh、en;模型卡覆盖中 / 英 / 日 / 韩 / 德 / 法 / 俄 / 葡 / 西 / 意 10 种语言
--qwen3_tts_ggml_quantization 后端默认 BF16 / Q8_0 / Q4_K_M / F32
--qwen3_tts_ref_audio 无 音色克隆参考音频;默认 CustomVoice 模型无需参考音频即可使用内置音色
--qwen3_tts_ref_cache_dir ~/.cache/faster-qwen3-tts/qwentts_refs GGML 音色参考缓存目录

5. 启动(README「Commands」节三条官方命令)

命令 行为 典型场景
speech-to-speech local 同一进程内组合 serve + 打包麦克风 / 扬声器客户端,回环连接 一条命令本地对话(README Quickstart 默认命令)
speech-to-speech serve 仅运行流水线服务端,WebSocket / WebRTC 监听 127.0.0.1:8765 对接自建 App / 设备 / 浏览器 Demo
speech-to-speech talk --url ws://127.0.0.1:8765/v1/realtime 打包麦克风 / 扬声器客户端,连接已有 Realtime 服务端 连到另一台机器上的服务端
# README Quickstart 原文命令(WSL2 / Linux)
python3 -m venv .venv
source .venv/bin/activate
pip install speech-to-speech
speech-to-speech local

停止:Ctrl+C。README 提示:佩戴耳机避免助手听到自己;或加 --local_audio_block_mic_during_playback 在播放期间屏蔽麦克风。

使用方法

启动方式与界面

  • 终端本地对话(local):启动后终端显示 Loading models…,音频设备就绪、会话配置完成后出现 Ready — start speaking.;用户消息黄色、助手回复绿色(支持颜色的终端);默认只显示最终用户转写与流式助手回复,隐藏后端转写副本、常规日志、工具细节与协议事件(README Quickstart 节)。
  • 浏览器 Demo(serve + demo/,demo README「Quick start (local)」节):需要仓库检出、uv、Node.js / npm。

```bash # 1) 启动语音服务端(首次启动下载模型,等待监听 ws://127.0.0.1:8765/v1/realtime) uv sync --python 3.11 uv run speech-to-speech serve

# 2) 安装浏览器 SDK 依赖并启动 Demo 应用 npm ci --prefix demo uv pip install -r demo/requirements.txt export SPEECH_TO_SPEECH_URL=ws://localhost:8765/v1/realtime uv run uvicorn --app-dir demo server:app --reload --port 7860 ```

打开 http://localhost:7860/ ,点击光球、允许麦克风权限后开始对话。Docker 方式(demo README 原文):

bash docker build -t s2s-demo demo/ docker run -p 7860:7860 -e SPEECH_TO_SPEECH_URL=ws://host.docker.internal:8765/v1/realtime s2s-demo

浏览器麦克风要求 HTTPS 或 localhost:127.0.0.1 与 localhost 可用,纯 http://192.168.x.y 局域网地址无法调用 getUserMedia()(demo README 原文)。 - OpenAI Realtime SDK 直连(README「Realtime API」节官方示例):

```python from openai import OpenAI

client = OpenAI( base_url="http://localhost:8765/v1", websocket_base_url="ws://localhost:8765/v1", api_key="not-needed", )

with client.realtime.connect(model="local") as conn: conn.send( { "type": "session.update", "session": { "type": "realtime", "instructions": "You are a helpful assistant.", "audio": { "input": { "turn_detection": { "type": "server_vad", "interrupt_response": True, } } }, }, } )

  for event in conn:
      print(event.type)

```

README 注明:服务端实现的是 OpenAI Realtime 核心事件子集(入站 input_audio_buffer.append、session.update、conversation.item.create、conversation.item.truncate、response.create、response.cancel;出站语音起止、流式转写、音频增量、工具调用、response.done),并非完整 API 等价。

中文对话配置(README「Multi-Language Support」节 + STT README 语种表)

默认 Parakeet TDT 仅支持 25 种欧洲语言(en, de, fr, es, it, pt, nl, pl, ru, uk, cs, sk, hu, ro, bg, hr, sl, sr, da, no, sv, fi, et, lv, lt),不含中文;中文对话必须切换 STT 后端:

目标 命令参数 依据
Whisper(Transformers,内置) --stt whisper --language zh README 多语言节:--language 属于 Whisper 后端;STT README Whisper 内部语种表含 zh
Faster Whisper(需先装 extra) pip install "speech-to-speech[faster-whisper]" 后 --stt faster-whisper --faster_whisper_stt_gen_language zh STT README「4) Faster-Whisper」节
Paraformer(中文导向) --stt paraformer(默认 paraformer-zh) STT README「6) Paraformer」节
TTS 中文输出 默认 Qwen3-TTS --qwen3_tts_language auto(模型卡覆盖中文);--detect_llm_output_language 按助手回复文本检测语言后送 TTS;--enable_lang_prompt 追加「请用用户语种回复」指令 README「Multi-Language Support」节

端到端示例:WSL2 本地中文语音对话(4090 24GB 推荐配置;3070 8GB 见 08.4 现实说明)

# 1) 系统音频库(README Quickstart Ubuntu 节)
sudo apt-get install libportaudio2 libsndfile1

# 2) 环境
python3 -m venv .venv
source .venv/bin/activate
pip install speech-to-speech

# 3) 中文对话启动:Whisper 识别中文 + 按助手回复语言检测 + Qwen3-TTS 自动语种
speech-to-speech local \
  --stt whisper \
  --language zh \
  --enable_lang_prompt \
  --detect_llm_output_language \
  --qwen3_tts_language auto

交互流程(README Quickstart 原文描述):开口说话 → 停顿 → 助手通过扬声器回答;Ctrl+C 停止;首次运行需等待模型下载;佩戴耳机或加 --local_audio_block_mic_during_playback 防止自激回声。

换音色示例(TTS README + demo README 音色表):

speech-to-speech local \
  --tts qwen3 \
  --qwen3_tts_speaker Ryan \
  --qwen3_tts_device cuda

外接 llama.cpp LLM 示例(README「Combining with llama.cpp」节原文命令,终端 1 起 LLM、终端 2 连流水线):

# 终端 1:llama-server 常驻
llama-server \
  -hf ggml-org/gemma-4-E4B-it-GGUF:Q4_0 \
  --alias local-gemma \
  --host 127.0.0.1 --port 8080 \
  -ngl all -np 1 -c 8192 -fa on \
  --no-mmproj \
  --reasoning off

# 终端 2:语音流水线接入本地 LLM
speech-to-speech local \
  --llm_backend responses-api \
  --model_name local-gemma \
  --responses_api_base_url http://127.0.0.1:8080/v1 \
  --responses_api_api_key ""

托管 LLM 示例(语音留本地,文本上云,README「Local speech with a hosted LLM」节):

export OPENAI_API_KEY=...
speech-to-speech local --llm_backend responses-api

常见坑

# 现象 原因 解决(README 官方依据)
1 助手反复听到自己的声音、对话自激循环 扬声器声音被麦克风回采;README Quickstart 明确提示需戴耳机 佩戴耳机;或启动时加 --local_audio_block_mic_during_playback 在播放期间屏蔽麦克风。
2 启动报 libcudart.so.12 缺失 / Qwen3-TTS wheel 加载失败 默认 qwentts-cpp-python wheel 面向 CUDA 12.8 + Ubuntu 24.04;本机 CUDA 或 glibc 更旧(README「CUDA Note」节) 先按 08.4 第 3 步安装匹配 wheel(cu124 / cu130 / cpu)再 pip install speech-to-speech;DGX Spark 等 ARM64 CUDA 13 环境按 README DGX Spark 小节单独处理;备选 --qwen3_tts_backend torch。
3 浏览器 Demo 打不开麦克风 / 无音频 getUserMedia() 仅允许 HTTPS 或 localhost;纯局域网 HTTP 地址被浏览器拒绝(demo README 原文) 用 http://localhost:7860/ 或 http://127.0.0.1:7860/ 访问;跨机访问需自行配置 HTTPS 反向代理。
4 中文说话后识别出乱码 / 空白 默认 STT Parakeet TDT 仅 25 种欧洲语言,不含中文(README 多语言表 + STT README 语种清单) 切换 --stt whisper --language zh,或安装 faster-whisper extra、--stt paraformer;确认 TTS 侧 --qwen3_tts_language auto 或显式 zh。
5 首次启动模型下载缓慢 / 超时 默认从 Hugging Face Hub 拉取 Qwen3.5-4B、Qwen3-TTS、Parakeet 等多 GB 模型 启动前 export HF_ENDPOINT=https://hf-mirror.com;在线跑通一次缓存后,用 HF_HUB_OFFLINE=1 speech-to-speech local 离线运行(README「Offline Operation」节);Smart Turn 检查点缺失时 --no_smart_turn 关闭。
6 安装可选 TTS 后 numpy 版本冲突报错 DeepFilterNet 要求 numpy<2,Pocket TTS 要求 numpy>=2,二者互斥(README「Note on DeepFilterNet」节) 不要在同一环境同时启用两者;按 README 说明仅在不使用 Pocket TTS 的环境手动安装 DeepFilterNet。
7 Windows 原生安装后依赖 / 音频库异常 README 兼容性矩阵未覆盖 Windows;Linux 音频库命令仅适用 Ubuntu;Qwen3-TTS GGML wheel 为 Linux 目标 优先使用 WSL2 Ubuntu 24.04 部署 NVIDIA 路径;原生 Windows 问题需自行对照报错排查,官方未提供 Windows 专用安装指引。

本节来源清单

# URL 用途 验证方式(2026-10-25)
1 https://github.com/huggingface/speech-to-speech 官方仓库主页 curl HTML 200(GitHub 主页受 robots.txt 限制 web_fetch,改用 raw README 全文精读 + curl 核验)
2 https://raw.githubusercontent.com/huggingface/speech-to-speech/main/README.md 主 README(定位、Quickstart、安装、平台模型表、凭据、LLM 后端、离线、多语言、VAD / 模块参数、TTS 后端清单的唯一事实来源) curl 200 下载后全文精读(972 行)
3 https://github.com/huggingface/speech-to-speech/blob/main/LICENSE Apache 2.0 许可证原文 curl raw LICENSE 200,开头 Apache License Version 2.0, January 2004 已核对
4 https://pypi.org/project/speech-to-speech/ PyPI 发行页(版本 1.1.0、Python >=3.11) curl 200;https://pypi.org/pypi/speech-to-speech/json 复核 info.version=1.1.0、requires_python>=3.11
5 https://github.com/huggingface/speech-to-speech/blob/main/docs/configuration.md YAML 配置指南(块定义、mac.yaml 示例、Python 启动 API) curl raw 200(183 行)
6 https://github.com/huggingface/speech-to-speech/blob/main/demo/README.md 浏览器 Demo 启动命令、端口 7860、localhost/HTTPS 限制、音色表、工具凭据、环境变量 curl raw 200(362 行)
7 https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/STT/README.md 各 STT 后端清单、语种表、语言参数归属 curl raw 200(318 行)
8 https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/LLM/README.md 本地模型选择、--llm_device、生成参数、API 后端 curl raw 200(已下载核对)
9 https://github.com/huggingface/speech-to-speech/blob/main/src/speech_to_speech/TTS/README.md Qwen3-TTS 参数前缀、音色、后端、量化开关 curl raw 200(391 行)
10 https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3 默认 STT 模型卡;仓库体积 5.3 GB(tree API 实测) curl 200
11 https://huggingface.co/Qwen/Qwen3.5-4B 默认 LLM 模型卡;仓库体积 8.7 GB(tree API 实测) curl 200
12 https://huggingface.co/Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice 默认 TTS 模型卡;仓库体积 4.2 GB(tree API 实测);10 语种含中文说明取自模型卡 README curl 200;模型卡 README 语种清单已核对
13 https://huggingface.co/mlx-community/Qwen3.5-4B-4bit Mac MLX 默认模型;体积 2.9 GB(tree API 实测) curl 200
14 https://github.com/snakers4/silero-vad 默认 VAD 上游仓库 curl 200
15 https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu124 CUDA 12.4 匹配 wheel 目录(README CUDA Note) curl 200
16 https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cu130 CUDA 13.x 匹配 wheel 目录 curl 200
17 https://huggingface.co/datasets/andito/qwentts-cpp-python-wheels/tree/main/whl/cpu CPU 退路 wheel 目录 curl 200
18 https://huggingface.co/pipecat-ai/smart-turn-v3 Smart Turn v3.2 ONNX 检查点(README「Smart Turn endpointing」节) curl 200
19 https://huggingface.co/docs/huggingface_hub/guides/environment-variables HF_ENDPOINT / HF_HUB_OFFLINE 环境变量机制官方文档 curl 200
20 https://raw.githubusercontent.com/huggingface/speech-to-speech/main/docs/assets/endpoint-swap-light.gif 官方端点切换演示动图(仅登记,未嵌入正文) curl 200
21 https://github.com/huggingface/speech-to-speech/blob/main/example_configs/mac.yaml 官方 Mac YAML 配置示例 curl raw 200
22 https://github.com/huggingface/speech-to-speech/blob/main/docs/openai-compatible-stt.md OpenAI 兼容 STT 端点指南 curl raw 200
23 https://github.com/huggingface/speech-to-speech/blob/main/demo/livekit/README.md LiveKit Agents 接入说明 curl raw 200
24 https://huggingface.co/hexgrad/Kokoro-82M 可选 TTS Kokoro-82M 模型卡(README extras 清单) curl 200
25 https://github.com/2noise/ChatTTS 可选 TTS ChatTTS 上游(README extras 清单;README 多语言表标注支持英 / 中) curl 200
26 https://huggingface.co/kyutai-labs/pocket-tts 可选 TTS Pocket TTS 模型卡(README extras 清单) 本环境 curl 401(受限 / 需登录),链接取自 README,可用性以模型卡为准
27 https://github.com/huggingface/speech-to-speech.git 源码开发方式 git clone 地址(08.4 第 1 步) 与 #1 同一仓库;curl 200
28 https://raw.githubusercontent.com/huggingface/speech-to-speech/main/logo.png 08.2 节官方 logo 原始地址(README 第 3 行 <img> 引用) curl 200 下载,file 校验 PNG 1677×1155、66,165 字节
29 https://hf-mirror.com HF 国内镜像站首页;HF_ENDPOINT=https://hf-mirror.com 镜像目标 首页 curl 200;模型文件解析在本环境超时,镜像可用性以读者本地网络为准
30 https://router.huggingface.co/v1 HF Inference Providers 接入端点(README「Responses API Backend」provider 表,--responses_api_base_url) 裸 GET 根路径 404(API 端点需鉴权 / POST,非死链);地址逐字摘自 README provider 表
31 https://openrouter.ai/api/v1 OpenRouter 接入端点(README provider 表,--responses_api_base_url) 裸 GET 根路径 404(API 端点需鉴权 / POST,非死链);地址逐字摘自 README provider 表

说明:正文中 ws://127.0.0.1:8765/v1/realtime、http://localhost:7860/、http://127.0.0.1:8080/v1 等为本机回环示例地址,非外部引用,不列入来源清单。

待复核 / 边界说明:① 官方 README 未提供 Colab 或 T4 免费方案,本节未予编写;② 8GB 显存显卡的官方可行配置 README 未给出,08.4 已逐条标注边界;③ Pocket TTS 模型卡在本环境返回 401,安装该 extra 前需先在 HF 确认模型可见性与许可;④ 第三方可选后端(OmniVoice、Phonon 等)权重许可独立于项目 Apache-2.0,商用前须核对对应模型卡条款。

评论交流

文章目录