Перейти к содержанию

Знакомство с VK Assistant

Сессия VK Assistant

Примечание

Перед работой с данным разделом желательно ознакомиться с вводной статьей про VK Assistant и разделом «Основные понятия системы».

Общение VK Assistant с пользователем ведётся в парадигме вопрос-ответ, где VK Assistant задаёт вопрос, ожидает ответ от пользователя, обрабатывает факты из ответа, а затем запрашивает дополнительные факты либо завершает сессию.

Ход сессии:

  1. Начало сессии. По умолчанию сессия всегда начинается с выполнения действия askParameter (спросить факт) факта system.fact.ui.usertext. Это системный факт, в котором будет храниться сообщение, написанное пользователем.

  2. Сессия пребывает в состоянии ожидания «ответа» от пользователя. Единственный способ в VK Assistant «ожидать» чего-либо от пользователя — это спросить какой-либо факт. Написать что-либо VK Assistant пользователь может только тогда, когда VK Assistant этого ждёт, т.е. сессия находится в состоянии ожидания ответа.

  3. Пользователь пишет сообщение, начинается расчёт текущего персептрона, выполняются действия, указанные в активированных респонсах. После их выполнения выполняется следующая итерация расчёта персептрона.

  4. Цикл «расчёт персептрона — выполнение действий» повторяется до тех пор, пока сессия не завершится (по инициативе пользователя или VK Assistant) или пока сессия не зайдёт в тупик. Т. е. после очередной итерации расчёта персептрона состояние сессии не поменяется (обычно это следствие ошибки в настройке, т.к. в общем случае диалог с пользователем должен к чему-то вести). Начальный персептрон указывается в конфиге default_perceptron (Административная панель VK Assistant, раздел Настройки → Конфиги).

    Среди доступных действий, которые можно указывать в респонсах персептронов есть:

    • showInfo — показать в чате сообщение;

    • askParameter — спросить у пользователя какой-либо факт;

    • setParameter — задать факт указанным значением;

    • clearParmeter — очистить факт;

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

  5. В ходе сессии в системе появляются события, на которые могут быть подписаны агенты (подпрограммы), которые могут выполнять вспомогательные действия, в том числе изменять ход сессии (например, когда пользователь в ответ на вопрос VK Assistant даёт неожиданный ответ, с помощью агента возможно сделать классификацию текста в попытке обнаружить смену контекста или при последовательном появления N событий об ошибке классификации перевести диалог на оператора).

Создание примитивного сценария и начало работы сессии

Чтобы создать сценарий:

  1. Скачайте скилсет с примером сценария.

  2. Перейдите в административную панель VK Assistant в раздел Скилсеты и нажмите на кнопку Импорт из файла:

  3. Выберите файл скилсета и нажмите на кнопку Импорт.

  4. Начните новую сессию с персептрона этого скилсета.

    Это можно сделать двумя способами:

    • Перейдите в НастройкиКонфигурации → найдите конфиг default_perceptron → нажмите на пиктограмму :

      В отобразившейся форме укажите для поля value значение demo.echolalia.perceptron.primary и нажмите на кнопку Готово:

      Примечание

      default_perceptron отвечает за персептрон по умолчанию, с которого начинаются все новые сессии.

    • В интерфейсе веб-чата включите опцию Дебаг, начните новую сессию нажатием на пиктограмму и выберите персептрон demo.echolalia.perceptron.primary в поле Персептрон:

  5. Введите запрос для VK Assistant. Сценарий подразумевает собой простой диалог "купи слона", где единственный способ его завершить - это написать фразу "а ты продай слона".

Интеграция с внешним сервисом

Ниже описан процесс настройки интеграции VK Assistant с внешним сервисом; в качестве примера использован сервис, предоставляющий данные о погоде.

Чтобы настроить интеграцию со сторонним сервисом:

  1. Скачайте скилсет с примером сценария.
  2. Импортируйте данный скилсет, как в примере выше.
  3. Откройте чат, включите опцию Дебаг и начните сессию с персептрона demo.weather.perceptron.weather:

В данном сценарии выполняется запрос и получение данных из сервиса, предоставляющего данные о погоде. Делается это посредством агента researcher типа rest.

В данный скилсет можно перейти и посмотреть, как он работает. Манифест агента описывает способ обращения к внешней системе, а JavaScript-блок — способ дополнительной обработки ответа от этой системы.

Внимание

API сервиса требует токен для аутентификации.
В примере скилсета токен есть, указан в манифесте агента. Но в любой момент токен может стать невалидным, и сервис будет возвращать ошибку аутентификации:

В таком случае рекомендуется зарегистрироваться и бесплатно получить новый токен https://home.openweathermap.org/api_keys

Обучение VK Assistant

VK Assistant обучается на основании текстов запросов пользователей. Необходимо добавить различные формулировки для запросов пользователей, чтобы VK Assistant смог на них обучиться, распознавать похожие фразы и определять тему запроса. Формулировки запросов добавляются в раздел FAQ скилсета.

  1. Перейдите в раздел Скилсеты, нажмите на пиктограмму для отображения детальной информации скилсета demo.weather:

  2. В блоке FAQs перейдите в раздел со скилсетами:

  3. Создайте новый элемент FAQ:

  4. Укажите наименование FAQ и нажмите на кнопку Готово:

  5. Добавьте в FAQ вопросы — запросы, при помощи которых пользователи в чате могут спрашивать о погоде.

    Нажмите на кнопку Q: :

    Далее кнопка Создать:

    Укажите вопрос/запрос и нажмите на кнопку Готово:

    Вопросы можно придумать самостоятельно или воспользоваться предложенным ниже списком:

    • Что там с погодой?

    • Как там погода на сегодня?

    • Сегодня ожидаются осадки?

    • Какой сегодня ветер?

    • Что с погодой на сегодня?

    • Какая будет погода сегодня?

    • Сегодня будет дождь?

    • Будет холодно?

    • Сегодня жарко?

    • Расскажи про погоду

    • Погоду знаешь?

  6. Ответом на запрос пользователя должно быть определенное действие VK Assistant, когда система распознала тему запроса от пользователя. Чтобы добавить ответ на созданный FAQ, нажмите на кнопку A: :

    Укажите действие setPerceptron для персептрона demo.weather.perceptron.weather, нажмите на кнопку Add answer:

  7. Импортируйте третий скилсет и FAQ для него, как в инструкции выше.

Публикация созданных FAQ

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

  1. Создайте новый скилсет.

    В разделе Скилсеты нажмите на кнопку Создать:

    Укажите id скилсета, например, demo.nlp, его описание и нажмите на кнопку Готово:

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

  2. Перейдите в НастройкиКонфигурации → конфиг general_faq_skillset_id.

    В качестве значения укажите id скилсета, созданного на предыдущем шаге:

    Примечание

    Если конфига general_faq_skillset_id нет, его необходимо создать.

    Укажите в конфиге faqClassField для поля value значение title - при публикации FAQ использовать title элементов FAQ (это пригодится нам дальше):

  3. Нажмите на кнопку Опубликовать FAQs:

    В результате публикации FAQ будут созданы датасет и NLP-модель, обученная на данном датасете.

Управление общей логикой диалога

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

  1. Импортируйте скилсет с примером реализации управления «общей логикой» диалога, решающей, куда направить пользователя дальше;
  2. Укажите начальный персептрон этого скилсета, как в инструкции выше — для конфига default_perceptron значение для поля valuedemo.general.perceptron.initial:

    При правильных настройках VK Assistant обрабатывает пользовательские запросы из разных FAQ в рамках одной сессии:

Дообучение VK Assistant и добавление новых скилов/умений

Добавление новых умений в VK Assistant (помимо разработки персептронной логики и написания агентов) почти всегда сопровождается добавлением новых скилсетов, новых FAQ (а соответственно и новых текстов пользователей) и публикацией.

Далее рассмотрим пример работы скилсета, содержащего более одного элемента FAQ.

  1. Скачайте скилсет, включающий в себя логику для ответов на часто задаваемые вопросы о зарплате, и импортируйте его.

  2. Перейдите в его FAQ и нажмите на кнопку Опубликовать:

  3. Перейдите в список скилсетов и нажмите на кнопку Опубликовать FAQs:

При публикации в шаге 2, в отличие от публикации, которую мы выполняли ранее, FAQ датасет собирается из текстов, находящихся в элементах FAQ только этого скилсета, и, соответственно, на нём обучается новая модель. Они находятся в том же скилсете, что и его FAQ, такие датасет и модель называются локальными. В датасете в качестве классов указаны id или title FAQ (зависит от конфига faqClassField, который мы установили ранее), и, соответственно, обученная на таком датасете модель умеет отличать одну тему от другой в рамках данного скилсета.

При публикации в шаге 3 датасет собирается из текстов всех FAQ всех скилсетов на всём стенде, а классами в таком датасете является уже id скилсета. Соответственно, модель, обученная на таком датасете, умеет отличать одну область тем от другой, но ничего не знает о существовании отельных тем внутри этих областей. Такие датасет и модель уже называют глобальными.

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

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