Ирина, голосовой помощник — теперь и со вкусом GPT-3

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

"Лама... Альпака...Чатгпт..." - раздавалась в уютненьком чатике по Ирине.

Хабр был не лучше - статьи по работе с GPT множились как грибы, а в комментах раздавались возгласы в духе "Дайте мне голосового помощника, с которым можно болтать!"

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

Тем не менее, и меня заинтересовало, насколько весело будет именно болтать с GPT, но самому в коде и платном API-доступе разбираться не хотелось. Но сегодня утром меня снабдили и примером, и ключиком...

---

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

  • Полностью оффлайн SpeechToText и TextToSpeech

  • Поддержка плагинов

  • Готовые команды "таймер", "погода" и ряд прочих. Поддержка HomeAssistant.

  • Поддержка работы в клиент-серверном режиме - сервер + куча микрофонов + Телеграм-клиент, например.

Расскажу, что улучшилось за прошедший год с момента прошлой статьи.

TL;DR> Добавлен плагин для общения с GPT-3 нейросетью. Сделан пакет упрощенной установки под Windows - "скачай и запусти". Сделано два веб-клиента - один распознает слова прям в браузере (тяжелый), другой отправляет весь звуковой поток на сервер (легкий) - так что можно запускать клиенты, например, на смартфоне. Добавлен TTS Silero v3 - имхо, лучшее озвучивание доступное в открытом доступе. Сделан докер-образ для быстрого запуска Ирины без установки зависимостей. Добавлено нечеткое распознавание фраз. Обновлена VOSK-модель распознавания голоса на специально натренированную для Ирины.

Общение с GPT-3

Благодаря коллеге, который поделился кодом и ключом доступа, я сделал небольшой плагин-болталку. Запускается по ключевой фразе "поболтаем", и дальше сохраняет контекст разговора. Все, что идет в разговоре, отправляется в OpenAI сеть text-davinci-003, результат озвучивается пользователю.

Честно, получилось как минимум забавно. Я спросил как дела. Спросил про новости; получил некий общий ответ про Россию, США и Китай. Попросил сочинить сказку - выдалась долгая история про дедка и бабку; смысла в ней было немного, но связность присутствовала.

(Естественно, интеграция сделана отдельным плагином, который можно включить или отключить.)

Упрощенная установка под Windows

Под давлением общественности, которая не хочет ставить Python, GIT, качать и ставить зависимости, я нашел, как сделать готовый переносной вариант Python и GIT и запускать все одним BAT-файлом.

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

Веб-клиенты

Ну, поскольку Ирина в режиме сервера и так начала предоставлять Webapi, возник вопрос - а чего бы не запилить не только Python-клиент, но и веб-интерфейс.

Собственно, сказано - сделано.

Получилось два варианта. Один - когда я нашел где-то онлайн-вариант VOSK, и прикрутил туда распознаватель. Такая конфигурация распознает звук прямо в браузере (тяжелая штука), но отсылает на сервер только распознанный текст.

Над вторым вариантом пришлось помучаться, но он легче для исполнения в браузере. Там браузер устанавливает сокет-соединение с сервером, и гоняет ему весь WAV-поток данных, а VOSK на сервере распознает. Самым сложным было около года назад найти простую библиотеку, которая бы позволила не просто записывать звук, а гнать его на сервер в потоковом режиме. Я использовал opus-recorder, но пришлось вручную дописать фрагмент, чтобы WAV отправлялся кусками (ну не фронтендер, извините). Зато заработало.

Оба варианта сейчас доступны, один по адресу /webapi_client , другой по /mic_client

TTS Silero v3

На Хабре был анонс очень классного открытого синтезатора текста от Silero. Из хорошего - крайне быстро работает на CPU.

Собственно, сабж был прикручен к Ирине, и теперь при желании можно наслаждаться качественными голосами. (Только процессор, если это ставить, рекомендуется помощнее)

Докер образ

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

Так же я не до конца разобрался с arm-вариантом докера (его нет), а он нужен для Raspberry. Так что если есть желающий поддерживать периодические релизы Ирины в формате Докера - буду очень рад.

Нечеткое распознавание команд

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

Также очевидно, что вариантов нечеткого сравнения много, и желательно давать пользователю выбор, каким именно пользоваться

Соответствующий API появился в Ирине с версии 7.5.1 - можно написать плагин, который будет осуществлять нечеткое сравнение в определенном контексте (поиск наиболее подходящего варианта команды).

Сейчас доступны два варианта:

  • Мой на базе пакета thefuzz - сравнения строк на основе дистанции Левенштейна.

  • Плагин от modos189, который работает на сравнении через scikit-learn.

Я в основном пользуюсь своим же thefuzz - могу сказать, что распознает команды теперь лучше.

Специальная STT голосовая модель для Ирины

Вообще, распознаватель VOSK можно дотренировать на конкретных наборах фраз; но неспециалисту вроде меня это было сделать не так просто.

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

Собственно, в телеграм-канале мы обсудили, что это за фразы должны быть (имена помощника, "таймер", "погода", числительные и пр.), а затем отправили готовый список. Коллега очень быстро закинул нам уже оптимизированную модель (спасибо!), которая сейчас уже залита на Гитхаб.

----

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

  • опенсорс реализация голосового помощника, где всё можно запустить оффлайн, без привязки к облакам

  • простоту реализацию плагинов - желающие действительно дописывают свои плагины, и даже ими делятся; да и у меня на реализацию плагина-болталки с GPT ушло что-то около часа.

И это лично меня - радует.

Конечно, хотелось бы доработать документацию, чтобы она была попонятнее, но до всего, увы, руки не доходят :)

Github проекта

Источник: https://habr.com/ru/post/725066/


Интересные статьи

Интересные статьи

tl;dr: используйте инструкцию ${placeholders?} для выдачи ошибки при пропуске параметра и объединяйте команды оболочки с помощью &&, чтобы упростить и обезопасить их копирован...
Одна из самых важных (на мой взгляд) функций в Битрикс24 это бизнес-процессы. Теоретически они позволяют вам полностью избавиться от бумажных служебок и перенести их в эл...
История сегодня пойдёт про автосервис в Москве и его продвижении в течении 8 месяцев. Первое знакомство было ещё пару лет назад при странных обстоятельствах. Пришёл автосервис за заявками,...
Как-то у нас исторически сложилось, что Менеджеры сидят в Битрикс КП, а Разработчики в Jira. Менеджеры привыкли ставить и решать задачи через КП, Разработчики — через Джиру.
Компании переполнили рынок товаров и услуг предложениями. Разнообразие наблюдается не только в офлайне, но и в интернете. Достаточно вбить в поисковик любой запрос, чтобы получить подтверждение насыще...