Hugging Face · 官方博客

Reachy Mini 实现完全本地化

Reachy Mini goes fully local

二〇二六年五月二十七日 · 英文原文

Hugging Face 与 Pollen Robotics 合作,为 Reachy Mini 机器人部署了完全本地的语音对话流水线。该方案基于 `speech-to-speech` 库,采用级联架构(VAD → STT → LLM → TTS),通过兼容 Realtime API 的 WebSocket 暴露服务。推荐组件为 Silero VAD v5、Parakeet-TDT STT、llama.cpp 搭配 Gemma 4 或 Qwen3-4B 作为 LLM、Qwen3-TTS。支持在本地(MLX、Transformers、vLLM)或通过 Responses API(OpenAI、Hugging Face Inference Endpoints)运行 LLM,无需云端或 API 密钥。

](https://huggingface.co/A-Mahla)

Image 2: Andres Marafioti 的头像

构建好你的 Reachy Mini 后,你需要安装对话应用并开始与它对话。在此之前,你必须将音频发送到服务器。但现在不必了。今天我们将带你了解如何在本地运行整个堆栈。

该堆栈由 speech-to-speech 驱动,这是一个级联的 VAD → STT → LLM → TTS 流水线,它暴露了一个兼容 Realtime API 的 /v1/realtime WebSocket。启动后端后,从 UI 中将机器人指向该后端。

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

TL;DR

  • 为你的 Reachy Mini 部署一个本地语音后端。
  • 我们使用 speech-to-speech 库,采用级联方法。
  • 推荐:llama.cpp 搭配 Gemma 4Silero VADParakeet-TDT STTQwen3-TTS

快速开始

这篇博客将带你了解如何完全在本地运行 Reachy Mini 的对话功能。无需云端、无需 API 密钥、数据不会离开你的机器。以下是展示实际效果的视频:

Video 7

本地提供 LLM 服务

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

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

完成!第一次会下载模型,后续启动会很快。

这些标志的作用是什么?

设置 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 和 Qwen3TTS,但后续启动会很快。

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

Video 8 现在,在 --mode local 模式下尝试之后,你可以不带该选项再次运行命令,以便为机器人提供 speech-to-speech 服务。

将 Reachy Mini 连接到 speech-to-speech

一旦 llama.cpp 和 speech-to-speech 运行起来,你可以通过桌面应用启动机器人,并启动对话应用。在对话应用的 UI 中,你需要通过点击 HF 后端中的 "edit connection" 来选择本地模式。以下是操作演示视频:

Video 9 这样就完成了。你可以开始与机器人对话了。流水线的每个阶段都是一种权衡:有更快但质量较低的 TTS 模型,也有更慢但质量更高的 STT 模型。我们针对多语言进行了优化,你可能希望针对单一语言进行优化。博客的其余部分将介绍如何进行自定义。

深入探讨

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

托管的实时后端很方便,但运行自己的引擎可以解锁三个优势:

speech-to-speech 仓库通过一个 CLI 提供了所有这些功能。它启动一个位于 /v1/realtime 的 WebSocket 服务器,该服务器使用 Reachy Mini 已经知道如何通信的协议。

我们的主观默认配置:VAD、STT、TTS

一个级联语音流水线有四个阶段:VAD、STT、LLM 和 TTS。对于其中三个,我们选择了可靠的默认配置,以便你可以专注于 LLM:

阶段 选择 原因
VAD Silero VAD v5 体积小、准确、可在 CPU 上运行。开源语音代理领域的事实标准。
STT Parakeet-TDT 支持流式处理、速度极快、英语质量出色。
TTS Qwen3-TTS 富有表现力、低延迟、多语言、支持自定义语音。

我们对这些选择有主观偏好,如果你有偏好,可以随意替换它们。

选择你的 LLM

LLM 是对系统延迟和整体性能影响最大的层。我们支持两种选项:本地运行模型(llama.cpp、MLX、Transformers、vLLM),或使用带有 Responses API 的服务器(OpenAI、Gemini、HF Inference Endpoints、llama.cpp、vLLM 等)。

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

系统的主要瓶颈是 LLM 推理延迟。为了解决这个问题,我们支持通过 Responses API 协议暴露的外部推理引擎。

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

选项 1:一个终端运行 llama.cpp,另一个终端运行 speech-to-speech

终端 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 \
  --mode realtime \
  --stt parakeet-tdt \
  --tts qwen3 \
  --llm_backend responses-api \
  --model_name "unsloth/Qwen3-4B-Instruct-2507-GGUF" \
  --responses_api_base_url "http://127.0.0.1:8080/v1"
选项 2:一个终端运行 vLLM,另一个终端运行 speech-to-speech

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

当通过 vLLM 为此流水线提供模型服务时,实际上需要三个标志:

终端 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 行启用了 Multi-Token Prediction (MTP)。它是可选的,但对端到端延迟有很大影响。只要模型支持,就保持启用。

终端 2:speech-to-speech 客户端:

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"
选项 3:Hugging Face Inference Endpoints

相同的协议,但模型在 Hugging Face 管理的 GPU 上运行。将任何聊天模型部署为 Inference Endpoint,然后将语音循环指向端点 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"
选项 4:Hugging Face Inference Providers

如果你不想管理自己的端点,可以使用 Inference Provider。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"
选项 5: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 等)。只需替换 base URL 和 API key,流水线的其余部分保持不变。


在进程中运行 LLM

选项 1:在 MLX 上运行本地 LLM(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。保持运行,将对话应用连接到本地后端,你就可以与机器人对话了。

选项 2:在 Transformers 上运行本地 LLM(CUDA / CPU / MPS)

同样的思路,但使用原生的 transformers。如果你使用的是 CUDA 机器、Linux,或者想自由地更换模型而无需为 MLX 重新转换权重,请使用此选项。

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

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

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

如果你在笔记本电脑上运行语音引擎,而在 Reachy Mini Wireless 上运行对话应用,唯一变化的是 URL。确保引擎绑定到 LAN 地址(不仅仅是 127.0.0.1),并在 UI 中选择 IP 时使用机器人的笔记本电脑 IP。

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

macOS

ipconfig getifaddr en0    # wifi
ipconfig getifaddr en1    # ethernet (有时是 en0,视情况而定)

Linux

hostname -I

Windows

ipconfig

在活动适配器下查找 "IPv4 Address"。

你需要的是 192.168.x.x10.x.x.x 的地址。如果你看到 169.254.x.x,说明你实际上没有连接到网络。


总结

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

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

译自 Hugging Face · 官方博客 · 录于 二〇二六年五月二十七日