Reachy Mini 实现完全本地化语音交互

Hugging Face:Blog(RSS)·2026-05-27 08:00·90天前
AI 导读

Reachy Mini 机器人现可通过 speech-to-speech 库实现完全本地化的语音交互,无需依赖云端。该方案采用级联流水线架构,对外提供 Realtime API 兼容的 WebSocket 接口。默认组件包括 Silero VAD 用于语音活动检测、Parakeet-TDT 作为语音转文本模型、通义千问(Qwen3-TTS)作为文本转语音模型。大语言模型推荐使用 llama.cpp 运行 Gemma 4。所有数据均在本地处理,保障了隐私且无 API 费用。

Hugging Face:Blog(RSS)
精选
72AI 编辑部评分,满分 100

Reachy Mini 实现完全本地化语音交互

2026-05-27 08:00· 90天前
AI 导读

Reachy Mini 机器人现可通过 speech-to-speech 库实现完全本地化的语音交互,无需依赖云端。该方案采用级联流水线架构,对外提供 Realtime API 兼容的 WebSocket 接口。默认组件包括 Silero VAD 用于语音活动检测、Parakeet-TDT 作为语音转文本模型、通义千问(Qwen3-TTS)作为文本转语音模型。大语言模型推荐使用 llama.cpp 运行 Gemma 4。所有数据均在本地处理,保障了隐私且无 API 费用。

推荐理由

小众硬件的本地语音实战,但HF这套开源管线证明端到端对话已完全可用,所有组件都可自由替换,想做本地化语音助手的人可以照抄。

正文 · AI 翻译

组装好你的 Reachy Mini 后,你需要安装对话应用并开始与它交谈。在此之前,你必须将音频发送到服务器。但现在不必了。今天我们将带你了解如何在本地运行整个技术栈。该技术栈由语音到语音(speech-to-speech)驱动,即我们级联式的 VAD → STT → LLM → TTS 流水线,它暴露了一个兼容 Realtime API 的 `/v1/realtime` WebSocket。启动后端后,从用户界面将机器人指向该后端即可。

级联方案是当今开源领域中最灵活的选择,并且如果组件选取得当,它们也是最快的。我们会推荐我们最喜欢的组件,但级联方案的核心在于你可以自由替换它们。新模型每周都在发布。

摘要

  • 为你的 Reachy Mini 部署一个本地语音后端。
  • 我们使用我们的语音到语音(speech-to-speech)库,采用级联方案。
  • 推荐配置:llama.cpp 搭配 Gemma 4、Silero VAD、Parakeet-TDT 0.6B v3 STT、Qwen3-TTS。

快速开始

这篇博客将引导你完全在本地运行与 Reachy Mini 的对话。无需云端,无需 API 密钥,数据不会离开你的机器。以下视频展示了实际运行效果:

本地提供 LLM 服务

为了提供 LLM 服务,我们将使用 Hugging Face 的 llama.cpp。如果你需要安装它,最简单的方式是运行 `brew install llama.cpp` 或 `winget install llama.cpp`,如需更多帮助,请查阅文档。首先,我们将运行:

llama-server -hf ggml-org/gemma-4-E4B-it-GGUF -np 2 -c 65536 -fa on --swa-full

完成!首次运行时会下载模型,后续启动会很快。

这些标志参数有什么作用?

  • `-hf ggml-org/gemma-4-E4B-it-GGUF` — 直接从 Hub 拉取模型。首次运行下载,后续运行使用缓存。
  • `-np 2` — 两个并行槽位。允许服务器处理第二个请求(例如快速打断),而不会阻塞在第一个请求上。
  • `-c 65536` — 64k 上下文窗口,在槽位间共享。为长对话提供了充足的空间。
  • `-fa on` — 启用 Flash Attention。速度更快,内存占用更低,在现代硬件上基本没有额外开销。
  • `--swa-full` — 保留完整的滑动窗口注意力缓存,而不是重新计算。在 Gemma 上,以少量 RAM 为代价,显著加快提示词处理速度。

设置语音到语音(speech-to-speech)

我们首先安装这个库

uv pip install speech-to-speech

然后,在另一个终端中运行 LLM 服务的同时,我们可以直接运行:

speech-to-speech --responses_api_base_url "http://127.0.0.1:8080" --responses_api_api_key "" --mode local

现在你可以通过终端直接与模型对话了!首次启动时需要下载 Parakeet-TDT 0.6B v3 和 Qwen3TTS,但后续启动会非常快。

以下是本地对话模式的演示视频:

在 `--mode local` 模式下体验过后,你可以再次运行不带该选项的命令,为机器人提供语音到语音服务。

将 Reachy Mini 接入语音到语音功能

当 llama.cpp 和语音到语音功能运行起来后,你可以通过桌面应用启动机器人,并打开对话应用。在对话应用的界面中,你需要点击 HF 后端的"编辑连接"来选择本地模式。以下是操作演示视频:

大功告成。现在你可以与机器人对话了。流水线的每个环节都存在权衡:有的 TTS 模型速度更快但质量较低,有的 STT 模型速度较慢但质量更高。我们针对多语言场景进行了优化,而你可能希望针对单一语言进行优化。博客的其余部分将介绍如何进行定制。

深入探讨

为什么要运行自己的语音到语音服务器?

托管的实时后端固然方便,但运行自己的引擎能带来三大优势:

  • 隐私保护。音频数据永远不会离开你的网络,整个流水线运行在你掌控的硬件上。
  • 无 API 费用。无需按分钟或按 token 付费。
  • 对流水线的完全控制。你可以替换任意组件:VAD、STT、LLM、TTS。只要 Hub 🤗 上有更好的模型发布,随时可以更换。

语音到语音代码库通过一个 CLI 命令就提供了所有这些功能。它会启动一个位于 `/v1/realtime` 的 WebSocket 服务器,该服务器使用 Reachy Mini 已经能够理解的相同协议进行通信。

我们推荐的默认配置:VAD、STT、TTS

级联语音流水线包含四个阶段:VAD、STT、LLM 和 TTS。对于其中三个阶段,我们选择了可靠的默认方案,这样你可以专注于 LLM:

阶段 选择 原因
VAD Silero VAD v5 体积小、精度高、可在 CPU 上运行。是开源语音智能体领域事实上的默认选择。
STT Parakeet-TDT 0.6B v3 支持流式处理、速度极快、英语质量出色。
TTS Qwen3-TTS 富有表现力、低延迟、支持多语言、可定制语音。

这些是我们的推荐选择,如果你有偏好,可以随时替换成自己的方案。

选择你的 LLM

大语言模型是对系统延迟和整体性能影响最大的层级。我们支持两种方案:在本地运行模型(llama.cpp、MLX、Transformers、vLLM),或使用搭载 Responses API 的服务器(OpenAI、Gemini、HF 推理端点、llama.cpp、vLLM 等)。

Responses API:将大脑与语音循环解耦

系统的主要瓶颈在于大语言模型的推理延迟。为解决此问题,我们支持通过 Responses API 协议暴露的外部推理引擎。

因此,语音到语音引擎支持第二种模式:只要大语言模型遵循 Responses API 协议,它就可以运行在独立的进程中。你在一个终端启动模型服务器,在另一个终端启动语音循环,两者通过 HTTP 进行通信。

方案一:一个终端运行 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 \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "ggml-org/gemma-4-E4B-it-GGUF" \
  --responses_api_base_url "http://127.0.0.1:8080/v1"
方案二:一个终端运行 vLLM,另一个终端运行语音到语音

需要 vLLM ≥ 0.21.0 版本。对 Responses API 协议的完整支持,包括语音到语音后端使用的工具调用流式传输,已在 vLLM 0.21.0 版本中实现。旧版本可以启动,但当助手尝试调用工具时就会出错。

在此流程中通过 vLLM 提供模型服务时,实际上需要三个标志:

  • --enable-auto-tool-choice
  • --tool-call-parser <tool_parser_name> —— 选择按模型族划分的解析器,将模型的原始输出转换为结构化的工具调用(例如,Qwen3 指令模型使用 qwen3_coder,Llama 3 使用 llama3_json,Hermes 风格模型使用 hermes 等)。
  • --default-chat-template-kwargs '{"enable_thinking":false}' :对于支持该功能的模型,禁用 <think> 推理通道。对于更复杂的智能体任务,你可以将其设为 true 让模型进行推理;但对于追求自然感的对话,我们强烈建议保持关闭:每一个思考 token 都会转化为用户听到机器人开口说话前的静默延迟。

终端 1:vLLM 推理服务器(Qwen/Qwen3-4B-Instruct-2507):

vllm serve Qwen/Qwen3-4B-Instruct-2507 \
  --port 8000 \
  --host 127.0.0.1 \
  --max-model-len 32768 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder \
  --default-chat-template-kwargs '{"enable_thinking":false}' \
  --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":1}'

--speculative-config 这一行启用了多 token 预测(MTP)。这是可选的,但对端到端延迟有显著影响。只要模型支持,就请保持启用。

终端 2:语音到语音客户端:

speech-to-speech \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "Qwen/Qwen3-4B-Instruct-2507" \
  --responses_api_base_url "http://127.0.0.1:8000/v1"
选项三:Hugging Face 推理端点

协议相同,但模型运行在 Hugging Face 管理的 GPU 上。将任意聊天模型部署为推理端点,然后将语音循环指向该端点 URL:

speech-to-speech \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "Qwen/Qwen3-4B-Instruct-2507" \
  --responses_api_base_url "https://<your-endpoint>.endpoints.huggingface.cloud/v1" \
  --responses_api_api_key "$HF_TOKEN"
选项四:Hugging Face 推理提供商

如果你不想管理自己的端点,可以使用推理提供商。Hugging Face 通过单一 URL 将你的请求路由到第三方后端(例如 Together、Fireworks、Replicate):

speech-to-speech \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "Qwen/Qwen3.6-35B-A3B:deepinfra" \
  --responses_api_base_url "https://router.huggingface.co/v1" \
  --responses_api_api_key "$HF_TOKEN"
选项五:OpenAI(或任何兼容 OpenAI 的提供商)

当你想在零基础设施的情况下测试前沿模型时,将同一个标志指向 OpenAI:

speech-to-speech \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "gpt-5.4" \
  --responses_api_api_key "$OPENAI_API_KEY"

`--responses_api_*` 标志对于任何实现该协议的提供商(OpenRouter、Together、Fireworks……)都同样适用。只需更换基础 URL 和 API 密钥,管道的其余部分保持不变。


在进程中运行大语言模型

选项一:在 MLX 上运行本地大语言模型(Apple Silicon)

如果你使用的是 Mac,MLX 是以合理延迟运行真实模型的最便捷方式。我们推荐 Qwen3-4B-Instruct-2507,它在 M 系列芯片上足够小巧,能实现即时响应,同时又具备足够的对话能力。

speech-to-speech \
  --llm_backend mlx-lm \
  --model_name "mlx-community/Qwen3-4B-Instruct-2507-bf16"

服务器默认监听 `ws://127.0.0.1:8765/v1/realtime`。保持其运行,将对话应用连接到本地后端,你就可以与机器人对话了。

选项二:在 Transformers 上运行本地大语言模型(CUDA / CPU / MPS)

思路相同,但使用原生 Transformers。如果你使用的是 CUDA 设备、Linux 系统,或者希望自由更换模型而无需为 MLX 重新转换权重,请使用此选项。

speech-to-speech \
  --llm_backend transformers \
  --model_name "Qwen/Qwen3-4B-Instruct-2507"

提示:Qwen3-4B-Instruct-2507 是另一个不错的大语言模型选择,因为它在单块消费级 GPU 上能提供良好的速度与质量平衡。你可以将 `--model_name` 指向后端支持的任何 Hugging Face 模型——例如更大的 Gemma、Qwen 或 Mistral 模型。

在笔记本上运行引擎,在机器人上运行应用

如果你在笔记本上运行语音引擎,而在 Reachy Mini Wireless 上运行对话应用,唯一需要改变的就是 URL。请确保引擎绑定到局域网地址(而不仅仅是 127.0.0.1),并在用户界面中选择 IP 时,从机器人端使用笔记本的 IP 地址。

如果你不知道自己的 IP,以下是查找方法:

macOS

ipconfig getifaddr en0    # wifi
ipconfig getifaddr en1    # ethernet (sometimes en0, varies)

Linux

hostname -I

Windows

ipconfig

在活动适配器下查找“IPv4 地址”。

你应该选择 192.168.x.x 或 10.x.x.x 这类地址。如果看到 169.254.x.x,说明你实际上并未连接到网络。


总结

现在你拥有一个完全本地的语音循环:

  • 机器人通过 Silero 进行监听,
  • 通过 Parakeet-TDT 0.6B v3 进行转录,
  • 通过你选择的任意大语言模型进行思考——无论是本地的 MLX、本地的 Transformers、隔壁的 vLLM 或 llama.cpp 服务器,还是托管的 Responses API 端点,
  • 并通过 Qwen3-TTS 进行回答。

请为 huggingface/speech-to-speech 和 pollen-robotics/reachy_mini_conversation_app 项目点星,并在讨论区告诉我们,你最终在你的机器人上运行了哪个开源级联方案。

来源:Hugging Face:Blog(RSS)· huggingface.co