Проектирование потока диалога и управление им
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4
В обычном приложении пользовательский интерфейс состоит из серии экранов, и одно приложение или веб-сайт могут использовать один или несколько экранов по мере необходимости для обмена информацией с пользователем. В большинстве приложений сначала открывается основной экран, который предоставляет средства навигации, помогающие перейти к другим экранам для выполнения различных функций, таких как запуск нового заказа, просмотр продуктов или получение помощи.
Как и приложения и веб-сайты, боты имеют пользовательский интерфейс, но он состоит из сообщений , а не экранов. Сообщения могут содержать кнопки, текст и другие элементы или быть полностью речевыми.
Хотя обычное приложение или веб-сайт могут запрашивать сразу несколько фрагментов информации на экране, бот будет собирать одинаковый объем информации с помощью нескольких сообщений. Таким образом, процесс сбора информации от пользователя является активным взаимодействием, при котором пользователь ведет активную беседу с ботом.
Хорошо разработанный бот будет иметь диалоговый поток, который чувствует себя естественным. Бот должен иметь возможность легко обрабатывать основную беседу и иметь возможность обрабатывать прерывания или переключать темы корректно.
Процедурный поток беседы
Беседы с ботом могут сосредоточиться на задаче, которую бот пытается достичь, которая называется процедурным потоком. Бот задает пользователю ряд вопросов, чтобы собрать все необходимые сведения перед обработкой задачи.
В процедурном потоке беседы вы определяете порядок вопросов, и бот будет задавать вопросы в указанном вами порядке. Вы можете упорядочить вопросы в логические группы, чтобы сохранить код cMicrosoft Entralized, оставаясь сосредоточенным на руководстве беседы. Например, вы можете создать один модуль, содержащий логику, которая помогает пользователю просматривать продукты, и отдельный модуль, содержащий логику, которая помогает пользователю создать новый заказ.
Вы можете структурировать эти модули любым способом, начиная от произвольной формы и заканчивая последовательной. Пакет SDK Bot Framework предоставляет библиотеку диалогов, которая позволяет создавать любой поток беседы, необходимый боту. Библиотека включает каскадные диалоги для создания последовательности шагов и запросов на запросы пользователей. Дополнительные сведения см . в библиотеке диалоговых окон.
В обычном приложении все начинается с основного экрана. Основной экран вызывает новый экран заказа . Экран нового заказа остается в элементе управления, пока не закроется или не вызовет другие экраны, например экран поиска продукта. Если экран нового заказа закрывается, пользователь возвращается на основной экран.
В боте, использующего диалоги, все начинается с корневого диалогового окна. Корневое диалоговое окно вызывает новое диалоговое окно заказа. На этом этапе диалоговое окно нового заказа управляет беседой и остается в элементе управления, пока не закроется или не вызовет другое диалоговое окно, например диалоговое окно поиска продукта. Если диалоговое окно нового заказа закрывается, управление беседой возвращается обратно в корневой диалог.
Пример реализации потока беседы с помощью библиотек диалогов см. в статье "Реализация последовательного потока беседы".
Обработка прерываний
Было бы заманчиво предположить, что пользователи будут выполнять процедурные задачи по очереди упорядоченным образом. Например, в процедурном потоке диалога с помощью диалогов пользователь начнется в корневом диалоговом окне и вызовет новое диалоговое окно заказа. В диалоговом окне нового заказа они вызывают диалоговое окно поиска продукта. Затем при выборе одного из результатов, перечисленных в диалоговом окне поиска продукта, они вызывают новое диалоговое окно заказа. После завершения заказа они возвращаются в корневом диалоговом окне.
Было бы хорошо, если бы пользователи всегда выполняли переход по линейному логическому пути, но это происходит редко. Люди не всегда взаимодействуют в последовательном порядке. Они часто меняют свое мнение. Рассмотрим следующий пример:
Пока бот будет выполнять процедуру, пользователь может решить сделать что-то совершенно другое или задать вопрос, который не связан с текущей темой. В примере выше пользователь спрашивает, а не предоставляет ответ "Да" или "Нет", который ожидает бот. Как должен отвечать бот?
- Пользователю сначала нужно ответить на вопрос.
- Не обращать внимание на все, что сделал пользователь ранее, сбросить весь стек диалоговых окон и начать с самого начала, пытаясь ответить на вопрос пользователя.
- Попытаться ответить на вопрос пользователя, а затем вернуться к вопросу с ответом "Да" или"Нет" и продолжить работу с того момента.
Нет правильного ответа на этот вопрос, так как лучшее решение будет зависеть от особенностей вашего сценария и того, как пользователь будет разумно ожидать, что бот будет реагировать. Узнайте, как обрабатывать прерывания пользователей для бота, предназначенного для обработки некоторых типов прерываний.
Завершение срока действия диалога
Иногда полезно перезапустить беседу с самого начала. Например, если пользователь не отвечает через определенный период времени. Различные методы завершения беседы включают:
- Отслеживайте время последнего получения сообщения от пользователя и очистите состояние, если время больше предварительно настроенной длины при получении следующего сообщения от пользователя.
- Используйте функцию уровня хранилища, например функцию времени в реальном времени в Cosmos DB, чтобы очистить состояние после предварительно настроенного периода времени.
Дополнительные сведения см. в статье о истечении срока действия беседы.
Следующие шаги
Управление навигацией пользователя по диалоговым окнам и проектирование потока общения таким образом, чтобы пользователи могли достичь своих целей (даже в нелинейном режиме) является основной задачей проектирования бота. В статье о навигации бота конструктора рассматриваются некоторые распространенные недостатки плохо разработанной навигации и обсуждаются стратегии предотвращения этих ловушек.