Или - как Articulate справляется с диалогом

Если вы сделали это здесь, то, надеюсь, вы уже слышали о Articulate и даже пробовали его. Если вам нужна помощь в работе, начните с руководства, приведенного ниже. Дайте ему кружиться, и когда вы перейдете на экран «Создать агента» или «Создать домен» и задаетесь вопросом, какие ползунки порогового значения действительно возвращаются сюда для ответа.



Основы работы с ботом с Articulate
Перейдем от установки к работе с ботом с Articulate blog.spg.ai



Разговор в чат-ботах можно обрабатывать несколькими способами: вы можете выбрать индивидуальную разработку собственного решения, использовать диалоговое дерево, такое как Oracle Intelligent Bots, использовать контексты, такие как Dialog Flow, или продвинутый подход машинного обучения, например Rasa Core.

Articulate реализует собственный диалог, хотя он построен на Rasa NLU, но не использует Rasa Core. Мы фанаты Core, но его использование может оказаться сложной задачей, и мы считаем, что существует более простое решение, которое будет работать для большинства приложений.

Вот несколько примеров разговоров, которые работают с Articulate, как сейчас:

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

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

Пороги могут показаться незначительными, поскольку они просто подпитывают друг друга, сущности и заполнение слотов. Но в сочетании с контекстом именно с них начинается разговор. Если уверенность в высказывании высока, мы начинаем пытаться заполнить его промежутки и выполнить это намерение. Но когда уверенность низкая, мы пытаемся извлечь контекст из разговора и применить к этому контексту распознанные сущности. Это то, что позволяет пользователю вставлять What are my options? в середине намерения заказать пиццу, а затем сразу же возвращаться к нему.

Тот же контекст можно применить для заполнения слотов ранее распознанными значениями. Без контекста чат-бот во втором примере, возможно, должен был спросить Who's e-mail address are you trying to find?, но, извлекая контекстную информацию, он уже знал предмет запроса.

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

Контекст и сеансы

Многие из вышеперечисленных функций включаются контекстом, который хранится в Articulate, и тем, как мы прикрепляем его к идентификатору сеанса. Чтобы взаимодействовать с вашим агентом за пределами интерфейса Articulate, вы можете выполнять POST-запросы к конечной точке /converse. Вам нужно будет указать текст разговора и идентификатор сеанса. В локоне это выглядит примерно так:

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{ \
"sessionId": "123456", \
"text": "Hello" \
}' 'http://localhost:7500/agent/1/converse'

Затем после взаимодействия со своим агентом вы можете проверить его текущий контекст, вызвав /context/{sessionId} конечную точку. Для приведенного выше сеанса curl, который выглядит так:

curl -X GET --header 'Accept: application/json' 'http://localhost:7500/context/123456'

что дает мне результат, который выглядит так:

[
  {
    "id":39,
    "name":"Greet",
    "scenario":"Greet"
  },
  {
    "id":40,
    "name":"Order Pizza",
    "scenario":"Order Pizza",
    "slots":{
      "Toppings":""
    }
  },
  {
    "id":41,
    "name":"Toppings",
    "scenario":"Toppings"
  },
  {
    "id":42,
    "name":"Order Pizza",
    "scenario":"Order Pizza",
    "slots":{
      "Toppings":{
        "value":[
          "ham",
          "pineapple"
        ],
        "original":[
          "ham",
          "pineapple"
        ]
      }
    }
  }
]

Этот контекст доступен как часть объекта состояния разговора (CSO) и может быть отправлен на веб-перехватчик или использован для генерации ответов агента.

Заполнение слота

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

запрос у пользователя полей; являются ли они отдельными значениями или списками, обязательными или нет, - это часть того, что предлагает Articulate прямо сейчас. После того, как слот заполнен, его можно отправить как часть вызова веб-перехватчика или использовать непосредственно при генерации ответа агента.

Что дальше с диалоговой системой Articulate?

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

Мы будем очень рады, если вы присоединитесь к нашему растущему сообществу и поможете тестировать, направлять и формировать наш проект с открытым исходным кодом. Загрузите последний выпуск Articulate, ознакомьтесь с вопросом, касающимся диалога, и, наконец, перейдите на наш Gitter и присоединяйтесь к беседе!