你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
对话框库
适用于: SDK v4
对话框 是 SDK 中的核心概念,提供了一种用来管理与用户持续对话的方法。 对话执行的是能够表示部分或完整交流内容的任务。 它可以只跨越一轮或跨越多轮,并且可以跨越或短或长的时间。
本文介绍对话库的核心类和功能。
- 你应该熟悉机器人的工作原理(包括轮次的定义)和管理状态。
- 每个对话表示一个会话任务,该任务可以运行直到完成并返回收集的信息。
- 每个对话框都表示一个基本控制流单元:它可以开始、继续和结束;暂停和恢复;或取消。
- 对话类似于编程语言中的方法或函数。 启动对话时,可以传入参数或参数,对话框稍后可以在结束时生成返回值。
提示
如果你不熟悉使用 Bot Framework 开发机器人或创建新的聊天体验,请从 Bot Framework Composer开始。 对于非在 Composer 中创建的现有 SDK 优先机器人,请考虑将机器人公开为技能并使用 Composer 进行未来的机器人开发。
对话框状态
对话可实现“多回合对话”,因此,其依赖于跨多个轮次的“持久化状态”。 如果对话中没有状态,机器人将不知道它在对话中的位置,或者已经收集了哪些信息。
若要在对话中保留对话的位置,必须每个轮次从内存检索并向其保存对话状态。 这是通过机器人对话状态上定义的对话状态属性访问器进行处理的。 此对话状态管理所有活动对话的信息,以及活动对话的子对话。 这样,机器人就可以从上次中断的地方继续,并处理各种对话模型。
在运行时,对话框状态属性包括有关对话在其逻辑进程中的位置的信息,包括以 对话实例 对象的形式收集的任何内部收集的信息。 同样,这需要每个轮次读取到机器人中,并保存到内存中。
对话基础结构
除了各种类型的对话,以下类还涉及对话的设计和控制。 虽然通常不需要直接与这些类交互,但了解它们及其用途在为机器人设计对话时非常有用。
类 | 描述 |
---|---|
对话集 | 定义对话集合,这些对话可以相互引用并协同工作。 |
对话上下文 | 包含所有活动对话的相关信息。 |
对话框实例 | 包含一个活动对话的相关信息。 |
对话轮次结果 | 包含来自活动对话或最近处于活动状态之对话的状态信息。 如果活动对话结束,则包含其返回值。 |
对话框类型
对话库提供了几种类型的对话,使机器人的对话更易于管理。 本文稍后将更详细地介绍其中一些类型。
类型 | 描述 |
---|---|
对话框 | 所有对话框的基类。 |
容器对话 | 所有 容器 对话(例如组件和自适应对话)的基类。 它维护内部对话集,并允许将对话集合视为一个单元。 |
组件对话 | 一种通用的容器对话框类型,用于封装一组对话框,允许整体进行重复使用。 组件对话启动时,它会从其集合中的指定对话开始。 内部进程完成后,组件对话结束。 |
瀑布对话 | 定义一系列步骤,使机器人能够引导用户完成线性过程。 它们通常设计为在组件对话框的上下文中工作。 |
提示对话 | 询问用户输入并返回结果。 提示将重复,直到获得有效的输入或被取消。 其旨在处理瀑布对话。 |
自适应对话 | Composer 用于提供更自然的对话流的容器对话类型。 并非为了直接在 SDK 优先机器人中使用。 |
操作对话 | 支持在 Composer 中实现操作的对话框类型。 并非为了直接在 SDK 优先机器人中使用。 |
输入对话框 | 支持在 Composer 中实现输入操作的对话框类型。 并非为了直接在 SDK 优先机器人中使用。 |
技能对话 | 自动执行技能使用者的一个或多个技能机器人的管理。 Composer 直接支持技能作为操作。 |
QnA Maker 对话 | 自动访问 QnA Maker 知识库。 此对话旨在亦于 Composer 中充当操作。 |
重要
自适应对话 首次添加到 C# SDK 版本 4.9 中。 自适应对话支持 Bot Framework Composer,不应直接在 SDK 优先机器人中使用。
对话框模式
由机器人启动和管理对话有两种主要模式。
- 建议使用 Bot Framework Composer 创作对话,以便受益于更自然、自由流动的对话功能。 有关详细信息,请参阅 Bot Framework Composer 简介。 此类机器人仍然可以根据需要使用代码进行扩展。
- 使用 SDK 语言之一开发机器人,并使用根对话的“运行”扩展方法。 有关将运行方法与组件对话一起使用的信息,请参阅有关组件和瀑布对话以及如何实现顺序对话流。
对话框堆栈
对话上下文包含有关所有活动对话的信息,并包括一个 对话堆栈,该堆栈充当所有活动对话的 调用堆栈。 每个容器对话都有一组内部对话,它正在控制,因此每个活动容器对话都会在其状态中引入内部对话上下文和对话堆栈。
虽然不会直接访问堆栈,但了解它存在,其函数将帮助你了解对话库的各个方面的工作原理。
容器对话
容器对话 可以是较大对话集的一部分。 每个容器都有一个内部对话集,该对话集也是被管理的。
每个对话集都会创建一个用于解析对话标识符的范围。
SDK 当前实现两种类型的容器对话:组件对话和自适应对话。
两者的概念结构大相径庭。 但是,Composer 机器人可以使用这两者。
对话 ID
将对话框添加到对话集时,可在该集中为其分配唯一 ID。 集内的对话通过其 ID 相互引用。
当一个对话在运行时引用另一个对话框时,它通过对话框的 ID 执行此操作。 对话上下文尝试根据即时对话集中的其他对话解析 ID。 如果没有匹配项,它将在包含范围内或外部对话集等位置查找匹配项。 如果未找到匹配项,则会生成异常或错误。
组件对话框
组件对话对对话使用序列模型,容器中的每个对话都负责调用容器中的其他对话。 当组件对话的内部对话堆栈为空时,组件将结束。
如果机器人具有相对简单的控制流,该流不需要更多动态对话流,则考虑使用组件对话和瀑布对话。
关于组件和瀑布对话一文更详细地介绍了组件、瀑布和提示对话。
其他对话
QnA Maker 和技能对话可用作独立对话,也可以用作容器中对话集合的一部分。
QnA Maker 对话
注意
Azure AI QnA Maker 将于 2025 年 3 月 31 日停用。 从 2022 年 10 月 1 日起,将无法创建新的 QnA Maker 资源或知识库。 现提供较新版本的问答功能,作为 Azure AI 语言的一部分。
自定义问答是 Azure AI 语言的一项功能,是 QnA Maker 服务的更新版本。 有关 Bot Framework SDK 中的问答支持的详细信息,请参阅 自然语言理解。
QnA Maker 对话框访问 QnA Maker 知识库,并支持 QnA Maker 的后续提示和主动学习功能。
- 后续提示(也称为多轮次提示)允许知识库在回答问题之前询问用户更多信息。
- 主动学习建议允许知识库随时间推移而改进。 QnA Maker 对话框支持主动学习功能的显式反馈。
有关详细信息,请参阅:
- 什么是 QnA Maker?。
- 在 SDK 中,如何使用 QnA Maker 回答问题。
- 在 Composer 中,如何将 QnA Maker 知识库添加到机器人。
技能对话框
技能对话访问和管理一个或多个技能。 技能对话将活动从父机器人发布到技能机器人,并向用户返回技能响应。
有关详细信息,请参阅: