Облачные ассистенты вроде Алисы, Google Assistant и Siri давно стали привычными. Но у всех у них одни и те же слабые места: зависимость от быстрого интернета и риск утечки данных. И речь не только о персональной информации — дома нередко обсуждают темы, которые можно отнести к коммерческой или даже военной тайне. Неудивительно, что многим некомфортно говорить в присутствии микрофона, который каждое слово отправляет куда-то «в облако» (один из наших заказчиков прямо сказал: «никаких Алис в доме не будет»).

На Хабре уже появлялись статьи про попытки заменить Алису на полностью локальные решения. Но почти всегда все сводилось к стандартной схеме: ESP32-микрофон → Home Assistant → intent recognition. Такая связка работает, но до действительно «умного» ассистента ей далеко.

Мы пошли дальше и собрали свой голосовой ассистент, который:

  • работает локально, на доступном и нетребовательном «железе»;

  • использует wake word, идентификацию человека по голосу, а также нейросети и эмбеддинги, чтобы понимать команды в свободной форме;

  • при этом отвечает голосом, без обращения к облаку.

Что такое wake word и эмбеддинги

Wake word — это ключевая фраза, по которой ассистент «просыпается» (например, «Окей, Google» или «БАРИ!»). Система постоянно слушает, но реагирует только на это слово.

Эмбеддинги — это способ представить слова в виде векторов чисел, чтобы нейросеть могла сравнивать выражения и находить близкие по смыслу. Благодаря этому ассистент понимает, что «вруби свет» и «включи лампу» означают одно и то же.

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

Результат — новая версия Ассистента BARY, которая понимает естественную речь, справляется с ошибками распознавания и по-прежнему работает полностью оффлайн.

Как все начиналось

Первая версия Ассистента BARY появилась, можно сказать, из чистого любопытства — как инженерный эксперимент: можно ли построить голосового помощника, который работает полностью офлайн, без интернета и облачных API.

Архитектура получилась простой и понятной:

  • wake word активировал систему по ключевому слову «БАРИ»;

  • VOSK отвечал за распознавание речи (Speech-to-Text);

  • эмбеддинги из LLM (предобученной языковой модели) превращали текст в вектор;

  • выполнялся поиск ближайшего по смыслу совпадения среди заранее описанных команд;

  • TTS-движок (Text-to-Speech) озвучивал ответ, чтобы ассистент мог подтверждать команды и говорить с пользователем.

Ассистент действительно работал: можно было сказать «включи свет на кухне» — и реле срабатывало. Он даже понимал синонимы вроде «вруби» или «подсветку сделай».

Но довольно быстро проявились ограничения этой схемы:

  • готовые эмбеддинги из LLM нельзя было адаптировать под конкретный дом или манеру речи;

  • база команд оставалась статической — ассистент не понимал, что «в спальне темно» означает то же самое, что «включи свет»;

  • и главное — он не мог обучаться, а значит, не становился умнее со временем.

Ассистент BARY работал стабильно и предсказуемо, но в какой-то момент стало ясно: чтобы по-настоящему «понимать» речь, ассистенту нужна своя обучаемая модель, а не внешние эмбеддинги.

Что изменилось: новая версия Ассистента BARY

Во второй версии Ассистента BARY мы полностью переработали ядро. Теперь у него есть собственная модель эмбеддингов — компактная embedding model на основе Transformer. Она не просто создает числовые векторы для слов, а учится понимать взаимосвязи между командами, формируя собственное векторное пространство смыслов.

Модель небольшая — около 5 млн параметров и 128-мерный вектор на выходе. Этого достаточно, чтобы различать и связывать десятки тысяч фраз. Главное — она работает целиком на Orange Pi 5 Pro, без внешних API и без интернета.

Обучение

Теперь обучение модели возможно прямо локально.

  • При небольшом наборе (до 5 000 команд) процесс занимает примерно 10–15 минут.

  • На полном датасете (около 16 000 команд) — чуть больше часа.

В будущем обучение, возможно, будет выноситься в облако — но только как опция. Само распознавание останется полностью локальным, и количество команд почти не влияет на скорость отклика.

Результат

Теперь BARY не просто ищет совпадения по вектору, а интерпретирует сказанное в рамках огромного набора команд и их вариантов. Фразы вроде «в спальне душно», «тут что-то жарковато» или «открой шторы» срабатывают потому, что модель обучена на широком наборе фраз — включая разговорные, эмоциональные и даже не совсем литературные формулировки.
Модель эмбеддингов размещает близкие выражения рядом и уверенно находит нужное действие.

И все это работает на обычном контроллере стоимостью около 15 тысяч рублей.

Orange Pi 5 Pro
Orange Pi 5 Pro
ESP32-S3-BOX
ESP32-S3-BOX

Как это работает

Полная цепочка выглядит так:

Wake Word → STT (VOSK) → Embedding Model → поиск по сходству → TTS (Piper) → действие / ответ.

Что здесь происходит

  • Wake Word активирует систему по ключевой фразе — «БАРИ».

  • VOSK преобразует речь в текст (Speech-to-Text).

  • Embedding Model создает векторное представление команды, обученное на большом наборе примеров. Она не просто переводит слова в числа, а строит собственное «пространство смыслов», где «вруби свет в зале», «включи потолок на кухне» и «сделай поярче, а то темно» — близкие выражения.

  • Далее используется поиск по сходству — команда сравнивается с базой векторов, и выполняется наиболее подходящее действие.

Если нужен голосовой ответ, включается Piper, который синтезирует речь локально. Голосовые ответы применяются, когда ассистент сообщает данные или уточняет действия: «Температура в спальне 22 градуса» или «Закрыть шторы?»

В остальных случаях Ассистент BARY отвечает короткими звуковыми сигналами — как в Алисе или Google Home. Это быстрее, понятнее и не раздражает при частом использовании.

Как обучается Embedding Model

Модель обучается на автоматически сгенерированном датасете из пяти уровней:

  1. Базовые команды — включи/выключи, яркость, цвет, режим и т. п.

  2. Синонимы — генерация вариантов через перефразирование.

  3. Склонения и формы — вариации по помещениям, контексту и типичным ошибкам STT. Например, если VOSK часто путает «кухня» и «в кухне» или «светло» и «свет», эти варианты тоже добавляются в датасет.

  4. Эмоциональные и разговорные формулировки — чтобы ассистент понимал естественную речь, а не только строго заданные команды.

  5. Контекстные короткие фразы — с памятью до 20 секунд, что позволяет понимать уточнения вроде «а потусклее».

Дисклеймер. Эмоциональные (и нецензурные) варианты добавились не сразу — об этом вспомнили, когда команд уже было «овердофига». После генерации набор команд вырос примерно в 2,5 раза, но именно эти фразы значительно повысили устойчивость модели к живой речи.

В итоге наш примерный датасет охватывает 49 устройств, 18 помещений и ≈ 16 000 команд, из которых более половины содержат эмоциональные или разговорные формы.

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

Почему это важно

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

Раньше локальные решения выглядели одинаково: Home Assistant, микрофон и поиск совпадений по словарю. Такой подход позволял включать свет или розетки, но любая фраза вне списка ставила систему в тупик.

Теперь Ассистент BARY действительно интерпретирует речь. Он понимает естественные формулировки вроде:

  • «в детской душно» → включить приточку сильнее;

  • «надоел трек» → переключить музыку;

  • «жарковато на кухне» → усилить работу кондиционера;

  • «пора спать» → выключить свет во всей квартире.

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

Визуализация эмбеддингов
Визуализация эмбеддингов

Кроме того, благодаря идентификации пользователя по голосу ассистент теперь может подстраиваться под каждого человека. Это не только про музыку — система запоминает личные предпочтения: кому комфортно при +22°, а кому при +25°, кто любит приглушенный свет, а кто потолочный на максимум. Такая персонализация решает «вечную войну» «мне холодно — мне жарко» и делает автоматизацию по-настоящему удобной.

В перспективе этот механизм можно развивать бесконечно. Ассистент сможет добавлять продукты в личный список покупок, напоминать о привычках, предлагать сценарии вроде «пора спать, выключить свет?». Функциональность, которую крупные компании реализуют через облачные профили пользователей, BARY делает локально — прямо у вас дома.

По сути, теперь это не просто офлайн-распознавание речи, а понимание контекста и поведения.

Результаты и планы

Сегодня Ассистент BARY — уже не прототип, а стабильная рабочая система, которая управляет умным домом полностью офлайн. За последние месяцы мы довели архитектуру до состояния, когда ей можно пользоваться каждый день.

Текущие результаты

  • Скорость обработки команды:

    — около 150 мс на Orange Pi 5 Pro;
    — менее 20 мс на MacBook M1 Max при тестах.

  • Контекстная память: около 20 секунд — ассистент понимает уточнения вроде «а потусклее», если их произнести в течение этого времени.

  • Покрытие: 100 % подключенных устройств (49 устройств, 18 помещений).

  • Работа без интернета: система полностью автономна — от wake word до озвученного ответа.

  • Реакция на естественную речь: уверенно обрабатывает синонимы, разговорные и эмоциональные формулировки, включая нецензурные варианты.

Что дальше

  • Дальнейшее улучшение поддержки протокола Yandex Smart Home API — не для подключения к облаку, а для совместимости.
    Это позволит встроить Ассистент BARY в любые системы, которые уже умеют работать с устройствами Яндекса, сохранив локальную логику.

  • Развитие Voice ID — персональные сценарии для членов семьи, запоминание предпочтений по голосу.

  • Генерация датасетов — добавляем реалистичные диалоги, короткие уточнения и естественные формы речи.

  • Голосовые ответы на базе Piper — улучшение тембра, пауз и скорости, чтобы ассистент звучал естественнее.

  • Облачное обучение при локальном распознавании — пользователи смогут обновлять модели без тяжелого оборудования, при этом все распознавание останется офлайн.

  • Предиктивная аналитика — следующий шаг к действительно «умному» дому.
    Ассистент учится замечать закономерности и предлагать действия заранее.
    Например, если хозяин каждый вечер в 22:30 выключает свет и включает кондиционер, BARY сможет предложить это сам, без команды.

    Или другой сценарий: в помещении установлены датчик движения и реле, но нет правил для автоматического включения света. Система анализирует поведение, видит, что свет включается вскоре после входа, и предлагает сделать это автоматическим правилом.

Проблемы с микрофонами

Из всех узких мест у голосовых ассистентов самое непредсказуемое — звук. С нейросетью можно разобраться, с распознаванием — подружиться, а вот стабильное качество микрофонов остается лотереей.

Мы пробовали разные варианты:

  • Ноутбук использовался только на этапе разработки и тестов.

  • Планшеты, встроенные в стены как стационарные панели управления, стали полноценными «ушами» системы. Но тут есть нюанс: когда планшет стоит в корпусе или за стеклом, чувствительность микрофона падает в разы — голос из дальнего угла комнаты он уже не слышит.

  • ESP32-S3-BOX с двумя микрофонами показал себя лучше, но почти без шумоподавления и с сильной зависимостью от расстояния до говорящего.

  • USB-микрофоны и китайские массивы — результаты непредсказуемы: в одной комнате работают отлично, в другой — плохо.

Пока универсального решения нет: где-то помогает усиление на уровне драйвера, где-то — дополнительная фильтрация шума на стороне VOSK.

Мы решили обратиться к сообществу: какие микрофоны, модули или схемы реально работают для голосовых ассистентов в «боевых» домашних условиях?

Если вы делали похожие проекты — поделитесь, что выбрали и почему.

Возможно, вместе мы соберем список проверенных решений и избавим будущих энтузиастов от этой боли.

Планшет в настенном креплении
Планшет в настенном креплении

Заключение

Ассистент BARY начинался как эксперимент — можно ли сделать голосового помощника, который работает без интернета и при этом действительно понимает команды. Первая версия доказала, что это возможно. Вторая показала, что локальный ассистент может быть не просто «реактивным», а по-настоящему гибким и адаптивным.

Теперь у Ассистента BARY есть собственная модель эмбеддингов, автогенерация команд, понимание естественной речи и учет контекста. Он не подключен к облаку и не отправляет данные наружу — все обрабатывается локально.

Можно сказать, что мы перенесли «думалку» внутрь самой модели: теперь именно она отвечает за интерпретацию фраз и выбор нужного действия. Никакой магии — просто аккуратная работа с языковыми представлениями.

Ассистент BARY пока не распознает все подряд и не способен мыслить, но с задачами управления домом он справляется отлично. Если Алиса живет в облаке, то BARY — у вас дома.

А если дома есть свободный компьютер с нормальной видеокартой — можно подключить локальную LLM-интеграцию. В этом режиме ассистент начнет отвечать на общие вопросы и вести простые диалоги — тоже полностью офлайн, без отправки данных наружу.

Пусть BARY пока не рассуждает в полном смысле, но уже уверенно понимает, чего вы от него хотите — и теперь способен не просто реагировать, а действительно помогать.

Комментарии (35)


  1. Goron_Dekar
    13.11.2025 07:22

    Реально нужно, молодцы!

    А как бы попробовать сие изделие дома? У меня x86 сервер, хотел бы на нём развернуть и потестить c ReSpeaker USB Mic Array.


    1. augap Автор
      13.11.2025 07:22

      Добрый день, скоро объявим о публичном тесте. Можете свой опыт рассказать про этот микрофон?


      1. Goron_Dekar
        13.11.2025 07:22

        Вообще нет пока что опыта. Заказал, лежит, пылится. Попробовал его на стандартном whisper - отлично работает по всей комнате с работающим роботом пылесосом, но и настольный микрофон справился на ура. Надо более сложную задачу.

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


        1. augap Автор
          13.11.2025 07:22

          Спасибо, закажем, проверим)


          1. kostoms
            13.11.2025 07:22

            Респикер (оригинальный) стоит дороже какой-нибудь веб-камеры с микрофонным массивом (напр EMEET 1080P Webcam) - а с камерой получаешь сразу два устройства за меньшие деньги. Или можно попробовать поискать хакабельную умную колонку - там же тоже микрофонный массив для тех же целей уже есть, и выйдет опять же дешевле респикера, но плюс оно будет уже с динамиком, корпусом и питанием.


      1. slavius
        13.11.2025 07:22

        Спасибо. Можно будет бесплатно пользоваться?;)


        1. augap Автор
          13.11.2025 07:22

          Боюсь что нет)


          1. Goron_Dekar
            13.11.2025 07:22

            А купить и пользоваться? (не подписки и прочая муть, а именно бессрочная лицензия)


            1. augap Автор
              13.11.2025 07:22

              Так и будет, но вот с обучалкой в облаке пока не совсем уверены, ее все таки поддерживать и оплачивать придется. Если устройств не много, то локально можно обучать, если много, то с ростом датасета время обучения растет в геометрической прогрессии.


              1. kostoms
                13.11.2025 07:22

                А что будет продаваться - обученная модель или софт?


  1. deewvn
    13.11.2025 07:22

    прикольно что сделали свою модель и без внешних апи. нужно будет попробовать


    1. augap Автор
      13.11.2025 07:22

      Все внешние апи стали внутренними)


  1. resonline
    13.11.2025 07:22

    Отличная идея, как быстро крупные игроки это примут себе? ) А только на Orange Pi 5 Pro разворачивается? Какое "железо" еще подойдет на минималках?


    1. augap Автор
      13.11.2025 07:22

      Цифры указанные в статье это на модели под обычный CPU, у нас еще конвертация именно под RKNN есть, но из-за постоянного переобучения в процессе разработки я перестал конвертить, но так должно быть еще быстрее. Значит любой подобный одноплатник подойдет. Еще хотим на WB8 протестировать, но позже, как окончательный датасет соберем.


  1. empenoso
    13.11.2025 07:22

    На Хабре уже появлялись статьи про попытки заменить Алису на полностью локальные решения.

    Видимо про мою статью https://habr.com/ru/articles/930340/


    1. augap Автор
      13.11.2025 07:22

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


      1. virex
        13.11.2025 07:22

        потом стали появляться статьи на схожую тематику и полегчало)

        Все на этом помешались, и я попробовал на старом железе. https://habr.com/ru/articles/914392/
        У вас действительно получилось. Теперь "умный дом" действительно станет умным.


        1. augap Автор
          13.11.2025 07:22

          Почитал, очень много теории и много разных вариантов, но так и не понял прототип получилось сделать?


          1. virex
            13.11.2025 07:22

            Консольный прототип - да. Но модель и железо настолько слабые, что результат очень непредсказуем.


  1. artmel
    13.11.2025 07:22

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

    Идея неплоха и реализуема вполне на таком крайне низкопроизводительном оборудовании. Но почему вы не хотите добавить нейроускоритель к малинке (40-70$) и уже на нем запустить реальную llm типа зафайнтюненую вами на вашем датасете gemma-4b которая даст реальное распознавание даже незнакомых или нестандартных команд и резко уменшит ошибки.


    1. Varowlord4
      13.11.2025 07:22

      А вот гибридный подход был бы интересен. Векторный поиск для 99% команд управления (быстро и надежно), и если совпадений не найдено - запрос уходит на локальную LLM для более сложного разбора или диалога. Так можно получить лучшее из двух миров


      1. augap Автор
        13.11.2025 07:22

        В статье про это тоже написано, но буквально одно предложение.


    1. augap Автор
      13.11.2025 07:22

      На Оранже есть НПУ. И модели LLM сконвертированные под RKNN он тянет, на простые вопросы вполне отвечает, но под умный дом получается слишком большой запрос и долгая реакция.


      1. artmel
        13.11.2025 07:22

        внешние платы на порядки мощнее.

        а стоят не существенно.


        1. augap Автор
          13.11.2025 07:22

          если речь про Coral то Оранж мощнее) Сравните спеки. Оранж 5 если что


          1. artmel
            13.11.2025 07:22

            нет . речь про The Hailo-8 edge AI processor, featuring up to 26 tera-operations per second


  1. Varowlord4
    13.11.2025 07:22

    Проблема с микрофонами - самое честное и самое печальное место в статье. Вся эта прекрасная локальная нейросеть, все эмбеддинги и VOSK могут быть сведены на нет плохим железом за 10 долларов. Получается что самая непредсказуемая и критичная часть системы это не софт, который можно допилить, а аналоговая часть, где до сих пор царит магия и китайская лотерея


    1. augap Автор
      13.11.2025 07:22

      Выше подсказали про микрофон, судя по описанию должно быть хорошо. Заказали, протестим.


  1. lil_master
    13.11.2025 07:22

    ассистент не понимал, что «в спальне темно» означает то же самое, что «включи свет»
    «пора спать» → выключить свет во всей квартире.

    "По факту у вас не LLM получилась а просто векторная база по которой вы выбираете ближайшее совпадение. "

    По-моему тут всё очевидно, есть люди для которых "холодное" - это "горячее", а "светло" - это "темно".
    Просто в статье прямым текстом не говорится о том, что проблема не в ассистенте и не в ЛЛМ, а в субъективности некоторых человекоподобных существ, которые привыкли общаться только намеками и хотят разговаривать намеками даже с техникой. Их ЛЛМ не поймёт, зато векторная база для идентификации их персональной логики - самое то.
    Мне интересно, если в комнате темно и тут заходит некто и восклицает "КАК СВЕТЛО!" - ЛЛМ должна включить свет? или двинуть некту электрочайником для снижения затрат на дообучение?


    1. augap Автор
      13.11.2025 07:22

      к сожалению предсказуемость человечкой тупизны пока не можем обработать) но поржал, спасибо)


  1. aladkoi
    13.11.2025 07:22

    Я делал такую локальную систему по поиску данных в базе голосом, при чем предобученная локальная llm определяла самой отвечать или отправить запрос на MCP сервер. Здесь реально нужен хороший микрофон с шумоподавлением и настроенный vad, который выделяет и пишет голос , и передает его затем системе распознавания речи. Vosk мне не понравился качеством распознавания. Использовал систему распознавания в текст gigaAM. При сложном словосочетании удалось добиться распознавания речи на 90% с первого раза. https://youtu.be/i5GxE5GvvRE?si=wGDk0lqHZiY38TLi


    1. augap Автор
      13.11.2025 07:22

      Она локальная? Стриминг голоса в реальном времени поддерживает? Мы все огрехи VOSK обошли искажением самих команд, в статье об этом написано


      1. aladkoi
        13.11.2025 07:22

        Все локальное. В этом весь смысл. Стриминг в реальном режиме. Для этого работает vad


        1. augap Автор
          13.11.2025 07:22

          О, спасибо, обязательно посмотрим. Я все жду когда в виспере появится поддержка стриминга


  1. rvs2016
    13.11.2025 07:22

    Я так и не понял: что мне надо в моей фряхе запустить для распознавания речи из mp3-файла, в который эту речь с микрофона должна записать некая (кстати какая именно) программа, чтобы я дальше мог распознанные из речи текстовые файлы анализировать уже своими программами, чтобы мне не приходилось обращаться для распознаваний и для анализа текстов за пределы "локальной" системы?

    ps: Даже если эти программы запустить не во фряхе (ну для простоты читайте - не в линуксе), то хотя бы на винде, а с виндою-то я со стороны фряхи уж как-нибудь своими программами повзаимодействую.