Автономная умная колонка на Raspberry Pi: полный гайд по локальным ИИ-моделям | AiManual
AiManual Logo Ai / Manual.
04 Мар 2026 Гайд

Сборка умной колонки на Raspberry Pi с локальными ИИ-моделями: Ollama, Whisper, Silero TTS

Пошаговое руководство по сборке умной колонки на Raspberry Pi 5. Используем локальные модели Ollama, Whisper и Silero TTS для полной автономности без облаков и

Тишина, Wi-Fi пропал, а ваш Alexa умер. Пора собирать свою колонку

Каждый раз, когда вы просите у Google погоду, кусочек вашей приватности уплывает в дата-центр. Каждая команда для Алисы - это пинг в чужое облако. Задержки, подписки, внезапные отключения сервисов. Это бесит? Меня - да.

Решение лежит не в магазине, а на вашем столе. Raspberry Pi 5, пара локальных нейросетей и немного питоновской магии превращаются в устройство, которое работает когда угодно и никому ничего не передает. Никаких API-ключей, никаких лимитов на запросы, никакого шпионажа.

Да, это сложнее, чем купить готовую колонку. Да, первый запуск займет полдня. Но после настройки вы получите устройство, которое слушает только вас и отвечает даже когда интернет отрубили.

1 Что купить, а что лучше выбросить сразу

Начнем с железа. Базовый набор на 2026 год выглядит так:

  • Raspberry Pi 5 с 8GB RAM - меньше не берите. 4GB хватит только на слезы и swapping. Модель Pi 5B - оптимальна. (Купить можно по партнерской ссылке).
  • Качественный USB-микрофон - не тот, что за 300 рублей из Китая. Любой фоновый шум убьет точность распознавания. Ищите что-то с шумоподавлением. (Вариант - эта модель).
  • Активные колонки или усилитель + пассивные - Pi не потянет наушниковый выход.
  • Блок питания на 5V/5A - стандартный на 3А не справится под нагрузкой.
  • Карта microSD на 64GB класса A2 - скорость записи критична. Или лучше SSD через USB.
💡
Пропустите Pi 4. Разница в цене небольшая, но производительность CPU в Pi 5 выше на 2-3x, а PCIe 2.0 ускоряет работу с хранилищем. Для ИИ-моделей это принципиально.

2 Подготовка Pi: от прошивки до первого писка

Ставим Raspberry Pi OS (64-bit, не Lite). Последняя версия на март 2026 - "Bookworm". После установки - сразу апдейт:

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv git build-essential portaudio19-dev libopenblas-dev

Теперь настроим аудио. Самая частая ошибка - неправильный выбор устройства ввода/вывода.

# Смотрим доступные аудиоустройства
arecord -l
aplay -l

# Создаем конфиг для ALSA
sudo nano /etc/asound.conf

В файл добавляем (замените card numbers на свои):

pcm.!default {
  type asym
  playback.pcm "hw:1,0" # ваша колонка
  capture.pcm "hw:2,0"  # ваш микрофон
}

Если после перезагрузки звук не работает, проверьте вывод команд arecord -L и aplay -L. Чаще всего проблема в том, что система "видит" HDMI-аудио как устройство по умолчанию. Придется повозиться.

3 Ollama: мозги колонки, которые работают без интернета

Ollama на март 2026 - версия 0.5.x с поддержкой новых моделей. Устанавливаем:

curl -fsSL https://ollama.ai/install.sh | sh
ollama serve &

Какую модель качать? Gemma3-4B (релиз 2025 года) или Moondream2 (специально для edge-устройств). Qwen2.5-3B тоже отлично работает. Забудьте про Llama 3.1 - она слишком тяжелая.

# Качаем оптимальную модель для Pi 5
ollama pull moondream:1.8b-v2-fp16

# Проверяем
ollama run moondream:1.8b-v2-fp16 "Привет!"

Ответ должен прийти за 3-5 секунд. Если дольше 10 - что-то не так. В моей статье Запуск LLM на Raspberry Pi есть детали по оптимизации.

4 Whisper: заставляем колонку понимать русскую речь

OpenAI Whisper - эталон. Но нам нужна C++ реализация, иначе Pi не потянет. Берем whisper.cpp:

git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
make -j4

# Качаем маленькую, но эффективную модель для русского
./models/download-ggml-model.sh ggml-small.bin

Теперь тест. Запишите голосовой файл test.wav и проверьте:

./main -f ./samples/test.wav -l ru -m ./models/ggml-small.bin -otxt

Если распознало хоть что-то - отлично. Для реального использования нужен скрипт на Python, который слушает микрофон и запускает whisper.cpp при обнаружении речи. Используйте pyaudio и пороговое значение энергии сигнала.

Если нужна сверхнизкая задержка, посмотрите Voxtral-Mini 4B Realtime. Но для колонки обычный Whisper хватает.

5 Silero TTS: говорим без акцента и облаков

Силеро - единственная нормальная TTS для русского, которая работает локально. На 2026 год актуальна версия v4 с улучшенной интонацией.

python3 -m venv tts_venv
source tts_venv/bin/activate
pip install silero torch torchaudio --index-url https://download.pytorch.org/whl/cpu

Тестовый скрипт:

import torch
import sounddevice as sd

device = torch.device('cpu')
torch.set_num_threads(4)
model, example_text = torch.hub.load(repo_or_dir='snakers4/silero-models',
                                     model='silero_tts',
                                     language='ru',
                                     speaker='v4_ru')
model.to(device)

audio = model.apply_tts(text="Привет, я ваша локальная колонка!",
                       speaker='random',
                       sample_rate=48000,
                       put_accent=True,
                       put_yo=True)

sd.play(audio.numpy(), 48000)
sd.wait()

Голос будет механическим, но понятным. Лучше, чем у облачных сервисов 5-летней давности.

6 Скрипт-оркестратор: связываем всё в один пайплайн

Теперь самое интересное - написать мозг, который координирует работу компонентов. Основная логика:

  1. Постоянно слушать микрофон, детектировать голос (VAD).
  2. Когда речь обнаружена, записать аудио в буфер.
  3. Отправить аудио в Whisper для транскрипции.
  4. Текст передать в Ollama.
  5. Ответ от Ollama отдать в Silero.
  6. Воспроизвести результат через колонки.

Код-заготовка (упрощенная):

import subprocess
import json
import sounddevice as sd
import numpy as np
from scipy.io.wavfile import write
import torch

# 1. Запись с микрофона
def record_audio(duration=5, fs=16000):
    recording = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='float32')
    sd.wait()
    return recording, fs

# 2. Транскрибация через whisper.cpp
def transcribe(audio_path):
    cmd = f"./whisper.cpp/main -f {audio_path} -l ru -m ./whisper.cpp/models/ggml-small.bin -oj"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    data = json.loads(result.stdout)
    return data['transcription']

# 3. Запрос к Ollama
def ask_llm(prompt):
    cmd = f"ollama run moondream:1.8b-v2-fp16 '{prompt}'"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    return result.stdout.strip()

# 4. Синтез речи
def synthesize(text):
    # ... код Silero TTS ...
    return audio_array

# Главный цикл
while True:
    print("Слушаю...")
    audio, fs = record_audio()
    write("temp.wav", fs, audio)
    
    text = transcribe("temp.wav")
    print(f"Вы сказали: {text}")
    
    if text.strip():
        response = ask_llm(text)
        print(f"Ответ: {response}")
        
        speech = synthesize(response)
        sd.play(speech, 48000)
        sd.wait()

Это сырая основа. В реальности нужно добавить VAD (например, webrtcvad), обработку фонового шума, кэширование частых запросов.

7 Интеграция с Home Assistant: колонка как центр умного дома

Самое мощное преимущество локальной колонки - прямая интеграция с домашней автоматизацией. Не через облако, а по локальной сети.

Устанавливаем MQTT-брокер (Mosquitto) на Pi или на отдельный сервер. Наш скрипт-оркестратор публикует распознанные команды в топик, например, home/assistant/command. Home Assistant подписан на этот топик и выполняет действия.

Пример: вы говорите "Включи свет на кухне". Скрипт распознает, передает в Ollama, который преобразует в структурированную команду JSON: {"device": "light", "room": "kitchen", "action": "turn_on"}. Эта команда публикуется в MQTT, а Home Assistant ее обрабатывает.

Никаких навыков, никаких облачных платформ. Все работает даже если провайдер лег.

💡
Для сложных сценариев ("если на улице дождь, закрой окна") можно использовать локальный RAG-пайплайн, как описано в статье Как создать локальный RAG-пайплайн для аудио. Но для базового умного дома хватит и прямых команд.

8 То, что сломается первым: типичные ошибки и как их чинить

Проблема Причина Решение
Whisper не распознает речь Фоноговор, неправильная частота дискретизации Добавить шумоподавление (noise suppression), конвертировать аудио в 16kHz
Ollama отвечает 30+ секунд Слишком тяжелая модель, нехватка RAM Перейти на Moondream или Qwen2.5-1.5B, настроить zram
Звук с микрофона тихий Низкий уровень усиления ALSA amixer set 'Capture' 100%, проверить настройки alsamixer
Карта microSD умерла через месяц Постоянная запись логов и временных файлов Перенести /tmp и /var/log на RAM-disk, использовать SSD

Самое важное - мониторить температуру. Под полной нагрузкой Pi 5 греется до 80°C. Без активного охлаждения процессор начнет троттлить, и Whisper будет работать в 10 раз медленнее.

# Установите вентилятор и мониторьте температуру
vcgencmd measure_temp
# Если выше 70°C - срочно ставите радиатор или кулер

И что в итоге?

У вас получилась коробка, которая:

  • Работает без интернета. Вообще.
  • Никуда не отправляет ваши голосовые запросы.
  • Управляет умным домом через локальную сеть.
  • Отвечает на русском с задержкой 2-4 секунды (да, быстрее, чем Alexa в 2020 году).
  • Стоит в 3-4 раза дешевле готовых аналогов (если не считать времени, которое вы потратили).

Это не идеальная замена Google Home. Распознавание иногда ошибается, голос роботизированный, а на сложные вопросы система отвечает ерундой. Но она ваша. Вы контролируете каждый байт. Вы можете заменить любую часть стека. Whisper надоел? Поставьте Qwen3-ASR. Ollama кажется медленной? Перейдите на ChatLLM.cpp.

Следующий шаг - добавить локальную мультимодальность. Поставить Moondream (она уже в Ollama) и подключить камеру. Теперь можете спрашивать "что лежит на столе?" и получать ответ от нейросети, которая видит мир через объектив. Но это уже другая история.

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