Архитектура локального AI-ассистента: STT, TTS, RAG, управление домом, генерация изображений | AiManual
AiManual Logo Ai / Manual.
13 Янв 2026 Гайд

Построение AI-монстра: локальный ассистент со всем функционалом в одной коробке

Подробный разбор архитектуры полностью локального AI-ассистента со всеми функциями. STT, TTS, RAG, управление умным домом, генерация изображений и мониторинг си

Зачем собирать этот Франкенштейн?

Вы устали от дюжины разных приложений? Голосовой ассистент в одном месте, управление домом в другом, генерация картинок в третьем, а контекст из ваших документов вообще живёт отдельной жизнью. И всё это стучится в облака, передавая ваши разговоры о включении света неизвестно куда.

Локальный AI-ассистент "всё в одном" — это не просто игрушка для гиков. Это полный цифровой суверенитет. Ваши данные никуда не уходят. Система работает, даже если интернет отрубили. И самое главное — вы контролируете каждую деталь.

Ключевой принцип: если что-то можно запустить локально — запускаем локально. Если нужно выбирать между удобством и приватностью — выбираем приватность, а потом делаем удобным.

Архитектурная карта: что и где живёт

Представьте многоэтажный дом. На первом этаже — железо и операционка. На втором — базовые сервисы. На третьем — AI-компоненты. На четвёртом — интеграции. На крыше — мониторинг. Каждый этаж зависит от нижнего, но не знает деталей реализации.

Уровень Компоненты Зачем нужен
L0: Инфраструктура Docker, Docker Compose, Nginx, PostgreSQL, Redis Контейнеризация, маршрутизация, хранение данных, кэширование
L1: Ядро ассистента LocalAI, Ollama, текстовый LLM (Qwen2.5-7B) Мозг системы, обработка запросов, планирование
L2: Голосовой интерфейс Whisper.cpp (STT), Piper или Coqui TTS Преобразование речь-текст и текст-речь
L3: Память и контекст ChromaDB + LangChain, RAG-пайплайн Доступ к документам, долгосрочная память
L4: Интеграции n8n, Home Assistant, MCP-серверы Управление домом, автоматизация, внешние API
L5: Дополнительные AI-сервисы Stable Diffusion, контрольные панели Генерация изображений, мониторинг состояния

1 Выбираем железо: от Raspberry Pi до серверной стойки

Здесь всё зависит от бюджета и амбиций. Хотите просто голосового помощника для включения света? Raspberry Pi 5 с Coral USB-ускорителем хватит. Хотите всё из заголовка статьи? Готовьтесь к серьёзным вложениям.

  • Бюджетный вариант (до 50к рублей): Intel NUC с Core i7, 32GB RAM, без дискретной видеокарты. STT/TTS будут работать, LLM — маленькие (до 7B параметров), Stable Diffusion — только txt2img в низком разрешении.
  • Оптимальный вариант (150-200к рублей): Десктоп с RTX 4070 Ti (12GB VRAM), 64GB RAM, Core i5. Потянет LLM до 13B в 4-битном квантовании, SDXL, все голосовые компоненты одновременно.
  • Монстр (от 500к рублей): Сервер с 2x RTX 4090, 128GB RAM, Xeon. Здесь можно развернуть агента на стероидах с большими моделями и параллельной обработкой запросов.

Не экономьте на оперативной памяти. Когда одновременно работают LLM, векторная БД, STT/TTS и ещё что-то — 16GB съедаются мгновенно. 32GB — минимум для комфортной работы.

2 Собираем голосовой контур: когда микрофон умнее вас

STT (Speech-to-Text) — самая простая часть. Whisper.cpp работает на процессоре, не требует GPU, и точность у него близка к оригинальному Whisper от OpenAI. Но есть нюанс: фоновый шум.

Если просто запустить Whisper в комнате с работающим телевизором, получите транскрипцию телепередачи, а не вашу команду. Решение — VAD (Voice Activity Detection). Мы используем Silero VAD, который определяет, когда говорите именно вы, и только тогда включает запись.

# Пример конфигурации Whisper.cpp с VAD
import whisper_cpp

# Инициализация с параметрами
model = whisper_cpp.Whisper(
    model_path="ggml-base.bin",
    language="ru",
    vad_threshold=0.5,  # Порог активации голоса
    vad_min_silence_duration_ms=500  # Минимальная тишина для остановки
)

# Обработка аудиопотока
audio = capture_audio()
text = model.transcribe(audio)
print(f"Распознано: {text}")

TTS (Text-to-Speech) сложнее. Piper — быстрый, но голоса звучат как роботы из 90-х. Coqui TTS с моделями XTTS v2 — качественнее, но требует GPU и ест 2-3GB VRAM. Выбор зависит от того, готовы ли вы ждать 2 секунды вместо 200 миллисекунд ради естественного голоса.

3 Мозг системы: выбираем LLM, которая не будет галлюцинировать

Здесь ошибка стоит дорого. Поставите маленькую модель — будет постоянно "не понимать" запросы. Поставите большую — упрётесь в ограничения железа. Поставите неподходящую — получите галлюцинации вроде "включил свет в комнате, которой нет".

Для управления домом нужна модель с хорошим пониманием инструментов (function calling). Qwen2.5-7B-Instruct справляется отлично, требует около 8GB RAM в 4-битном формате. Если хватит ресурсов — Qwen2.5-14B будет ещё стабильнее.

💡
Не используйте модели, обученные только на английском. Они будут "ломать" русские команды. Ищите multilingual или специально обученные на русском варианты. Hermes-2 русскоязычные версии или русифицированные Qwen — ваш выбор.

Системный промпт — вот где магия. Вы должны явно описать модельке её возможности и ограничения:

Ты — домашний ассистент Алиса. У тебя есть доступ к:
1. Управлению умным домом через Home Assistant
2. База знаний с документами (RAG)
3. Генерации изображений по запросу

Ты НЕ МОЖЕШЬ:
- Совершать покупки
- Звонить по телефону
- Отправлять email

Формат ответа: сначала думай (Reasoning), потом действуй (Action).
Если запрос требует доступа к документам — используй search_documents().
Если нужно включить/выключить устройство — используй home_assistant_action().

4 RAG-система: когда ассистент помнит ваши документы

Без RAG ваш ассистент — просто голосовой интерфейс к API. С RAG он может ответить на вопрос "Что написано в моём договоре аренды?" или "Когда у жены день рождения?".

Архитектура простая, но капризная:

  1. Загрузка документов: PDF, Word, TXT, даже скриншоты через OCR
  2. Чанкинг: Разбиваем на перекрывающиеся отрезки по 500-1000 символов
  3. Эмбеддинг: Преобразуем в векторы с помощью модели all-MiniLM-L6-v2
  4. Поиск: Semantic search в ChromaDB по косинусной близости
  5. Контекстуализация: Добавляем найденные чанки в промпт к LLM

Ошибка, которую делают все: хранить всё в одной коллекции. Договоры, рецепты, заметки — всё вместе. Когда спрашиваете про рецепт борща, система находит и отрывок из договора, и рецепт, и ещё какую-то ерунду. Решение — namespaces в ChromaDB. Отдельно "документы", отдельно "личное", отдельно "дом".

5 Интеграция с умным домом: когда голос заменяет 10 приложений

Home Assistant — король локальных умных домов. Но заставить LLM работать с ним напрямую — боль. API Home Assistant RESTful, но модель должна понимать структуру: какие устройства есть, какие атрибуты, какие сервисы.

Правильный путь — MCP-сервер (Model Context Protocol). Он выступает переводчиком между LLM и Home Assistant. Вы описываете инструменты в JSON Schema, MCP-сервер предоставляет их модели как "функции", которые можно вызывать.

{
  "tools": [
    {
      "name": "control_light",
      "description": "Включить или выключить свет",
      "parameters": {
        "entity_id": {
          "type": "string",
          "enum": ["light.living_room", "light.bedroom"]
        },
        "action": {
          "type": "string",
          "enum": ["on", "off", "toggle"]
        }
      }
    }
  ]
}

Когда вы говорите "Включи свет в гостиной", STT преобразует в текст, LLM определяет, что нужно вызвать control_light с параметрами entity_id="light.living_room", action="on", MCP-сервер выполняет вызов Home Assistant API, и свет включается.

n8n добавляет сюда суперсилу — визуальное программирование автоматизаций. Хотите, чтобы при команде "Я дома" включался свет, запускался чайник и играла музыка? Собираете workflow в n8n, экспортируете как инструмент в MCP, и модель получает новую "функцию".

6 Генерация изображений: Stable Diffusion без облаков

"Нарисуй кота в космосе в стиле Ван Гога". Запрос, который отправляет 99% пользователей в облачные сервисы. А зря. Stable Diffusion 1.5 работает на 6GB VRAM. SDXL — на 8-10GB. Комфортно — на 12GB+.

Устанавливаем Automatic1111 или ComfyUI в Docker-контейнере. Настраиваем API. Интегрируем через MCP-сервер как ещё один инструмент. Теперь модель может не только отвечать текстом, но и генерировать изображения по запросу.

Внимание с промптами! LLM будет пытаться сгенерировать промпт для Stable Diffusion, но её представление о "красивом изображении" может не совпадать с вашим. Лучше ограничить генерацию конкретными сценариями: "иллюстрация для истории", "мем по теме", "схема процесса".

7 Мониторинг: знать, что система не умерла

Самая скучная часть, без которой всё развалится через неделю. Вам нужно знать:

  • Работают ли контейнеры (Docker stats)
  • Не перегревается ли GPU (nvidia-smi)
  • Хватает ли памяти (особенно важно для оптимизации LLM)
  • Корректно ли работает распознавание речи (лог ошибок Whisper)

Собираем всё в Grafana. Prometheus для метрик, Loki для логов, Alertmanager для уведомлений. Когда система начинает тормозить — вы видите это на дашборде до того, как пользователь (вы же) начинает ругаться.

Собираем пазл: docker-compose.yml для всего сразу

Теперь самое интересное — как всё это заставить работать вместе. Docker Compose — ваш лучший друг.

version: '3.8'

services:
  # LLM сервер
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  # Векторная БД
  chromadb:
    image: chromadb/chroma:latest
    ports:
      - "8000:8000"
    volumes:
      - chroma_data:/chroma/chroma

  # Голосовой интерфейс
  whisper-api:
    build: ./whisper-service
    ports:
      - "9000:9000"
    volumes:
      - ./models:/models

  # Home Assistant
  homeassistant:
    image: homeassistant/home-assistant:stable
    ports:
      - "8123:8123"
    volumes:
      - ha_data:/config

  # n8n для автоматизаций
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=секретный_пароль

  # MCP-сервер для интеграций
  mcp-server:
    build: ./mcp-server
    ports:
      - "3000:3000"
    depends_on:
      - homeassistant
      - n8n
      - chromadb

  # Stable Diffusion
  stable-diffusion:
    image: ghcr.io/automatic1111/stable-diffusion-webui:latest
    ports:
      - "7860:7860"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

  # Мониторинг
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3001:3000"

volumes:
  ollama_data:
  chroma_data:
  ha_data:

Тёмная сторона: интерфейс, который не слепит глаза

Всё это богатство нужно как-то контролировать. Веб-интерфейс — очевидный выбор. Но если вы работаете ночью, белый экран Home Assistant или Grafana выжжет глаза.

Решение — тёмная тема везде. Но не просто invert colors, а продуманный dark mode:

  • Home Assistant: HACS → Frontend Themes → Midnight
  • Grafana: Built-in Dark theme
  • n8n: Settings → Personalization → Theme Dark
  • Свой фронтенд для ассистента: Tailwind CSS с классом "dark"

Единая панель управления — отдельный фронтенд на React/Vue, который агрегирует все компоненты. Кнопка "Разбудить ассистента", список последних команд, быстрый доступ к настройкам устройств, предпросмотр сгенерированных изображений.

Что пойдёт не так (спойлер: почти всё)

Проблема Причина Решение
Ассистент не слышит команды VAD слишком чувствительный или фоновый шум Настроить vad_threshold, добавить шумоподавление на уровне микрофона
LLM медленно отвечает Модель слишком большая или контекст переполнен Уменьшить размер контекста, использовать кэширование, перейти на более лёгкую модель
RAG находит нерелевантные документы Плохие эмбеддинги или слишком большие чанки Использовать другую модель для эмбеддингов, настроить чанкинг с перекрытием
Home Assistant не отвечает Проблемы с сетью или API-токеном Проверить long-lived access token, убедиться что сервисы в одной сети
Генерация изображений падает Нехватка VRAM или неправильные промпты Использовать --medvram флаг, ограничить разрешение, валидировать промпты

Стоит ли игра свеч?

Абсолютно. Да, это сложно. Да, придётся потратить недели на настройку. Да, что-то будет ломаться. Но когда вы впервые скажете "Привет, включи свет на кухне и найди рецепт пасты" — и система выполнит оба действия, не спросив пароль от Google и не отправив аудиозапись в Калифорнию — вы поймёте, зачем всё это.

Это не просто ассистент. Это ваша цифровая крепость. Каждый компонент вы контролируете. Каждая модель — ваша. Каждый байт данных остаётся дома. В мире, где большие компании перекраивают себя под аудио и собирают ваши разговоры — такая система становится не игрушкой, а необходимостью.

Начните с малого. Сначала голосовой интерфейс к Home Assistant. Потом добавьте RAG с вашими документами. Потом генерацию изображений. Каждый шаг — новый уровень контроля. И через месяц вы будете смеяться над теми, кто всё ещё говорит "Окей, Google".