Знакомство с голосовыми ассистентами Home Assistant

Знакомство с голосовыми ассистентами Home Assistant

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

Лично у меня сходу не получилось разобраться в том, как работают эти самые ассистенты. Всё потому, что система состоит из множества взаимозаменяемых компонентов, и поначалу не совсем ясно, как они взаимодействуют, что именно нужно и куда ставить. Эта статья для тех, кто не знаком с голосовыми ассистентами, но уже имеет базовый опыт работы с Home Assistant: понимает, что такое аддоны, немного знаком с Linux или ESPHome и умеет устанавливать интеграции через HACS.

Но прежде чем перейти к ассистентам в Home Assistant, отвечу на вопрос, который может у вас возникнуть:

Зачем, если есть Алиса?

Основная причина создать своего ассистента — это возможность кастомизации:

  1. Персонализированного ассистента можно обучить тому, чего не умеет Алиса. Например, мой Тамагочи умеет отвечать на вопросы вроде: «Где я сейчас?», «Как далеко от дома?», «Я возвращаюсь домой или только вышел?». А ещё он знает, что у меня запланировано в календаре и когда придут заказы с Wildberries. 🙂
    Да, навыки Алисы тоже многое позволяют делать, но с кастомным ассистентом всё проще: достаточно описать нужную информацию в системном промпте, а нейросети сами «переварят» её в понятный ответ.
  2. Синтез речи тоже можно кастомизировать и использовать любые другие голоса.
  3. Так же свой ассистент подойдет параноикам, которые не хотят, чтобы Алиса их постоянно подслушивала. Даже если вы используете облачное распознавание речи, активация по фразе всё равно происходит локально, а софт для колонки — опенсорсный.
  4. Наконец, все компоненты ассистента взаимозаменяемы, что превращает его в своеобразный конструктор.

Но признаюсь честно: для управления умным домом я не использую ни Алису, ни кастомных ассистентов. Всё же я сторонник автоматизации, которая не требует голосового управления.

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

В итоге, если вы готовы собирать своего кастомного ассистента, то первое, с чем нужно разобраться, — это железо.

Что из себя представляет колонка для Home Asssitant?

По железу вариантов великое множество, но основные выглядят вот так:

Железо для голосовых ассистентов

Если у вас завалялась лишняя «Малинка», то можно использовать её. Нужно будет подключить к ней микрофон и динамик, а затем установить Wyoming Satellite и openWakeWord.

Если интересует более бюджетный вариант, то можно взять недорогую колонку на базе ESP32:

M5Stack ATOM Echo

Это по сути уже готовая колонка от M5Stack, остаётся только накатить ESPHome с нужными компонентами и поддержкой microWakeWord. Хотя, если хочется пособирать конструктор, то можно даже спаять DIY-вариант.

Наконец, если ваш домашний сервер находится не в чулане, можно подключить микрофон напрямую к нему.

С основой колонки, надеюсь, всё понятно, давайте теперь разбираться с голосом и обработкой команд.

Софт для ассистента: распознавание, синтез речи и языковые модели

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

Конвейер (pipeline) голосовых ассистентов в Home Assistant

Всё начинается с активации по фразе: колонка постоянно «слушает» происходящее вокруг и ждёт, когда вы произнесете «Окей Набу», «Джарвис» или, например, «Алиса». При этом активация по фразе всегда выполняется локально: либо прямо на самой колонке (с помощью openWakeWord или microWakeWord), либо колонка может отправлять аудиопоток на ваш домашний сервер, где и будет происходить распознавание активационной фразы.

Остальные этапы могут выполняться как локально (на подходящем железе), так и в облаке:

Локальные ассистенты и ассистенты в облаке
Источник: Home Assistant Voice Preview Edition.

Локально

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

Для локального распознавания и синтеза речи могут использоваться различные компоненты. Чаще всего это VOSK или Whisper для распознавания и Piper для синтеза речи — оба доступны в виде аддонов.

Как работают локальные ассистенты Home Assistant

А для обработки диалогов можете развернуть языковую модель, например, Llama, или использовать встроенное в Home Assistant распознавание интентов.

При этом отдельные компоненты необязательно устанавливать на один сервер — их можно «раскидать» по разным железкам. Все локальные компоненты работают как микросервисы, а Home Assistant взаимодействует с этим «зоопарком» через унифицированный протокол Wyoming. По этому протоколу работают не только VOSK и Piper, но и, например, openWakeWord и Wyoming Satellite.

Если вы устанавливаете локальные компоненты в виде аддонов, то Home Assistant сам их подхватит и предложит интегрировать. Но при необходимости можно вручную прописать ссылки на все микросервисы в настройках.

Настройка Wyoming Protocol

Локальные ассистенты дают полный контроль над вашими личными данными и позволяют не зависеть от сторонних сервисов. Однако у них есть свои недостатки: для комфортной работы требуется мощное железо — на слабом оборудовании всё будет работать не так отзывчиво. Кроме того, поддержка русского языка оставляет желать лучшего. Если эти минусы перевешивают для вас плюсы, то можно посмотреть в сторону облачных технологий.

В облаке

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

Как работают облачные ассистенты Home Assistant

Разработчики Home Assistant предлагают в качестве варианта по умолчанию подписку на своё облако, но вы можете использовать и сторонние интеграции.

Например, для распознавания и синтеза речи есть вот такие опции:

А для обработки диалогов можно использовать большие языковые модели:

Их можно комбинировать с локальным распознаванием интентов: например, использовать языковые модели для сложных запросов, а локальное распознавание для простых команд и управления устройствами.

Утренние дайджесты с YandexGPT
Подключаем языковую модель от Яндекса к Home Assistant и настраиваем дайджесты с погодой и списком задач.

Наконец, после того как все аддоны и интеграции установлены, остается только собрать из них полноценного голосового ассистента. Давайте кратко разберём, как это сделать.

Настройка голосового ассистента

Лучше один раз увидеть, чем сто раз услышать 🙂

0:00
/1:04

Надеюсь, мне удалось рассказать про голосовых ассистентов в Home Assistant хотя бы в общих чертах. Я не стал прям уж сильно углубляться и расписывать, какие кнопки нажимать — всё-таки это вводная статья. Но если у вас остались вопросы и вы хотите, чтобы я подробнее показал какие-то моменты, то напишите об этом в комментариях. 👇

Если наберётся достаточно вопросов, то можно будет устроить стрим с ответами на ваши вопросы. Будем считать, что эта статья — лекция, а стрим будет практическим занятием. 🙂

Сам стрим анонсирую позднее в Telegram:

man smart-home
Telegram про умный дом: идеи, девайсы, Home Assistant.

Была ли статья полезна?

Хотите сказать спасибо? Кофе автору — ваша благодарность.

На кофе
Подписка на новые статьи

Уведомления, как только в блоге появится что-нибудь интересненькое.

Подписываясь, вы даете согласие на обработку персональных данных.