Локальный ИИ · обучение · голос

Голосовой локальный ИИ-репетитор без Интернета: Whisper, LLM и TTS

Ребёнок говорит в микрофон, локальная система распознаёт речь, ИИ понимает контекст урока, задаёт следующий вопрос и отвечает вслух. Такой голосовой репетитор уже можно собрать без обязательного облака. Но хороший результат зависит не от одного «голосового режима», а от четырёх частей: STT, LLM, учебной логики и TTS.

Актуально: сентябрь 2026 Русский язык Local-first · без обязательного облака
Open WebUIWhisperfaster-whisper OllamaSilero TTSPiper
Если нужен один вывод. Самый практичный первый вариант — не пытаться сразу сделать «живого цифрового человека». Начните с пошагового голосового диалога: ребёнок нажал кнопку, сказал фразу, локальный STT получил текст, локальная LLM сформировала короткий педагогический ответ, локальный TTS его озвучил. После того как этот контур работает стабильно, можно добавлять автоматическое определение конца реплики, hands-free режим, несколько преподавателей и память ученика.
Реально локальноSTT, LLM, RAG, память ученика и TTS могут работать внутри домашней сети.
Не нужен full-duplexДля учебного MVP достаточно естественного поочерёдного диалога.
Русский TTS естьSilero и актуальный Piper поддерживают русский язык локально.
Главное — сценарийБез педагогических правил голосовой чат быстро превращается в устный решебник.

Это не тот же голосовой ассистент, что для умного дома

На Electrikman уже есть отдельный материал про локальный голосовой ассистент Home Assistant: там задача — быстро распознать команду, определить intent и включить свет, климат или сцену. Для ИИ-репетитора логика другая.

Умный домКоманда → действие

«Включи свет на кухне» → распознать → выполнить → коротко подтвердить.

ОбучениеДиалог → попытка → подсказка

«Я не понимаю дроби» → уточнить пробел → объяснить → спросить → проверить понимание.

Поэтому система должна оптимизироваться не только на точность распознавания и скорость ответа, но и на качество учебного хода: что спросить дальше, когда дать подсказку и когда замолчать, чтобы ученик подумал сам.

Архитектура голосового ИИ-репетитора

1. МикрофонГолос ученика
↓
VADгде начинается и заканчивается речь
STTаудио → текст
↓
2. Учебный мозгLLM + системные правила + текущий урок + RAG + профиль ученика
↓
Text responseкороткая реплика учителя
TTSтекст → аудио
↓
3. ДинамикОтвет ИИ-учителя голосом

Все блоки заменяемые. Например, можно оставить одну и ту же LLM, но перейти с whisper.cpp на faster-whisper или сменить Piper на Silero. Это удобнее, чем строить монолит, где распознавание, логика и голос жёстко связаны.

Что происходит за один голосовой ход

  1. Ребёнок начинает говорить.Кнопка записи или VAD открывает новый голосовой ход.
  2. Аудио передаётся в STT.Локальная модель превращает речь в текст.
  3. Текст попадает в учебный сценарий.Система знает предмет, тему, уровень помощи и состояние задания.
  4. LLM формирует короткий ответ.Например, не решение, а один уточняющий вопрос или одну подсказку.
  5. Ответ отправляется в TTS.Чем раньше начинается озвучивание законченной фразы, тем естественнее диалог.
  6. После ответа снова включается слушание.Начинается следующий учебный ход.
Для ребёнка голосовой ответ должен быть короче текстового. Длинный абзац удобно перечитать глазами, но тяжело удержать на слух. Голосовой system prompt имеет смысл отдельно ограничивать: одна мысль, один вопрос, минимум лишних вводных.

Что выбрать для распознавания речи

ВариантПлюсыКогда выбирать
Open WebUI Local Whisper Уже встроен; не нужен отдельный STT-сервис; можно выбрать Whisper model и VAD. Самый простой старт с Open WebUI.
whisper.cpp Локальный C/C++ runtime; удобен на CPU и для самостоятельной интеграции. Нужен лёгкий отдельный сервис или приложение.
faster-whisper CTranslate2, VAD, word timestamps, GPU/CPU и удобный Python API. Собственная серверная логика и более гибкий pipeline.
Self-hosted OpenAI-compatible STT Интерфейс не зависит от конкретного движка. Хотите менять STT без изменений фронтенда.

Open WebUI поддерживает встроенный Local Whisper по умолчанию, а также внешний self-hosted STT через OpenAI-compatible endpoint. Для домашнего прототипа это удобно: интерфейс записи уже готов, а backend можно усложнять позже.

Нужно ли ставить самый большой Whisper

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

Правильный тест — записать 30–50 реальных коротких фраз: ответы по математике, пересказ, русские имена, числа, школьные термины. После этого сравнить, какая модель даёт приемлемое качество с комфортной скоростью.

Open WebUI Voice Mode — самый короткий путь к прототипу

В актуальном Open WebUI голосовые функции собраны в разделе Audio. Voice Mode работает пошагово: пользователь говорит, STT распознаёт реплику, модель отвечает, TTS читает ответ, после чего микрофон снова готов к следующему ходу.

У Voice Mode есть отдельный system prompt. Для ИИ-репетитора это особенно полезно: текстовый профиль учителя может давать подробное объяснение, а голосовой prompt — отвечать кратко.

Пример правил голосового режима
  • Говори максимум 1–3 короткими предложениями за один ход.
  • Задавай только один вопрос за раз.
  • Не сообщай готовый ответ до попытки ученика.
  • Если ученик ошибся — сначала задай наводящий вопрос.
  • После объяснения попроси сформулировать правило своими словами.
  • Не читай длинные списки голосом — показывай их на экране.

Open WebUI также умеет использовать OpenAI-compatible STT/TTS endpoints. Это позволяет оставить интерфейс прежним, но вынести распознавание и синтез речи в отдельные локальные контейнеры или сервисы.

Что выбрать для русского голоса

Для русскоязычного домашнего репетитора в первую очередь стоит смотреть на Silero и актуальный Piper. Они решают одну задачу — локальный синтез речи, но отличаются архитектурой и интеграцией.

Русский в приоритете Silero TTS

В текущей ветке Silero есть русская модель v5.5_ru, несколько голосов, автоматические ударения и обработка омографов. Подходит, когда важен именно русский голос и нужен локальный Python/PyTorch pipeline.

GitHub →
Лёгкий локальный движок Piper

Актуальная разработка находится в OHF-Voice/piper1-gpl. Есть русский ru_RU, ONNX voices, Python API, CLI и собственный HTTP server.

GitHub →
Не используйте старую ссылку на rhasspy/piper как актуальный проект. Репозиторий rhasspy/piper архивирован 6 октября 2025 года; разработка переехала в OHF-Voice/piper1-gpl.

Piper и Open WebUI: важная деталь

Open WebUI умеет работать с OpenAI-compatible TTS endpoint /audio/speech. У собственного HTTP server Piper другой API: синтез выполняется через /synthesize. Поэтому для прямого подключения Piper к Open WebUI обычно нужен небольшой adapter/wrapper, который преобразует OpenAI-compatible запрос в вызов Piper.

Откуда берётся задержка в разговоре

Пользователь воспринимает не «скорость модели», а паузу между своей фразой и первым звуком ответа. Она складывается из нескольких компонентов.

1End-of-speech

Система должна понять, что ребёнок закончил реплику.

2STT

Распознать записанный фрагмент речи.

3LLM TTFT

Дождаться первых токенов ответа.

4TTS first audio

Синтезировать первый кусок голоса.

Поэтому апгрейд только видеокарты для LLM не обязательно уберёт ощущение медлительности. Иногда главная пауза появляется из-за слишком долгого ожидания VAD или TTS, который сначала ждёт весь ответ целиком.

Главный UX-приём: голосовой учитель должен формировать короткие законченные фразы, а TTS — начинать их озвучивать по мере готовности.

Как сделать из голосового чата именно учителя

Голос усиливает главную проблему обычного AI-чата: готовый ответ становится ещё проще получить. Ребёнку даже не нужно копировать текст — можно просто спросить: «Скажи ответ».

Сначала собственная попыткаИИ просит объяснить, что ученик уже попробовал.
Один шаг за разНе диктовать длинное решение целиком.
Учитель чаще спрашиваетДиалог не должен состоять из лекций модели.
Контрольный режим без подсказокРезультат обучения проверяется отдельно.
ПересказПосле объяснения ученик повторяет правило своими словами.
Перенос навыкаСледующее задание должно быть похожим, но не идентичным.

Пример нормального голосового диалога

Ученик

Я не понимаю, как из 42 вычесть 17.

ИИ-учитель

Хорошо. Начнём с единиц. Можно ли из 2 сразу вычесть 7?

Ученик

Нет.

ИИ-учитель

Верно. Что можно сделать с одним десятком из числа 42?

Такой диалог медленнее, чем «42 − 17 = 25», но именно это и есть цель учебного режима.

Какие голосовые режимы имеет смысл сделать

Режим 1Объяснение

Ученик задаёт вопрос. ИИ объясняет короткими фрагментами и проверяет понимание.

Режим 2Устный опрос

ИИ задаёт вопросы по теме и фиксирует ответы без немедленного показа решения.

Режим 3Английский диалог

Разговор по роли, уровню и словарю с переключением языка только при необходимости.

Режим 4Пересказ

Ребёнок пересказывает изученный материал, а система проверяет ключевые мысли.

Режим 5Экзаменатор

Никаких подсказок во время ответа. Анализ и разбор только после завершения.

Режим 6Тренер чтения

Отдельный pipeline проверяет чтение вслух и передаёт результат голосовому учителю.

Голосовому учителю нужна память не о разговорах, а о навыках

Полная история аудио и чатов сама по себе мало помогает обучению. Лучше хранить структурированное состояние: какая тема сейчас изучается, где ребёнок ошибался и сколько помощи потребовалось.

Текущая темаВычитание с переходом через десяток
Уровень помощи2 из 4
Последняя ошибкаЗабывает уменьшить десятки после займа
Следующая цель3 задачи подряд без подсказки

Перед новым голосовым ходом эти данные можно компактно передавать LLM. Это полезнее, чем каждый раз отправлять ей часовой transcript разговора.

Кнопка «говорить» или постоянно включённый микрофон

Для первого домашнего варианта разумнее push-to-talk: нажал кнопку, сказал ответ, отпустил. Такой интерфейс проще отлаживать, меньше ошибочных срабатываний и понятнее с точки зрения приватности.

СтартPush-to-talk

Предсказуемо, просто, минимальные проблемы с VAD и посторонней речью.

После отладкиHands-free

VAD определяет конец фразы, ответ озвучивается, после него микрофон снова активируется.

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

Что проверить, чтобы система действительно была локальной

Микрофон → STTАудио отправляется на собственный backend, а не во внешний speech API.
STT → LLMТранскрипция уходит в локальную модель, если требуется полный local-first.
LLM → TTSОтвет синтезируется Silero/Piper или другим self-hosted движком.
Логи и записиЕсть правило: сохранять аудио, хранить ограниченное время или удалять сразу.
«Web Speech API» не означает автоматически «офлайн». Поведение браузерного распознавания и синтеза зависит от браузера и платформы. Если критично, чтобы детский голос не покидал домашнюю сеть, используйте явно выбранный локальный STT/TTS backend.

Какое железо нужно

Голосовая система добавляет нагрузку поверх LLM, но компоненты не обязательно должны одновременно занимать одну и ту же видеокарту. Например, TTS можно оставить на CPU, а GPU отдать LLM и STT.

Конкретный выбор зависит от размеров моделей и желаемой задержки. Поэтому лучше не дублировать таблицы памяти из других материалов, а измерить весь pipeline на собственном ПК.

Как собрать первый рабочий MVP

  1. Запустить локальную LLM.Например, через Ollama и профиль ИИ-репетитора.
  2. Поднять Open WebUI.Он даст готовый чат, микрофон, Voice Mode и настройки Audio.
  3. Сначала использовать встроенный Local Whisper.Не усложнять архитектуру отдельным STT-сервисом раньше времени.
  4. Создать отдельный voice system prompt.Короткие реплики, один вопрос за раз, запрет на готовые решения.
  5. Подключить локальный русский TTS.Silero или Piper через подходящий API/adapter.
  6. Начать с push-to-talk.Сначала качество диалога, потом автоматический VAD и hands-free.
  7. Замерить задержки отдельно.STT, LLM TTFT и TTS first audio — разные места оптимизации.
  8. Проверить на реальном учебном сценарии.Реальные мини-сессии полезнее синтетического benchmark.
Минимальная логика конфигурации Open WebUI
# STT: встроенный Local Whisper
AUDIO_STT_ENGINE=
WHISPER_MODEL=small
WHISPER_LANGUAGE=ru
WHISPER_VAD_FILTER=true

# LLM: локальный Ollama / другой local backend
# настраивается отдельно в Open WebUI

# TTS: локальный OpenAI-compatible adapter
AUDIO_TTS_ENGINE=openai
AUDIO_TTS_OPENAI_API_BASE_URL=http://LOCAL-TTS:PORT/v1
AUDIO_TTS_OPENAI_API_KEY=local-key
AUDIO_TTS_MODEL=local-tts
AUDIO_TTS_VOICE=teacher

Это не готовый универсальный docker-compose, а схема настроек. Конкретные имя модели, endpoint и voice зависят от выбранного локального TTS-сервера.

Типичные ошибки при сборке

Сразу делают always-on микрофонПоявляются ложные окончания фраз, фоновые голоса и непонятные ошибки.
Используют длинный текстовый prompt без voice-правилМодель начинает читать ребёнку огромные монологи.
Оптимизируют только LLMА основная задержка остаётся в VAD, STT или TTS.
Подключают облачный TTS и называют систему локальнойТекст ответов всё равно покидает домашнюю сеть.
Дают готовый ответ на первую просьбуПолучается голосовой решебник, а не репетитор.
Хранят все аудиозаписи бессрочноДля обучения чаще достаточно метрик и структурированного прогресса.

Частые вопросы

Можно ли сделать голосового ИИ-репетитора полностью без Интернета?

Да. Локальными могут быть запись, STT, LLM, RAG, память ученика и TTS. Интернет понадобится в основном для первоначальной загрузки программ и моделей.

Open WebUI умеет голосовой диалог?

Да. В актуальной документации есть Voice Mode: голос пользователя распознаётся, ответ модели озвучивается, затем микрофон снова готов к следующей реплике. STT и TTS настраиваются отдельно.

Что лучше для русского TTS — Piper или Silero?

Оба подходят локально. Silero интересен актуальными русскими v5-моделями с автоударениями и омографами. Piper удобен как лёгкий ONNX-движок и имеет ru_RU voices. Выбор лучше делать после прослушивания голосов и теста задержки.

Нужен ли wake word?

Не обязательно. Для учебного приложения push-to-talk обычно проще. Wake word имеет смысл для отдельного постоянно работающего голосового устройства.

Можно ли сделать разных преподавателей с разными голосами?

Да. Один профиль может быть математиком с одним TTS voice, другой — преподавателем английского с другим system prompt, базой знаний и голосом.

Нужна ли видеокарта только ради голоса?

Нет. Некоторые STT/TTS-сценарии нормально работают на CPU. GPU чаще нужен для ускорения тяжёлой LLM или более крупного Whisper. Проверять нужно весь pipeline на конкретном железе.

Источники и проекты

Следующий уровень домашнего ИИ

После голоса — фото тетради и проверка домашнего задания

Следующий материал разберёт vision-модели, распознавание детского почерка и безопасную схему «распознать → подтвердить → проверить».