Знакомство с VK Assistant
Сессия VK Assistant
Примечание
Перед работой с данным разделом желательно ознакомиться с вводной статьей про VK Assistant и разделом «Основные понятия системы».
Общение VK Assistant с пользователем ведётся в парадигме вопрос-ответ, где VK Assistant задаёт вопрос, ожидает ответ от пользователя, обрабатывает факты из ответа, а затем запрашивает дополнительные факты либо завершает сессию.
Ход сессии:
-
Начало сессии. По умолчанию сессия всегда начинается с выполнения действия askParameter (спросить факт) факта system.fact.ui.usertext. Это системный факт, в котором будет храниться сообщение, написанное пользователем.
-
Сессия пребывает в состоянии ожидания «ответа» от пользователя. Единственный способ в VK Assistant «ожидать» чего-либо от пользователя — это спросить какой-либо факт. Написать что-либо VK Assistant пользователь может только тогда, когда VK Assistant этого ждёт, т.е. сессия находится в состоянии ожидания ответа.
-
Пользователь пишет сообщение, начинается расчёт текущего персептрона, выполняются действия, указанные в активированных респонсах. После их выполнения выполняется следующая итерация расчёта персептрона.
-
Цикл «расчёт персептрона — выполнение действий» повторяется до тех пор, пока сессия не завершится (по инициативе пользователя или VK Assistant) или пока сессия не зайдёт в тупик. Т. е. после очередной итерации расчёта персептрона состояние сессии не поменяется (обычно это следствие ошибки в настройке, т.к. в общем случае диалог с пользователем должен к чему-то вести). Начальный персептрон указывается в конфиге default_perceptron (Административная панель VK Assistant, раздел Настройки → Конфиги).
Среди доступных действий, которые можно указывать в респонсах персептронов есть:
-
showInfo — показать в чате сообщение;
-
askParameter — спросить у пользователя какой-либо факт;
-
setParameter — задать факт указанным значением;
-
clearParmeter — очистить факт;
-
setPerceptron — задать персептрон (в следующей итерации после выполнения этого действия уже будет рассчитываться указанный персептрон).
-
-
В ходе сессии в системе появляются события, на которые могут быть подписаны агенты (подпрограммы), которые могут выполнять вспомогательные действия, в том числе изменять ход сессии (например, когда пользователь в ответ на вопрос VK Assistant даёт неожиданный ответ, с помощью агента возможно сделать классификацию текста в попытке обнаружить смену контекста или при последовательном появления N событий об ошибке классификации перевести диалог на оператора).
Создание примитивного сценария и начало работы сессии
Чтобы создать сценарий:
-
Скачайте скилсет с примером сценария.
-
Перейдите в административную панель VK Assistant в раздел Скилсеты и нажмите на кнопку Импорт из файла:
-
Выберите файл скилсета и нажмите на кнопку Импорт.
-
Начните новую сессию с персептрона этого скилсета.
Это можно сделать двумя способами:
-
Перейдите в Настройки → Конфигурации → найдите конфиг default_perceptron → нажмите на пиктограмму :
В отобразившейся форме укажите для поля value значение demo.echolalia.perceptron.primary и нажмите на кнопку Готово:
Примечание
default_perceptron отвечает за персептрон по умолчанию, с которого начинаются все новые сессии.
-
В интерфейсе веб-чата включите опцию Дебаг, начните новую сессию нажатием на пиктограмму и выберите персептрон demo.echolalia.perceptron.primary в поле Персептрон:
-
-
Введите запрос для VK Assistant. Сценарий подразумевает собой простой диалог "купи слона", где единственный способ его завершить - это написать фразу "а ты продай слона".
Интеграция с внешним сервисом
Ниже описан процесс настройки интеграции VK Assistant с внешним сервисом; в качестве примера использован сервис, предоставляющий данные о погоде.
Чтобы настроить интеграцию со сторонним сервисом:
- Скачайте скилсет с примером сценария.
- Импортируйте данный скилсет, как в примере выше.
- Откройте чат, включите опцию Дебаг и начните сессию с персептрона demo.weather.perceptron.weather:
В данном сценарии выполняется запрос и получение данных из сервиса, предоставляющего данные о погоде. Делается это посредством агента researcher типа rest.
В данный скилсет можно перейти и посмотреть, как он работает. Манифест агента описывает способ обращения к внешней системе, а JavaScript-блок — способ дополнительной обработки ответа от этой системы.
Внимание
API сервиса требует токен для аутентификации.
В примере скилсета токен есть, указан в манифесте агента. Но в любой момент токен может стать невалидным, и сервис будет возвращать ошибку аутентификации:
В таком случае рекомендуется зарегистрироваться и бесплатно получить новый токен https://home.openweathermap.org/api_keys
Обучение VK Assistant
VK Assistant обучается на основании текстов запросов пользователей. Необходимо добавить различные формулировки для запросов пользователей, чтобы VK Assistant смог на них обучиться, распознавать похожие фразы и определять тему запроса. Формулировки запросов добавляются в раздел FAQ скилсета.
-
Перейдите в раздел Скилсеты, нажмите на пиктограмму для отображения детальной информации скилсета demo.weather:
-
Добавьте в FAQ вопросы — запросы, при помощи которых пользователи в чате могут спрашивать о погоде.
Укажите вопрос/запрос и нажмите на кнопку Готово:
Вопросы можно придумать самостоятельно или воспользоваться предложенным ниже списком:
-
Что там с погодой?
-
Как там погода на сегодня?
-
Сегодня ожидаются осадки?
-
Какой сегодня ветер?
-
Что с погодой на сегодня?
-
Какая будет погода сегодня?
-
Сегодня будет дождь?
-
Будет холодно?
-
Сегодня жарко?
-
Расскажи про погоду
-
Погоду знаешь?
-
-
Ответом на запрос пользователя должно быть определенное действие VK Assistant, когда система распознала тему запроса от пользователя. Чтобы добавить ответ на созданный FAQ, нажмите на кнопку A: :
Укажите действие setPerceptron для персептрона demo.weather.perceptron.weather, нажмите на кнопку Add answer:
-
Импортируйте третий скилсет и FAQ для него, как в инструкции выше.
Публикация созданных FAQ
При публикации FAQ автоматически из всех FAQ всех скилсетов собирается датасет, а на нём впоследствии публикуется NLP модель машинного обучения. Датасет и NLP модель создаются в скилсете, который указан в отдельной настройке. Настройку необходимо указать, а скилсет создать.
-
Создайте новый скилсет.
В разделе Скилсеты нажмите на кнопку Создать:
Укажите id скилсета, например, demo.nlp, его описание и нажмите на кнопку Готово:
Возможно, в будущем в этом же скилсете будут создаваться и другие общеиспользуемые NLP инструменты.
-
Перейдите в Настройки → Конфигурации → конфиг general_faq_skillset_id.
В качестве значения укажите id скилсета, созданного на предыдущем шаге:
Примечание
Если конфига general_faq_skillset_id нет, его необходимо создать.
Укажите в конфиге faqClassField для поля value значение title - при публикации FAQ использовать title элементов FAQ (это пригодится нам дальше):
-
Нажмите на кнопку Опубликовать FAQs:
В результате публикации FAQ будут созданы датасет и NLP-модель, обученная на данном датасете.
Управление общей логикой диалога
Выше мы создали модель, которая по тексту запроса пользователя определяет, к какой теме относится его обращение. Далее можно воспользоваться готовым решением для маршрутизации диалога.
- Импортируйте скилсет с примером реализации управления «общей логикой» диалога, решающей, куда направить пользователя дальше;
-
Укажите начальный персептрон этого скилсета, как в инструкции выше — для конфига default_perceptron значение для поля value — demo.general.perceptron.initial:
При правильных настройках VK Assistant обрабатывает пользовательские запросы из разных FAQ в рамках одной сессии:
Дообучение VK Assistant и добавление новых скилов/умений
Добавление новых умений в VK Assistant (помимо разработки персептронной логики и написания агентов) почти всегда сопровождается добавлением новых скилсетов, новых FAQ (а соответственно и новых текстов пользователей) и публикацией.
Далее рассмотрим пример работы скилсета, содержащего более одного элемента FAQ.
-
Скачайте скилсет, включающий в себя логику для ответов на часто задаваемые вопросы о зарплате, и импортируйте его.
-
Перейдите в список скилсетов и нажмите на кнопку Опубликовать FAQs:
При публикации в шаге 2, в отличие от публикации, которую мы выполняли ранее, FAQ датасет собирается из текстов, находящихся в элементах FAQ только этого скилсета, и, соответственно, на нём обучается новая модель. Они находятся в том же скилсете, что и его FAQ, такие датасет и модель называются локальными. В датасете в качестве классов указаны id или title FAQ (зависит от конфига faqClassField, который мы установили ранее), и, соответственно, обученная на таком датасете модель умеет отличать одну тему от другой в рамках данного скилсета.
При публикации в шаге 3 датасет собирается из текстов всех FAQ всех скилсетов на всём стенде, а классами в таком датасете является уже id скилсета. Соответственно, модель, обученная на таком датасете, умеет отличать одну область тем от другой, но ничего не знает о существовании отельных тем внутри этих областей. Такие датасет и модель уже называют глобальными.
В ходе сессии запрос пользователя сначала классифицируется с использованием глобальной модели (т.е. определяется область обращения), а затем, при необходимости (если в области более одной темы) выполняется классификация с использованием соответствующей локальной модели. А затем уже выполняются действия, указанные в соответствующем элементе FAQ.
Такой двухэтапный подход к классификации пользовательских обращений - это на текущий момент наиболее распространённая практика в большинстве случаев.