Создание чат-ботов с Dialogflow, Watson, ChatterBot и Rasa
Шрифт:
Давайте посмотрим пример того, как добавить контекст к намерению.
Здесь мы создадим два новых намерения для отрицательных и положительных ответов и добавим к ним контекст.
Но для начала, добавим ответ в намерение order.pizza.
И не забудем нажать кнопку сохранения.
Теперь, когда мы зададим вопрос, «Могу ли я получить пиццу?»
Агент
И если я просто наберу ответ «Да», агент на самом деле не будет знать, что делать.
Вернемся на страницу «намерения» и создадим новое намерение.
Назовем это новое намерение «Заказать пиццу и дополнительно напиток – да».
Нажмем кнопку сохранения и вернемся в намерение order.pizza.
И здесь создадим выходной контекст pizza-upsell и сохраним намерение.
И когда мы это сделаем, вы можете заметить, что к контексту добавилось число 5, и это означает продолжительность жизни контекста.
Таким образом, этот контекст будет активным для пяти взаимодействий.
Теперь, мы можем предоставить этот же контекст, как входной контекст для нашего нового намерения.
Добавим контекст pizza upsell в качестве входного контекста в это намерение.
Таким образом, при повторном заказе, когда пользователь закажет пиццу, агент распознает намерение, и активирует этот контекст.
А затем агент прослушает ответ и попытается определить, это да или нет.
И мы создадим такое же намерение для отрицательного ответа, и этим же контекстом в качестве входного контекста.
Теперь у нас есть два намерения, но нам нужно добавить для них обучающие фразы.
Для намерения нет, мы добавим фразы с отказом, а для намерения да, мы добавим подтверждающие фразы.
И добавим ответ в это намерение.
Теперь давайте проверим.
Давайте зададим вопрос: «Могу ли я получить пиццу?»
Агент скажет: «Конечно, вы хотели бы получить напиток с пиццей?»
И если я скажу «да», тогда ответ будет: «Отлично, скоро будет».
Теперь мы видим, что «да» связано с заказом пиццы с напитком.
В случае нет, мы должны просто разместить заказ на пиццу.
Теперь, что, если вы хотите, чтобы агент сделал больше, чем просто давал ответы пользователю?
Что если вы решите сохранить заказ пиццы в базе данных?
Вы можете достичь этого с выполнением fulfillment.
Выполнение – это действие с использованием кода, развернутого вне диалога.
Это позволяет чат-боту выполнять внешнюю бизнес-логику на основе намерения.
После обнаружения намерения, которое соответствует действию, агент должен иметь возможность обратиться к внешней системе для выполнения действия.
И мы можем написать код для этого взаимодействия с внешней системой.
Здесь мы будем использовать встроенный редактор DialogFlow для написания кода.
Для размещения заказа пиццы, серверная сторона должна знать как минимум три фрагмента информации; размер пиццы, начинку и время получения заказа.
Это будут три разных сущности, которые нам необходимо идентифицировать и извлечь из запроса клиента.
Если клиент говорит: «Можно мне пиццу?», нам нужно настроить агента запросить дополнительную информацию, необходимую для отправки заказа в бэкэнд-систему, ответственную за размещение заказов.
Как мы можем собрать эти недостающие фрагменты информации?
Для этого мы можем использовать раздел действия и параметры намерения.
Здесь вы можете установить необходимые значения параметров, соответствующие сущностям в запросе.
Если пользователи опустят один или несколько параметров в своем ответе, ваш агент попросит их указать значения для каждого пропущенного параметра.
Поэтому в разделе действия и параметры отметим параметр pizza_topping и нажмем Define prompts.
И здесь мы введем вопросы, которые чат-бот задаст, если не обнаружит в намерении пользователя сущность pizza_topping.
И здесь вы также можете заметить, что отмечена опция «Список» для начинки, чтобы агент распознавал несколько начинок в запросе.
И мы создадим сущность размер size.
Далее вернемся в намерение и разметим его обучающие фразы этой сущностью.
Далее перейдем в раздел действия и параметры.
И здесь отметим параметр size и нажмем Define prompts.
И здесь введем уточняющий вопрос.
Таким образом, здесь мы добавим: «Хотите кусок или целый пирог?»
Это позволит агенту запросить информацию, если она не была захвачена.
Теперь, переключимся на выполнение.
И здесь мы видим встроенный редактор, который мы активируем.
И вы увидите, что здесь уже есть шаблон с некоторым кодом, написанным на nodeJS.
Этот код представляет собой веб-приложение nodeJS webhook, которое будет развернуто в Google сервисе Firebase.
Webhook – это механизм получения уведомлений об определённых событиях.
В нашем случае – это механизм уведомления об обнаружении определенного намерения чат-ботом.