Поделиться через


Проектирование потока диалога и управление им

ПРИМЕНИМО К: пакет SDK версии 4

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

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

Хотя традиционное приложение или веб-сайт может запрашивать несколько фрагментов информации на экране одновременно, бот собирает одинаковый объем информации с помощью нескольких сообщений. Таким образом, процесс сбора информации от пользователя становится активным опытом; пользователь ведет активный диалог с ботом.

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

Процедурный поток беседы

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

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

Вы можете структурировать эти модули в любом порядке, от свободной формы до последовательной. Пакет SDK Bot Framework предоставляет библиотеку диалогов, которая позволяет создавать любой поток беседы, необходимый боту. Библиотека включает каскадные диалоги для создания последовательности шагов и вопросов для пользователей. Дополнительные сведения см. в библиотеке диалоговых окон.

Схема сравнения потока графического интерфейса приложения с потоком бесед бота.

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

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

Пример реализации потока беседы с помощью библиотек диалогов см. в статье "Реализация последовательного потока беседы".

Управление прерываниями

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

Хотя это было бы здорово, если пользователи всегда путешествовали по такому линейному, логическому пути, он редко возникает. Люди не всегда взаимодействуют в последовательном порядке. Они, как правило, часто меняют своё мнение. Рассмотрим следующий пример:

Пример пользователя, задающего вопрос в ответ на вопрос бота.

Хотя бот может быть процедурным, пользователь может решить сделать что-то совершенно другое или задать вопрос, который может быть не связан с текущим разделом. В приведенном выше примере пользователь задает вопрос, а не предоставляет ответ "да/нет", который ожидает бот. Как бот должен реагировать?

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

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

Завершение срока действия диалога

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

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

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

Дальнейшие шаги

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