Создание чат-ботов с Dialogflow, Watson, ChatterBot и Rasa (страница 2)

Страница 2

И теперь, ниже мы можем добавлять фразы для обучения этому намерению, используя кнопку ADD TRAINING PHRASES.

После ввода не забудьте нажимать кнопку Save сохранения.

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

И чтобы проверить, правильно ли было обучено намерение, мы можем использовать правую боковую панель со строкой «Попробуй сейчас» Try it now.

Здесь мы можем ввести фразу и посмотреть, сможет ли агент определить намерение.

В строке Try it now введем «Могу ли я забрать сырную пиццу за два часа?».

И здесь мы видим, что намерение определено верно – order.pizza.

И обратите внимание, что ответ по умолчанию недоступен, потому что мы не определили никаких ответов, которые агент должен был предоставить после того, как он определил намерение.

Также обратите внимание, что хотя введенная фраза не является частью обучающих фраз, агент верно определил намерение, потому что Dialogflow использует ИИ.

Агент в состоянии определить правильное намерение, потому что он определяет семантическое сходство между обучающими фразами и вводом пользователя.

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

Откроем намерение Welcome.

Это намерение приветствия по умолчанию.

И это намерение позволяет агенту распознавать приветствия от пользователя.

Поэтому, когда пользователь говорит «Привет», «Привет», «Как дела?», агент сможет ответить приветствием и спросить, как он может помочь пользователю.

Нам не нужно определять это намерение.

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

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

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

Вот несколько рекомендаций, которые следует соблюдать при определении намерений чат-бота.

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

Это может варьироваться от синонимов до различных грамматических конструкций фраз.

Другим важным аспектом является определение намерений не двусмысленным.

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

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

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

Например, начинку, которую пользователь хочет для пиццы, при ее заказе, или количество ломтиков пиццы.

И вы можете сделать это с помощью сущностей.

Сущности помогают вам разобраться в особенностях взаимодействия с пользователем.

В диалоге сущности – это существительные, найденные в ходе разговора, такие как имя человека, конкретные цифры, даты, и так далее.

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

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

Сущности помогают вашему агенту детализировать намерение и решить, как он должен действовать, основываясь на этих деталях.

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

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

Теперь, давайте посмотрим, как мы можем создавать сущности в Dialogflow.

Чтобы создать новую сущность в Dialogflow, нажмите в правой части Entities, и на этой странице нажмите «Create Entity».

Введите имя сущности.

И здесь вы увидите две опции: одна – определить синонимы, по умолчанию, а другая – автоматическое расширение.

Давайте оставим синонимы и определим термины, чтобы описать начинку пиццы.

Давайте введем сыр.

Когда вы нажмете ввод, вы увидите, что сыр уже добавлен в качестве синонима.

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

И нажмем сохранить Save.

Теперь, что насчет опции автоматического расширения.

Разрешить автоматическое расширение – это означает, что мы хотим разрешить агенту принимать термины, которые могут быть сказаны пользователем и изначально не добавлены в список.

Допустим, пользователь хочет помидоры в пиццу.

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

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

Теперь, мы можем промаркировать наши обучающие фразы намерения сущностью, которую мы только что создали.

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

И в списке выберем нашу сущность.

Теперь термин грибы помечен сущностью pizza_topping.

Сделаем то же самое с беконом и сыром и с другими начинками.

И в конце не забудем нажать кнопку Сохранить.

И если мы теперь добавим еще одну обучающую фразу в намерение «Я хотел бы заказать пиццу с говядиной, колбасой и пепперони».

Как только мы нажмем Enter, вы увидите, что все три сущности, которые присутствуют в обучающей фразе, будут промаркированы как pizza_topping автоматически.

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

Теперь, когда вы создаете сущность, она может сама содержать атрибуты.

И одним из способов является использование составных сущностей.

Предположим, мы хотим создать намерение для заказа напитка.

Напиток может быть типа молочный коктейль или смузи.

Молочный коктейль и смузи являются записями в «сущности», которая называется напитком.

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

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

Например, можно мне обезжиренный клубничный молочный коктейль?

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

А затем объедините эти сущности в составной сущности напитка.

Теперь, скажем, пользователь хочет указать время, когда он хочет забрать свой заказ.

В том случае, агент должен иметь возможность идентифицировать и извлечь время, в стандартном формате.

И агент сможет сообщить это время внутренней системе, ответственной за заказы.

Точно так же иногда нам нужно определить такие общие понятия, как даты, адреса, номера телефонов, имена и так далее.

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

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

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

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

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

Это поможет агенту не запутаться в том, что следует опознать в качестве данной сущности.

Например, не нужно включать предлоги в маркировку в обучающей фразе.

И нужно указать разнообразие примеров конкретной сущности в обучающих фразах.

Это позволит агенту правильно научиться распознавать эту сущность.

Google
Dialogflow
. Контекст и выполнение

Вы когда-нибудь сталкивались с ситуацией, когда вы подходите к группе людей, и вы ловите себя на том, что пытаетесь понять, о чем они говорят?

Или если к вам приходит друг и говорит: «А как насчет завтра?»

Вы, вероятно, спросите: «Что ты имеешь в виду?»

И в этих случаях вы пытаетесь понять контекст.

То же самое происходит с чат-ботами, которым нужно знать в каком контексте пользователь общается с чат-ботом.

Например, я спрашиваю: «Что там сегодня на обед?»

И получаю в ответ: «Сэндвич».

Тогда, если я спрошу: «А как насчет ужина?», я ожидаю, что другой человек знает, что я имею в виду то, что мы собираемся съесть, а не то, во сколько мы должны отправиться на обед.

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

Контекст позволяет агенту отслеживать, где находится пользователь в диалоге.

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

И контекст позволяет агенту контролировать потоки диалога.

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

Давайте посмотрим пример того, как добавить контекст к намерению.

Здесь мы создадим два новых намерения для отрицательных и положительных ответов и добавим к ним контекст.

Но для начала, добавим ответ в намерение order.pizza.

И не забудем нажать кнопку сохранения.

Теперь, когда мы зададим вопрос, «Могу ли я получить пиццу?»

Агент ответит «Конечно. Хотели бы вы получить напиток с вашим заказом?».

И если я просто наберу ответ «Да», агент на самом деле не будет знать, что делать.

Вернемся на страницу «намерения» и создадим новое намерение.

Назовем это новое намерение «Заказать пиццу и дополнительно напиток – да».

Нажмем кнопку сохранения и вернемся в намерение order.pizza.

И здесь создадим выходной контекст pizza-upsell и сохраним намерение.

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

Таким образом, этот контекст будет активным для пяти взаимодействий.

Теперь, мы можем предоставить этот же контекст, как входной контекст для нашего нового намерения.

Добавим контекст pizza upsell в качестве входного контекста в это намерение.

Таким образом, при повторном заказе, когда пользователь закажет пиццу, агент распознает намерение, и активирует этот контекст.

А затем агент прослушает ответ и попытается определить, это да или нет.

И мы создадим такое же намерение для отрицательного ответа, и этим же контекстом в качестве входного контекста.

Теперь у нас есть два намерения, но нам нужно добавить для них обучающие фразы.

Для намерения нет, мы добавим фразы с отказом, а для намерения да, мы добавим подтверждающие фразы.

И добавим ответ в это намерение.

Теперь давайте проверим.

Давайте зададим вопрос: «Могу ли я получить пиццу?»

Агент скажет: «Конечно, вы хотели бы получить напиток с пиццей?»

И если я скажу «да», тогда ответ будет: «Отлично, скоро будет».

Теперь мы видим, что «да» связано с заказом пиццы с напитком.

В случае нет, мы должны просто разместить заказ на пиццу.

Теперь, что, если вы хотите, чтобы агент сделал больше, чем просто давал ответы пользователю?