Шрифт:
Наш чат-бот может обнаруживать и классифицировать вводимые пользователем данные, но он еще пока не может ответить пользователю.
Например, когда пользователь приветствует нас, мы можем захотеть ответить «Привет! Могу я чем-нибудь помочь?".
То же самое верно и для более сложных запросов.
Мы должны использовать точно настроенную классификацию, которую нам дают намерения и сущности, чтобы обеспечить надлежащий и точный ответ пользователю.
Диалог – это дерево узлов, и каждый узел обычно обрабатывает один конкретный сценарий.
Например, здесь у нас есть три узла.
Первый узел – это Welcome, который обрабатывает приглашение чатбота.
Другими словами, наше приветствие при первом появлении пользователя.
Затем у нас есть узел Greetings для ответа на приветствие пользователя.
И, наконец, у нас есть специальный резервный узел, который будет уведомлять пользователя о том, что чатбот не совсем уверен в том, что спрашивает пользователь.
Welcome и Anything else – это два узла по умолчанию, созданные для вас при первом создании диалога для вашего чат-бота.
Любой узел, который вы определите, будет находиться между этими двумя узлами.
Каждому такому узлу дается имя.
Далее у нас есть условие, которое определяет, когда узел должен быть запущен.
В этом примере, узел будет запущен, если в пользовательском вводе обнаружено намерение #greetings.
Условие может быть как простым, так и сложным логическим выражением.
В большинстве случаев это условие будет проверять намерение, сущность или их комбинацию.
Затем у нас есть блок ответа, где мы указываем, что ответить пользователю.
В этом случае просто: «Привет. Чем я могу вам помочь?»
Этот блок ответа имеет много вариантов.
Ответ может быть изображением или некоторыми параметрами, которые может выбрать пользователь.
Мы можем предоставить несколько вариантов ответа, а затем решить, следует ли их выдавать по порядку при каждом запуске этого узла, или случайным образом из списка, который мы предоставляем.
Мы даже можем прикрепить условие к каждому отдельному ответу в пределах одного и того же узла.
Наконец, мы можем указать, что происходит после того, как мы выдали ответ.
Как правило, мы просто ждем, когда пользователь скажет что-то еще, и это действие по умолчанию.
Однако доступны и другие параметры, в том числе возможность перехода к другим узлам в диалоге.
Запуск узлов выполняется сверху вниз в диалоге.
Поэтому, когда пользователь отправляет свое высказывание, будет оцениваться на выполнение первый узел.
Если условие не выполнено, мы перейдем ко второму узлу.
Если и этот узел не соответствует критериям, мы рассмотрим третий узел и так далее.
И мы остановимся на первом узле, условие которого соответствует пользовательскому вводу.
Вот почему так важно, чтобы резервный узел Anything else находился в самом низу дерева узлов.
Этот узел имеет специальное условие, которое всегда выполняется, даже если все узлы над ним не выполняются.
Это гарантирует, что у нас всегда есть ответ для пользователя, например: «Я не понимаю, не могли бы вы перефразировать?».
По этой же причине у нас есть узел Welcome в самом вверху, приветствующий пользователя.
У этого узла есть специальное условие приветствия, которое выполняется только в начале разговора с пользователем.
Размещая его наверху, мы гарантируем, что что этот узел выполняется до любого другого узла.
И тот факт, что условие выполняется только один раз, гарантирует, что мы не будем приветствовать пользователя каждый раз, при его вводе.
Узлы также могут иметь дочерние узлы, и в сложных чат-ботах бывают ситуации, когда использование этой функции позволяет нам создать более детализированный чат-бот.
Дочерние узлы рассматриваются для выполнения только после того, как был выполнен родительский узе , если какой-либо другой узел в диалоге явно не перешел на данный дочерний узел.
И дочерние узлы также выполняются сверху вниз, и мы останавливаемся на выполнении первого дочернего узла, который соответствует условию.
Теперь, давайте создадим диалог для нашего чат-бота.
Откроем вкладку Диалог навыка.
И нажмем кнопку Create Dialog.