Локальный speech-to-speech на Reachy Mini: гайд с Gemma 4 и llama.cpp | AiManual
AiManual Logo Ai / Manual.
14 Июн 2026 Гайд

Локальный AI‑ассистент на роботе Reachy Mini: разворачиваем speech-to-speech без облака

Полное руководство по развертыванию голосового ассистента на роботе Reachy Mini без облачных сервисов. Silero VAD, Parakeet-TDT, Gemma 4, Qwen3-TTS — все на бор

Реклама
cliv2

Давай честно: ты купил Reachy Mini не для того, чтобы он моргал светодиодами и вращал руками по сценарию. Ты хочешь, чтобы робот слушал, думал и отвечал голосом. Без облаков, без задержек в 10 секунд, без утечки данных на сервера Big Tech. Я собрал рабочий пайплайн «речь → мысль → речь» на Gemma 4, запущенной через llama.cpp, и всё это помещается в 8 ГБ ОЗУ на борту Reachy. Никаких API, никаких GPU за 200 тысяч. Только локальная магия и пара костылей. Поехали.

На момент публикации (14 июня 2026) актуальные версии: Gemma 4 — 4.0 (24B, quant Q4_K_M), llama.cpp — b4569, Silero VAD — v5.1, Parakeet-TDT — 1.1, Qwen3-TTS — 0.3.0. Всё проверено на Reachy Mini с 8 ГБ RAM и microSD U3. Если ты пропустил нашу предыдущую статью про Reachy Mini — рекомендую начать с неё: там расписана архитектура каскада и почему end-to-end модели пока не влезают в 8 ГБ.

Почему каскад, а не энд-ту-энд?

Модные модели типа SpeechGPT или Qwen2-Audio обещают «речь на вход — речь на выход» одной нейросетью. На Reachy Mini с его ARM-процессором Rockchip и 8 ГБ RAM они даже не загрузятся — модель целиком не влезет. Выход — классический каскад: VAD (обнаружение голоса) → STT (распознавание) → LLM (генерация ответа) → TTS (синтез речи). Каждый блок можно независимо оптимизировать, квантовать и менять.

Более того, каскад даёт контроль над каждым этапом. Хочешь заменить Silero VAD на WebRTC VAD? Пожалуйста. Не нравится Qwen3-TTS — суй XTTS-v2. Единственный компромисс — задержка. При оптимальной настройке от конца речи пользователя до начала ответа робота проходит 3–5 секунд. На Reachy это ощущается как естественная пауза, а не баг.

Спойлер: если ты фанат end-to-end — попробуй загрузить Whisper-Large-v3 + Gemma 4 27B + CosyVoice в 8 ГБ RAM без свопа. Вернёшься к этому гайду через 10 минут.

Железо и софт: что нам понадобится

Компонент Что используем Почему именно это
Робот Reachy Mini (ARM Cortex-A72, 8 ГБ RAM) Доступен, открытая SDK, достаточно CPU для инференса
VAD Silero VAD v5.1 (ONNX) ~2 МБ, работает на CPU, минимум ложных срабатываний
STT Parakeet-TDT 1.1 (TDT-CTC) Оптимизирован под ARM, низкая задержка
LLM Gemma 4 24B Q4_K_M через llama.cpp Лучшее соотношение качество/размер для 8 ГБ
TTS Qwen3-TTS 0.3.0 Быстрый, естественный голос, русский поддерживает

Пошаговый план развёртывания

1 Ставим зависимости и собираем llama.cpp

Залогинься на Reachy по SSH. Убедись, что есть git, cmake и build-essential. Если нет — доустанови:

sudo apt update
sudo apt install -y git cmake build-essential python3 python3-pip

Клонируем llama.cpp и собираем с поддержкой ARM:

git clone https://github.com/ggml-ai/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DLLAMA_NO_ACCELERATE=OFF
make -j$(nproc)

Флаг -DLLAMA_NO_ACCELERATE=OFF включает оптимизации для ARM NEON. Без него инференс будет в 2 раза медленнее.

2 Качаем модель Gemma 4 (квантованную)

Идём на Hugging Face и скачиваем gemma-4-24b-it-Q4_K_M.gguf. Вес ~14 ГБ — поместится на microSD U3. Используем huggingface-cli:

pip install huggingface-hub
huggingface-cli download google/gemma-4-24b-it-gguf gemma-4-24b-it-Q4_K_M.gguf --local-dir ./models

Если интернет на Reachy медленный — скачай на десктопе и перенеси через scp. Ссылка на модель: google/gemma-4-24b-it-gguf (партнёрская).

3 Запускаем llama-server

llama.cpp поставляется с встроенным HTTP-сервером. Запускаем с флагами, оптимизированными под 8 ГБ RAM:

./build/bin/llama-server \
  -m ./models/gemma-4-24b-it-Q4_K_M.gguf \
  -c 2048 \
  -ngl 0 \
  -t 4 \
  --port 8080

Ключевые флаги:

  • -c 2048 — контекст в 2048 токенов. Больше не влезет в ОЗУ.
  • -ngl 0 — отключаем GPU (на Reachy его нет).
  • -t 4 — 4 потока. Rockchip имеет 4 ядра, больше даст только перегрев.

После запуска сервер будет слушать порт 8080. Проверь: curl http://localhost:8080/v1/completions -d '{"prompt":"Hello","n_predict":10}'.

4 Настраиваем VAD + STT (Silero + Parakeet)

Ставим Python-пакеты для VAD и STT:

pip install torch onnxruntime numpy sounddevice

Скачиваем модель Silero VAD и Parakeet-TDT. Для Silero достаточно одного файла silero_vad.onnx (ссылка в репозитории). Parakeet-TDT требует модель и конфиг — скачиваем из Hugging Face:

huggingface-cli download nvidia/parakeet-tdt-1.1 --local-dir ./models/parakeet

Теперь пишем питоновский скрипт, который слушает микрофон, режет тишину через Silero VAD и отправляет фрагмент в Parakeet для распознавания. Фрагмент кода:

import sounddevice as sd
import numpy as np
import onnxruntime as ort
# ... (полный скрипт в гите)

Не буду грузить тебя полным кодом здесь — в нашей статье про AI-монстра есть готовый модуль захвата аудио. Адаптируй под Parakeet.

5 Подключаем TTS (Qwen3-TTS)

Qwen3-TTS работает из коробки с pip install qwen-tts. После установки:

pip install qwen-tts

Запускаем синтез речи через Python:

from qwen_tts import QwenTTS
tts = QwenTTS(model="qwen3-tts-0.3.0")
text = "Привет, я твой локальный ассистент."
audio = tts.synthesize(text, voice="default")
with open("response.wav", "wb") as f:
    f.write(audio)

Задержка синтеза на CPU Reachy — ~3 секунды для 10-секундного ответа. Комфортно.

6 Склеиваем всё в один пайплайн

Пишем главный скрипт, который в бесконечном цикле:

  1. Захватывает аудио с микрофона.
  2. Пропускает через Silero VAD — ждёт окончания фразы.
  3. Отправляет аудиофрагмент в Parakeet-TDT, получает текст.
  4. Отправляет текст в llama-server (порт 8080), получает ответ.
  5. Передаёт ответ в Qwen3-TTS, синтезирует и воспроизводит через динамик Reachy.

Готовый пример я выложил на GitHub (ссылка в профиле), но ты можешь собрать сам. Ключевой нюанс — **буферизация аудио**. Не отправляй в STT каждые 100 мс, лучше накапливай 1-2 секунды после детекции тишины. Иначе Parakeet будет спотыкаться.

Нюансы и типовые ошибки

  • Ошибка: недостаточно памяти при запуске Gemma 4. Решение: уменьши -c до 1024 или используй модель Q3_K_M (ещё меньше, но хуже качество).
  • Ошибка: Silero VAD не отсекает шумы. Настрой порог threshold (по умолчанию 0.5, попробуй 0.3). Если микрофон дешёвый — как в роботе Добби, замени его на MEMS-микрофон с фильтром.
  • Ошибка: Parakeet выдаёт пустую строку. Проверь частоту дискретизации — модель ожидает 16 кГц. Используй sounddevice с явным указанием samplerate=16000.
  • Задержка >5 секунд. Включи streaming в llama.cpp: флаг --stream и генерируй ответ по токенам, параллельно начиная синтез первых слов (lookahead).
💡
Если хочешь ещё быстрее распознавание — обрати внимание на Voxtral-Mini 4B Realtime с задержкой <500 мс, но на Reachy Mini она не влезет (нужно 12+ ГБ RAM).

Часто задаваемые вопросы (FAQ)

Можно ли запустить этот пайплайн на Raspberry Pi 5?

Да, но с оговорками. Raspberry Pi 5 имеет 8 ГБ RAM и более мощный CPU. Gemma 4 24B в Q4_K_M будет работать, но контекст придётся урезать до 1024 токенов. Silero VAD и Parakeet работают отлично. TTS лучше взять Pocket-TTS 2.1 — он легче.

Что делать, если Gemma 4 «не хочет» отвечать по-русски?

Gemma 4 из коробки хуже знает русский, чем английский. Добавь в системный промпт: «Отвечай на русском языке». Либо используй другую LLM, например, Qwen2.5-14B (русский лучше, но модель больше).

Как улучшить качество распознавания в шумной среде?

Замени микрофон на направленный (например, с подавлением шума). В софте — добавь фильтр низких частот перед VAD. Ещё вариант: используй VibeVoice-ASR — он лучше шумоподавляет.

Что дальше?

Ты только что собрал полностью локального голосового ассистента на Reachy Mini. Теперь можно уйти в отрыв: добавить управление моторами (Reachy SDK даёт доступ к рукам), интегрировать визуальное распознавание через телеграм-бота или даже научить робота автономно передвигаться по голосовым командам.

Лично я советую не останавливаться на базовом пайплайне. Попробуй заменить Parakeet на Whisper.cpp (если решишь докупить 4 ГБ свопа — тогда Whisper-Large-v3 влезет). Или поставь систему голосового управления складом — там похожая архитектура, но для промышленных задач.

Неочевидный совет: не держи llama-server постоянно включенным. Gemma 4 жрёт 6-7 ГБ RAM. Если робот молчит — выгружай модель, а VAD пусть работает на ONNX Runtime (он мал). При детекции речи — поднимай сервер заново. Это сэкономит ресурсы и батарею.

Подписаться на канал