Библиотека диалоговDialogs library

применимо к: Пакет SDK v4APPLIES TO: SDK v4

Диалоговые окна — это центральная концепция в пакете SDK, предоставляющая способы управления долго выполняющимся диалогом с пользователем.Dialogs are a central concept in the SDK, providing ways to manage a long-running conversation with the user. Диалоговое окно выполняет задачу, которая может представлять часть или полный поток диалога.A dialog performs a task that can represent part of or a complete conversational thread. Он может охватывать только один раз или несколько, и может охватывать короткий или длительный период времени.It can span just one turn or many, and can span a short or long period of time.

В этой статье описываются основные классы и функции библиотеки диалогов.This article describes the core classes and features of the dialog library.

  • Вы должны быть знакомы с тем, как работает программы-роботы (включая что-то делать) и управлять состоянием.You should be familiar with how bots work (including what a turn is) and managing state.
  • Каждое диалоговое окно представляет собой задачу, которая может выполняться до завершения и возвращать собранные сведения.Each dialog represents a conversational task that can run to completion and return collected information.
  • Каждое диалоговое окно представляет собой базовую единицу потока управления: оно может начинаться, продолжаться и заканчиваться. Приостановка и возобновление; или отменить.Each dialog represents a basic unit of control flow: it can begin, continue, and end; pause and resume; or be canceled.
  • Диалоговые окна похожи на метод или функцию в языке программирования.Dialogs are similar to a method or function in a programming language. При запуске диалогового окна можно передать аргументы или параметры, после чего диалоговое окно может получить возвращаемое значение по завершении.You can pass in arguments or parameters when you start a dialog, and the dialog can later produce a return value when it ends.

Совет

Если вы не знакомы с разработкой программы-роботы с помощью Bot Framework или создания нового диалогового интерфейса, начните с композитора платформы Bot.If you are new to developing bots with the Bot Framework or creating a new conversational experience, start with the Bot Framework Composer. Для существующего пакета SDK (First программы-роботы), не созданного на платформе Composer, рассмотрите возможность предоставления робота в качестве навыка и использования Composer для будущей разработки на Bot.For existing SDK-first bots, not created in Composer, consider exposing your bot as a skill and using Composer for future bot development.

Состояние в DialogDialog state

Диалоговые окна могут реализовывать множественную беседу, и поэтому они полагаются на сохраняемое состояние во всех случаях.Dialogs can implement a multi-turn conversation, and as such, they rely on persisted state across turns. Без состояния в диалоговых окнах робот не сможет понять, где находился в беседе или какая информация уже собрана.Without state in dialogs, your bot wouldn't know where it was in the conversation or what information it had already gathered.

Чтобы сохранить диалоговое окно в диалоге, состояние диалогового окна должно быть извлечено из и сохранено в память каждый ход.To retain a dialog's place in the conversation, the dialog's state must be retrieved from and saved to memory each turn. Это осуществляется через метод доступа свойства состояния диалогового окна, определенного в состоянии диалога Bot.This is handled via a dialog state property accessor defined on the bot's conversation state. Это состояние диалога управляет сведениями для всех активных диалоговых окон и дочерними элементами активных диалоговых окон.This dialog state manages information for all active dialogs, and children of active dialogs. Это позволяет элементу Bot выбрать место, где она была оставлена последней, и управлять множеством моделей диалога.This allows the bot to pick up where it left off last and to handle a variety of conversation models.

Во время выполнения свойство состояния диалогового окна содержит сведения о том, где диалоговое окно находится в его логическом процессе, включая все внутренние собранные сведения в форме объекта экземпляра диалогового окна .At run time, the dialog state property includes information on where the dialog is in its logical process, including any internally collected information in the form of a dialog instance object. Опять же, он должен быть считан в Bot и сохранен в памяти каждый из них.Again, this needs to be read into the bot and saved out to memory each turn.

Инфраструктура диалоговых оконDialog infrastructure

Наряду с различными типами диалоговых окон в разработке и управлении диалогами участвуют следующие классы.Along with various types of dialogs, the following classes are involved in the design and control of conversations. Хотя обычно не требуется взаимодействовать с этими классами напрямую, они знают о них и их назначение полезно при проектировании диалоговых окон для программы-робота.While you don't usually need to interact with these classes directly, being aware of them and their purpose is useful when designing dialogs for a bot.

КлассClass ОписаниеDescription
Набор диалоговых оконDialog set Определяет коллекцию диалоговых окон, которые могут ссылаться друг на друга и работать совместно.Defines a collection of dialogs that can reference each other and work in concert.
Контекст диалогаDialog context Содержит сведения обо всех активных диалоговых окнах.Contains information about all active dialogs.
Экземпляр диалогового окнаDialog instance Содержит сведения об одном активном диалоговом окне.Contains information about one active dialog.
Результат диалогового окнаDialog turn result Содержит сведения о состоянии из активного или недавно активного диалогового окна.Contains status information from an active, or recently active, dialog. Если активное диалоговое окно завершилось, оно содержит возвращаемое значение.If the active dialog ended, this contains its return value.

Типы диалоговDialog types

Библиотека диалоговых окон предоставляет несколько типов диалоговых окон, облегчающих управление беседами в Bot.The dialogs library provides a few types of dialogs to make your bot's conversations easier to manage. Некоторые из этих типов подробно описаны далее в этой статье.Some of these types are described in more detail later in this article.

ТипType ОписаниеDescription
диалогdialog Базовый класс для всех диалоговых окон.The base class for all dialogs.
диалоговое окно контейнераcontainer dialog Базовый класс для всех диалоговых окон контейнера , таких как компонент и адаптивные диалоговые окна.The base class for all container dialogs, such as component and adaptive dialogs. Он поддерживает внутренний набор диалоговых окон и позволяет рассматривать коллекцию диалоговых окон как единое целое.It maintains an inner dialog set and allows you to treat a collection of dialogs as a unit.
диалоговое окно компонентаcomponent dialog Тип общего назначения контейнера, который инкапсулирует набор диалоговых окон, позволяющий повторно использовать набор в целом.A general-purpose type of container dialog that encapsulates a set of dialogs, allowing for the reuse of the set as a whole. Когда запускается диалоговое окно компонента, оно начинается с назначенного диалогового окна в его коллекции.When a component dialog starts, it begins with a designated dialog in its collection. По завершении внутреннего процесса диалоговое окно компонента завершается.When the inner process completes, the component dialog ends.
каскадное диалоговое окноwaterfall dialog Определяет последовательность шагов, позволяя программе-роботу перебрать пользователя с помощью линейного процесса.Defines a sequence of steps, allowing your bot to guide a user through a linear process. Обычно они предназначены для работы в контексте диалогового окна компонента.These are typically designed to work within the context of a component dialog.
диалоговые окна командной строкиprompt dialogs Запросите у пользователя ввод и возвратите результат.Ask the user for input and return the result. Запрос будет повторяться до тех пор, пока не получит допустимый ввод или не будет отменен.A prompt will repeat until it gets valid input or it is canceled. Они предназначены для работы с каскадными диалогами.They are designed to work with waterfall dialogs.
Адаптивное диалоговое окноadaptive dialog Тип диалогового окна контейнера, используемого Composer для предоставления более естественных потоков диалога.A type of container dialog used by Composer to provide more natural conversational flows. Не предназначено для непосредственного использования в первом РОБОТЕ пакета SDK.Not intended to be used directly in an SDK-first bot.
диалоговые окна действийaction dialogs Тип диалогового окна, поддерживающего реализацию действий в Composer.A type of dialog that supports the implementation of actions in Composer. Не предназначено для непосредственного использования в первом РОБОТЕ пакета SDK.Not intended to be used directly in an SDK-first bot.
диалоговые окна вводаinput dialogs Тип диалогового окна, поддерживающего реализацию входных действий в Composer.A type of dialog that supports the implementation of input actions in Composer. Не предназначено для непосредственного использования в первом РОБОТЕ пакета SDK.Not intended to be used directly in an SDK-first bot.
диалоговое окно навыкаskill dialog Автоматизирует управление одним или несколькими навыками, программы-роботы от потребителя навыков.Automates the management of one or more skill bots from a skill consumer. Composer напрямую поддерживает навыки в качестве действий.Composer directly supports skills as actions.
Диалоговое окно QnA MakerQnA Maker dialog Автоматизирует доступ к базе знаний QnA Maker.Automates access to a QnA Maker knowledge base. Это диалоговое окно также предназначено для работы в качестве действия в среде Composer.This dialog is designed to also work as an action within Composer.

Важно!

Адаптивные диалоги впервые были добавлены в версию 4,9 пакета SDK для C#.Adaptive dialogs were first added in version 4.9 of the C# SDK. Адаптивные диалоговые окна поддерживают Компоновщик Bot Framework и не предназначены для непосредственного использования в Bot-роботе SDK.Adaptive dialogs support the Bot Framework Composer and are not intended to be used directly in an SDK-first bot.

Шаблоны диалоговых оконDialog patterns

Существует два основных шаблона запуска диалоговых окон и управления ими из программы-робота.There are two main patterns for starting and managing dialogs from a bot.

  1. Мы советуем использовать Компоновщик Bot Framework для создания диалоговых диалогов, чтобы воспользоваться более естественными возможностями общения с произвольными потоками.We recommend using Bot Framework Composer to author conversational dialogs, to benefit from more natural, free-flowing conversational capabilities. Дополнительные сведения см. в статье Введение в платформу Bot Framework.For more information, see the Introduction to Bot Framework Composer. Такие программы-роботы по-прежнему можно расширять с помощью кода, где это необходимо.Such bots can still be extended with code where needed.
  2. Разрабатывайте программу Bot на одном из языков пакета SDK и используйте метод расширения Run (запуск ) корневого диалогового окна.Develop your bot in one of the SDK languages and use your root dialog's run extension method. Сведения об использовании метода Run с диалоговым окном компонента см. в разделах о диалоговых окнах Component и каскадного взаимодействия и как реализовать последовательный поток диалога.For information on using the run method with a component dialog, see about component and waterfall dialogs and how to implement sequential conversation flow.

Стек диалоговых оконThe dialog stack

Контекст диалогового окна содержит сведения обо всех активных диалоговых окнах и включает стек диалоговых окон, который выступает в качестве стека вызовов для всех активных диалоговых окон.A dialog context contains information about all active dialogs and includes a dialog stack, which acts as a call stack for all the active dialogs. Каждое диалоговое окно контейнера имеет внутренний набор диалоговых окон, управление которыми осуществляется, и поэтому в каждом активном диалоговом окне контейнера отображается внутренний контекст диалогового окна и стек диалоговых окон в рамках своего состояния.Each container dialog has an inner set of dialogs that it is controlling, and so each active container dialog introduces an inner dialog context and dialog stack as part of its state.

Хотя вы не будете обращаться к стеку напрямую, понимание того, что он существует и его функция поможет понять, как работают различные аспекты библиотеки диалогов.While you will not access the stack directly, understanding that it exists and its function will help you understand how various aspects of the dialogs library work.

Диалоговые окна контейнераContainer dialogs

Диалоговое окно контейнераA container dialog может быть частью большего набора диалоговых окон.can be part of a larger dialog set. Каждый контейнер имеет внутренний набор диалоговых окон, который также управляется.Each container has an inner dialog set that is also managed.

  • Каждый набор диалоговых окон создает область для разрешения идентификаторов диалоговых окон.Each dialog set creates a scope for resolving dialog IDs.

  • В настоящее время пакет SDK реализует два типа диалоговых окна контейнеров: диалоговые окна компонентов и адаптивные диалоговые окна.The SDK currently implements two types of container dialogs: component dialogs and adaptive dialogs.

    Концептуальная структура этих двух весьма различается.The conceptual structure of the two are quite different. Однако Bot-робот Composer может использовать оба варианта.However, a Composer bot can make use of both.

Идентификаторы диалоговых оконDialog IDs

При добавлении диалогового окна в набор диалоговых окон ему назначается уникальный идентификатор в пределах этого набора.When you add a dialog to a dialog set, you assign it an unique ID within that set. Диалоговые окна в наборе ссылаются друг на друга по идентификаторам.Dialogs within a set reference each other by their IDs.

Когда одно диалоговое окно ссылается на другое диалоговое окно во время выполнения, оно делает это в ИДЕНТИФИКАТОРе диалогового окна.When one dialog references another dialog at run time, it does so by the dialog's ID. Контекст диалогового окна пытается разрешить идентификатор на основе других диалоговых окон в диалоговом окне немедленного набора.The dialog context tries to resolve the ID based on the other dialogs in the immediate dialog set. Если совпадений нет, он ищет совпадение в содержащем или внешнем наборе диалоговых окон и т. д.If there is no match, it looks for a match in the containing or outer dialog set, and so on. Если совпадений не найдено, создается исключение или ошибка.If no match is found, an exception or error is generated.

Компонентные диалогиComponent dialogs

В диалоговых окнах компонента используется модель последовательностей для диалогов, и каждое диалоговое окно в контейнере отвечает за вызов других диалоговых окон в контейнере.Component dialogs use a sequence model for conversations, and each dialog in the container is responsible for calling other dialogs in the container. При пустом стеке внутреннего диалогового окна компонента Компонент завершается.When the component dialog's inner dialog stack is empty, the component ends.

Рассмотрите возможность использования диалоговых окон компонентов и каскадов, если у программы-робота есть сравнительно простой поток управления, для которого не требуется более динамичный поток диалога.Consider using component and waterfall dialogs if your bot has a relatively simple control flow that does not require more dynamic conversation flow.

О диалоговых окнах компонентов и каскадов . подробное описание диалоговых окон компонентов, каскадов и запросов.About component and waterfall dialogs describes component, waterfall, and prompt dialogs in more detail.

Адаптивные диалогиAdaptive dialogs

Адаптивные диалоговые окна позволяют платформе Composer динамически обновлять поток диалога на основе контекста и событий.Adaptive dialogs allow Composer to dynamically update conversation flow based on context and events. Это позволяет использовать диалоговые окна более естественным образом и без перетекания.This enables dialogs to be more natural and free-flowing. Такой программы-роботы может:Such bots can:

  • Пользователь имеет возможность изменить свое мнение и ответить на вопрос ранее в беседе.Let a user change their mind and re-answer a question answered earlier in the conversation.
  • Дайте пользователю ответ на два вопроса с одним ответом.Let a user answer two questions with one response.
  • Позволяет контексту пользователя переключаться на другой раздел в середине диалога.Let a user context-switch to a different topic mid-way through a conversation.

Это особенно удобно при переключениях контекста беседы и паузах в ней.This is especially handy when dealing with conversation context switches and interruptions in the middle of a conversation. Адаптивные диалоговые окна поддерживаются и располагаются поверх обширной системы событий.Adaptive dialogs support and sit on top of a rich event system.

В статье Введение в композитор Framework Composer описаны функции, поддерживаемые composer и адаптивные диалоговые окна: распознавание языка и поддержка создания языка, использование триггеров и действий для моделирования потока обсуждений, доступ к областям памяти и т. д.The Introduction to Bot Framework Composer describes the features supported by Composer and adaptive dialogs: language recognition and language generation support, use of triggers and actions to model conversation flow, access to memory scopes, and so on.

Другие диалоговые окнаOther dialogs

Диалоги QnA Maker и навыка можно использовать в качестве изолированных диалоговых окон или в составе коллекции диалоговых окон в контейнере.The QnA Maker and skill dialogs can be used as stand-alone dialogs or as part of a collection of dialogs in a container.

Диалоговое окно QnA MakerQnA Maker dialog

Диалоговое окно QnA Maker обращается к базе знаний QnA Maker и поддерживает QnA Maker запросы к исполнению и активные средства обучения.The QnA Maker dialog accesses a QnA Maker knowledge base and supports QnA Maker's follow-up prompt and active learning features.

  • Запросы к исполнению, также известные как многострочные запросы, позволяют базе знаний запрашивать у пользователя дополнительные сведения, прежде чем ответить на свой вопрос.Follow-up prompts, also known as multi-turn prompts, allow a knowledge base to ask the user for more information before answering their question.
  • Активные предложения по обучению позволяют усовершенствовать базу знаний со временем.Active learning suggestions allow the knowledge base to improve over time. Диалог QnA Maker поддерживает явные отзывы для функции активного обучения.The QnA Maker dialog supports explicit feedback for the active learning feature.

Дополнительные сведения см. в разделе:For more information, see:

Диалоговое окно навыкаSkill dialog

Диалоговое окно навыка обращается к одному или нескольким навыкам и управляет ими.A skill dialog accesses and manages one or more skills. Диалог навыка отправляет действия из родительского робота в бот навыка и возвращает пользователю ответы от этого навыка.The skill dialog posts activities from the parent bot to the skill bot and returns the skill responses to the user.

Дополнительные сведения см. в разделе:For more information, see:

Дальнейшие действияNext steps