对话框库
适用于: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 语言之一开发机器人,并使用根对话的“运行”扩展方法。 有关将运行方法与组件对话一起使用的信息,请参阅有关组件和瀑布对话以及如何实现顺序对话流。
对话上下文包含有关所有活动对话的信息,并包含“对话堆栈”,该堆栈充当所有活动对话的“调用堆栈”。 每个容器对话都有一组其控制着的内部对话,因此每个活动容器对话都会引入内部对话上下文和对话堆栈作为其状态的一部分。
你虽然不会直接访问堆栈,但了解它的存在及其功能会帮助你了解对话库各个方面的工作原理。
容器对话 可以是较大对话集的一部分。 每个容器都有一个内部对话集,该对话集也是被管理的。
每个对话集都创建用于解析对话 ID 的范围。
SDK 当前实现两种类型的容器对话:组件对话和自适应对话。
两者的概念结构大相径庭。 但是,Composer 机器人可以使用这两者。
将对话框添加到对话集时,可在该集中为其分配唯一 ID。 集内的对话通过其 ID 相互引用。
当一个对话在运行时间引用另一个对话时,它通过对话的 ID 执行此操作。 对话上下文尝试根据即时对话集中的其他对话解析 ID。 如果没有匹配项,它将在包含范围内或外部对话集等位置查找匹配项。 如果未找到匹配项,则会生成异常或错误。
组件对话为对话使用序列模型,容器中的每个对话都负责调用容器中的其他对话。 当组件对话的内部对话堆栈为空时,组件将结束。
如果机器人具有相对简单的控制流,该流不需要更多动态对话流,则考虑使用组件对话和瀑布对话。
关于组件和瀑布对话更详细地介绍了组件、瀑布对话和提示对话。
QnA Maker 和技能对话可用作独立对话,也可以用作容器中对话集合的一部分。
备注
Azure QnA Maker 将于 2025 年 3 月 31 日停用。 从 2022 年 10 月 1 日开始,你将无法创建新的 QnA Maker 资源或知识库。 问答功能的较新版本现已作为 Azure AI 语言的一部分提供。
自定义问答是 Azure 语言认知服务的一项功能,是 QnA Maker 服务的更新版本。 有关 Bot Framework SDK 中的问与答支持的详细信息,请参阅自然语言理解。
QnA Maker 对话访问 QnA Maker 知识库,并支持 QnA Maker 的跟进提示和主动学习功能。
- 跟进提示(也称为多轮次提示)允许知识库在回答用户问题之前询问详细信息。
- 主动学习建议使知识库能够随时间推移而改进。 QnA Maker 对话支持主动学习功能的直接反馈。
有关详细信息,请参阅:
- 在 Composer 中,如何将 QnA Maker 知识库添加到机器人。
技能对话访问和管理一个或多个技能。 技能对话将活动从父机器人发布到技能机器人,并将技能响应返回给用户。
有关详细信息,请参阅: