Использование @ Sys.Any Entity для моего чата / помощника бота (проблема разработки) - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь разработать службу Chatbot / google assistant для службы заказа еды, и в настоящее время у меня она разработана следующим образом:

Существует динамический список меню, который будет выбираться через API каждый раз, когда пользователь запрашивает меню (новое намерение заказа) Затем будет отображен список названий категорий меню. Затем пользователь отправляет название категории Второе намерение наблюдения (намерение выбранной категории) ловит его и выбирает продукты питания в категории Затем пользователь отправляет название продукта Затем следующий урок (намерение выбранного элемента) ловит его и запрашивает количество.

Проблема здесь в том, что, поскольку это динамический список, я не могу использовать пользовательскую сущность, заполнять слоты и обучать ее, поэтому в настоящее время я использую сущность @ sys.any. получение имени категории от пользователя и проверка его присутствия в списке меню из веб-крючка, если имеется список отображаемых элементов. если нет, проверьте орфографию или введите правильную категорию меню и повторите запрос. тогда здесь, поскольку "намерение выбранной категории" уже используется, поэтому все, что я сейчас наберу, будет воспринято как "имя элемента" вместо "категория"

Я предотвращаю это путем сопоставления выходного контекста из «выбранного намерения категории» и входного контекста в «выбранном элементе намерения». Но есть проблемы с таким подходом, такие как после выбора категории, я не могу вернуться и изменить это, и он работает только 5 раз (срок службы родительского контекста) перед переходом к резервному намерению

Я знаю, что это действительно плохой дизайн, но есть ли способ сделать это лучше?

Любой способ сказать, что если пользователь вводит неправильное имя категории, нет, не использовать это намерение, но вернуться и получить правильное имя категории?

Или, если пользователь выбирает категорию или элемент по ошибке. В любом случае, вернитесь к этому прежнему намерению и сделайте это снова?

1 Ответ

0 голосов
/ 18 января 2019

Несколько замечаний, которые могут помочь:

Использовать объекты сеанса

Поскольку вы загружаете категории и меню динамически, вы также можете задавать объекты для них динамически. Для этого вы будете использовать API Dialogflow для создания Сеансовых сущностей , которые изменяют определенную вами сущность. Затем вы можете тренировать свое намерение с помощью фраз, которые используют эту сущность, но вы будете динамически изменять сущность, когда они начнут разговор.

Не использовать дополнительные материалы

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

Вместо этого продолжайте и используйте Intents верхнего уровня для всего, что вы пытаетесь сделать.

«Но,« я слышу, вы спрашиваете: «Как мне тогда убедиться, что я обработал выбор категории до выбора меню?»

Ну, сделать это можно ...

Использовать контексты

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

Так по этой схеме:

  • Когда вы сообщаете им категории, задайте контекст «waitCategory».
  • Назначение «выбранная категория» требует наличия входного контекста «waitCategory».
  • В обработчике для этого контекста
    • Вы скажете им меню
    • Установка контекста «continueMenu»
    • Очистить контекст «continueCategory»

Прежде всего, помните ...

Содержимое представляет то, что пользователь говорит , а не как вы реагируете на то, что они говорят.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...