Хабрахабр

Под капотом у чат-бота: что умеет и как работает RocketBot

RocketBot — это программируемый чат-бот, который интегрируется с VK, Telegram и Bitrix24. Сегодня мы расскажем об инфраструктуре и других технологиях, на которых он построен.


/ фото Darryl Braaten CC BY-SA

Инструментарий

Разрабатывая RocketBot, мы делали упор на скорость разработки и прототипирования. По этой причине система написана на Python, а в качестве базы данных выбрана MySQL.

Это означает, что у языка большое комьюнити и нескончаемое количество справочной литературы: книг, сайтов, курсов и исходников. На сегодняшний день Python занимает третье место в рейтинге TIOBE по популярности. Множество книг этому языку посвятило издательство O’Reilly, можно выделить «Автостопом по Python» и «Машинное обучение с Python». Например, на GitHub можно найти сборники лучших практик по разработке на Python, а на StackOverflow открыто большое число тредов.

Примерами могут быть PyTorch и SciKit-learn — это мощные инструменты, которые упрощают обработку естественной речи, диалогов и скриптов. Помимо большого количества источников, одним из главных преимуществ Python является разнообразие библиотек и функциональных ML-фреймворков.

Дополнительно мы внедрили scikit-learn, который выполняет предварительную обработку данных, а также pymorth2 и gensim (для работы с морфологией и векторизации текстов соответственно). В частности, для разработки моделей обучения мы использовали PyTorch, так как он обладает широкими возможностями для прототипирования. Еще мы испытываем DeepPavlov — оцениваем его возможности.

Что касается базы данных, то её мы выбирали из соображений «не усложнять». MySQL также остается самой популярной из мощных серверных БД. По этой причине в интернете о ней можно найти большое количество информации (например, есть подробный мануал от разработчиков), а обширное комьюнити всегда подскажет решение проблемы, если таковая возникнет. Плюс MySQL предлагает широкую функциональность, хотя и не следует всем SQL-стандартам.

Что умеет наш чат-бот

Наш чат-бот позволяет настроить автоматические ответы на вопросы пользователей (например, для реализации FAQ), а также автоматизировать рутинные операции (например, опросы) при помощи скриптов.

В первом случае администратор самостоятельно прописывает суть вопроса и ключевые слова, на которые бот будет реагировать. Система способна работать с двумя типами вопросов: кастомными и стандартными. Алгоритмы RocketBot оценят смысл фразы и найдут ответ по семантической близости. Перечислять все ключевики необязательно.

В нем выделяются главные компоненты (PCA) и ищется ближайший по расстоянию вариант в базе данных. Для оценки семантической близости используется векторное представление запроса. В нашем случае, лучше всего себя показала метрика cosine_similarity(sciki-learn).

Он просто выбирает стандартный вопрос из списка — далее бот сам понимает, о чем его будут спрашивать. Во втором случае, владельцу бота не нужно ничего настраивать. Нас не устраивает зависимость от сервиса Google, которая вносит задержку в синхронизацию данных. Сейчас для выделения стандартных тем мы используем сервис Dialogflow, но будем менять ее на собственную реализацию. Отметим, что пользователь может в любой момент изменить стандартный шаблон, сформировав собственный вариант фраз и назначив соответствующее действие.

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

Для составления скрипта используются три типа блоков:

  1. Блок вопроса — задает вопрос пользователю и пишет в переменную ответ на него.
  2. Блок условий — реализует ветвление скрипта.
  3. Блок проверки переменных — управляет маршрутом пользователя по скрипту.

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


Пример настроек с выходом из скрипта при ответе «Нет» на вопрос «Вам есть 18 лет?»

Мы самостоятельно проведем верификацию алгоритма и проведем первичную настройку — обычно это занимает несколько часов. Но при всем при этом мы можем помочь клиенту настроить его скрипты по блок-схеме, которую он нарисует в графическом редакторе вроде xmind или draw.io.

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

Современные системы ИИ по-прежнему подвержены ошибкам, а при создании бизнес-сервисов нельзя, чтобы бот реагировал на 80% вопросов одним образом, а на остальные 20% — другим. Мы ограничили спектр задач интеллектуального решения из-за потенциальных сложностей с непрогнозируемостью поведения.

Со временем мы хотим реализовать новую версию на базе LSTM-сетей, использующую обучение с подкреплением (reinforcement learning). Для реализации системы обработки естественной речи пока используется очень простой алгоритм поиска. Скорее всего новая реализация будет основана на уже упомянутом фреймворке DeepPavlov.

RocketBot умеет автоматически создавать лид и задачу в CRM (Битрикс24) после выполнения скриптов. Еще одной функцией нашего бота является интеграция с CRM-системами. Все работает по стандартным протоколам и через основной API CRM-систем в виде HTTP-запросов и данных в JSON. Бот пересылает все, что написал пользователь, плюс информацию о нем из мессенджера или социальной сети.

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


/ фото spencer cooper CC BY-ND

Инфраструктура, на которой построен чат-бот

Все наши сервисы работают в облаке «ИТ-ГРАД» — там размещаются frontend-серверы, базы данных и серверы приложений. В целом облачная инфраструктура помогает нам оперативно масштабировать свои сервисы, справляться с ростом нагрузки и внезапными скачками трафика. По этой причине в дальнейшем мы планируем только расширять свое присутствие в облаке.

Хотя это и приводит к возникновению задержек при ответе на вопрос в одну–две секунды, такая архитектура обладает большим потенциалом к масштабированию и позволяет нам модифицировать отдельные блоки, не затрагивая другие. Сам бот представляет собой набор из пяти микросервисов, которые взаимодействуют друг с другом по HTTP–JSON (все внутренние коммуникации между сервисами проводятся в защищенном сегменте). Например, обновление микросервиса поиска в FAQ не затронет микросервис интеграции с CRM.

Но даже на ней обучение происходит не очень быстро. Для тестирования и создания моделей машинного обучения и нейронных сетей мы используем Nvidia Tesla M40 16GB. По этой причине в некоторых случаях (например, для векторизации датасетов) мы использовали виртуальные машины с 64 CPU. Своды данных, которые мы используем для задач обработки естественного языка, исчисляются десятками гигабайт.

Дополнительное чтение — посты из Первого блога о корпоративном IaaS:
Из нашего Telegram-канала:

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»