元鉴
返回中文阅读流

Hugging Face Blog

Reachy Mini 实现完全本地化运行

来自 Hugging Face Blog 的最新公开更新。

中文内容

已翻译official company source英文原文2026-05-27

Reachy Mini 完全本地化运行

发布于 2026 年 5 月 27 日
Update on GitHub

快速开始:在本地提供 LLM 服务;设置语音到语音;将 Reachy Mini 连接到语音到语音;深入了解;为什么要运行自己的语音到语音服务器?我们有倾向性的默认设置:VAD、STT、TTS;选择你的 LLM;在笔记本电脑上运行引擎、在机器人上运行应用;总结。组装好 Reachy Mini 后,你将安装对话应用并开始与它交谈。在此之前,你必须把音频发送到服务器。但现在不用了。今天我们将带你在本地运行整个技术栈。

该技术栈由 speech-to-speech 驱动,这是我们的级联式 VAD → STT → LLM → TTS 流水线,对外提供兼容 Realtime API 的 /v1/realtime WebSocket。启动后端后,在 UI 中将机器人指向它。

级联是当今开源领域中最灵活的选择,而且在组件搭配得当时也是最快的。我们会推荐我们最喜欢的组件,但级联的核心意义在于你可以替换它们。新模型每周都会发布。

TL;DR 为你的 Reachy Mini 部署一个本地语音后端。我们使用我们的语音到语音库,一种级联方法。推荐: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

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

What do those flags do?
  • -hf ggml-org/gemma-4-E4B-it-GGUF — 直接从 Hub 拉取模型。首次运行会下载它,后续运行会使用缓存。
  • -np 2 —— 两个并行槽位。让服务器能够处理第二个请求(例如一次快速打断),而不会被第一个请求阻塞。
  • -c 65536 —— 64k 上下文窗口,在各槽位之间共享。为长对话提供充足余量。
  • -fa on —— flash attention。速度更快、内存占用更低,在现代硬件上基本没有额外成本。
  • --swa-full —— 保留完整的滑动窗口注意力缓存,而不是重新计算它。用少量 RAM 换取 Gemma 上明显更快的提示词处理速度。

设置语音到语音

我们将从简单地安装该库开始

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 和 speech-to-speech 运行后,你可以使用桌面应用启动机器人并启动对话应用。在对话应用的 UI 中,你需要通过点击 HF 后端中的“edit connection”来选择本地模式。下面是一段展示如何操作的视频:

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

深入探讨

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

托管式实时后端很方便,但运行自己的引擎可以解锁三项能力:

  • 隐私。音频永远不会离开你的网络,整个流程都运行在你掌控的硬件上。
  • 无 API 成本。没有按分钟或按 token 收费。
  • 对整个流程拥有完全控制权。可以替换任何部分:VAD、STT、LLM、TTS。只要 Hub 🤗 上出现更好的东西,就可以随时更换。

speech-to-speech 仓库通过一个 CLI 为你提供所有这些功能。它会在 /v1/realtime 启动一个 WebSocket 服务器,使用 Reachy Mini 已经能够通信的同一协议。

我们有倾向性的默认选项:VAD、STT、TTS

级联式语音管线有四个阶段:VAD、STT、LLM 和 TTS。对于其中三个阶段,我们选择了可靠的默认选项,让你可以专注于 LLM:

Stage Choice Why VAD Silero VAD v5 Tiny, accurate, runs on CPU. The de-facto default in the open-source voice-agent world. STT Parakeet-TDT 0.6B v3 Streaming-friendly, very fast, great quality on English. TTS Qwen3-TTS Expressive, low-latency, multilingual, supports custom voices.

我们对这些选择有自己的倾向;如果你有偏好的方案,可以随意替换为你自己的选择。

选择你的 LLM

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

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

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

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

选项 1:一个终端运行 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"
选项 2:一个终端运行 vLLM,另一个终端运行语音到语音
需要 vLLM ≥ 0.21.0。vLLM 0.21.0 已完整支持 Responses API 协议,包括语音到语音后端使用的工具调用流式传输。较旧版本可以启动,但一旦助手尝试调用工具就会出错。

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

  • 正文:--enable-auto-tool-choice
  • --tool-call-parser <tool_parser_name> — 选择按模型家族划分的解析器,将模型的原始输出转换为结构化工具调用(例如,Qwen3 instruct 模型使用 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"
选项 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 等),用其基础 URL 和 API 密钥替换即可,其余流水线保持不变。

在进程内运行 LLM

选项 1:在 MLX(Apple Silicon)上运行本地 LLM

如果你使用的是 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(CUDA / CPU / MPS)上运行本地 LLM

同样的思路,但使用原生 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    
ipconfig getifaddr en1    
Linux
hostname -I
Windows
ipconfig

在当前活动的适配器下查找“IPv4 Address”。

你需要的是 192.168.x.x 或 10.x.x.x 这样的地址。如果你看到 169.254.x.x,说明你实际上并未连接到网络。

总结

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

  • 一个使用 Silero 进行监听的机器人,
  • 使用 Parakeet-TDT 0.6B v3 进行转写,
  • 使用你选择的任何 LLM 进行思考,无论是本地 MLX、本地 Transformers、隔壁的 vLLM 或 llama.cpp 服务器,还是托管的 Responses API 端点,
  • 并使用 Qwen3-TTS 进行回答。

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

社区

原文标题

Reachy Mini goes fully local