Краткое описание проекта

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

В группе состоят 9 образовательных учреждений, у каждого из которых есть свой сайт с виджетом и бот в Telegram. Конечные каналы общения подключены к омниканальной платформе Helpdeskeddy.

В качестве платформы для low-code создания бота и настройки интеграции с Helpdeskeddy была выбрана чат-бот платформа chatme.ai.

Интеграция с Helpdeskeddy

На платформе chatme.ai нет встроенного коннектора к Helpdeskeddy. Поэтому интеграция к Helpdeskeddy реализована внутри бота через HTTP-запросы, а на стороне Helpdeskeddy настроены правила отправки вебхуков. Интеграционные возможности конструктора платформы позволили быстро реализовать подобную интеграцию и в отсутствие встроенного коннектора. 

Создание бота

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

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

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

Fallback — ветка сценария, отвечающая за поведение бота в случае если интент не распознан.

В процессе проектирования решили на уровне платформы разделить бота на две части (NLU бот и бот-коннектор), а также хранить ответы бота в Google таблице для быстрого доступа к редактированию текстовок.

Составляющие системы: 

  • Простейший NLU бот, отвечающий на вопросы названием того интента, который он определил. Фактически этот бот является NLU-сервисом, в который можно по API отправить реплику собеседника и получить обратно название определенного интента. Возможности платформы позволили быстро собрать такого бота, используя таблицу Excel в качестве входного файла.

  • Бот-коннектор, содержащий в себе всю логику, связанную с интеграцией с Helpdeskeddy, и отправляющий HTTP-запросы в NLU бота для определения намерения собеседника.

  • Google таблица с ответами бота.

Такое решение позволило разделить работы над ботом на модули, в результате чего мы смогли: 

  • Отдельно заниматься NLU ботом, собирать его с помощью инструмента генерации конфигурационных файлов из таблиц Excel, быстро менять обучающую выборку по необходимости.

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

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

Основной бот, содержащий скриптовую логику и интеграцию с Helpdeskeddy, имеет следующий алгоритм работы:

  1. Получает по общему API chatme.ai запрос из Helpdeskeddy с новым сообщением.

  2. По API Helpdeskeddy узнает, из какого учреждения пришел собеседник.

  3. Проверяет реплику на один из триггеров автоматического подключения оператора:

    • Нецензурная лексика;

    • Сообщение > 120 символов.

  4. Отправляет реплику собеседника в NLU бота через общий API chatme.ai. Получает в ответ название определенного интента.

  5. Отправляет API-запрос в таблицу, в которой хранится соответствие учреждений, интентов и ответов. В ответ получает ответ на определенный интент для конкретного учреждения, из которого пришел собеседник.

  6. В тех интентах, в которых, помимо текстового ответа, требовалось выполнение более сложного сценария (регулярные выражения, уточняющие вопросы), в ответе бота указана управляющая конструкция вида function < --regex5-- >, или, например, function < --regex_or_operator-- >. 

При наличии подобной конструкции бот вырезает ее из ответа, отправляет ответ и делает сценарий, указанный в конструкции.

  1. В случае если интент требует только текстовый ответ, бот отправляет его собеседнику через API Helpdeskeddy.

В процессе работы главной сложностью было спроектировать решение, которое позволит решить задачу быстро и не выйти за рамки определенного договором бюджета. Удалось уложиться в 5 рабочих дней.

Результаты

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

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