概念解释
对话流
在智能设备和人进行对话时,常常会有比较复杂的对话过程。对话流提供的就是复杂对话的能力,只需要进行简单的对话单元拖拽和配置的过程,就可以赋予智能设备复杂对话的能力。
对话单元
对话单元是对话流的基本组成单元,通过各个对话单元的组合,形成复杂对话的流程。
根据对高频的复杂对话进行总结,我们定义了四种对话单元,分别是开始单元、触发单元、功能单元和回复单元。通过这四种对话单元的组合,可以实现大部分的复杂对话能力。
开始单元
开始单元标志着一个对话流的开始,这里可以进行一些全局的配置。目前支持配置对话超时时间,具体定义在配置部分会详细介绍。
后续在对话单元中会支持更多的全局配置。
触发单元
人机的复杂对话流程一般是一问一答的过程,触发单元的作用就是接收用户的询问,根据预先配置的条件,来判断当前对话流能否给用户的询问作出答复。
功能单元
功能单元支持在对话流中通过调用Web API或在线编程的方式,来获取外部资源,或者实现高度定制化的对话流程。
目前功能单元暂未开放使用,敬请期待。
回复单元
上面提到,触发单元起到接收用户询问的作用,回复单元则是根据对用户询问的理解和任务的执行,最终给到用户相应答复的对话单元。
快速开始
上文介绍了对话流部分的基本概念,现在用一个简单的例子:预订酒店,来介绍对话流的配置、生效的完整流程。
准备工作
在平台上开始配置对话流之前,需要先根据需求场景,整理出当前对话流需求,需要实现哪些具体的任务。
以旅游为例,需要在这个对话流中实现的任务有两个,查询天气和预订酒店。整体的流程设定为先查天气,再定酒店。
有了这两个任务后,需要有相应的意图去实现,在配置对话流之前,需要先在文法配置部分新建两个意图,分别是查询天气和预订酒店。
配置完两个意图后,就可以开始配置对话流。
配置对话流
完成了准备工作后,就可以打开对话平台,进入对话流模块,开始配置旅游这个对话流。
点击新建对话流,进入一个新的对话流页面,将这个对话流命名为“旅游”。
根据上面整理的对话流程,先新建一个触发单元,条件设置为:意图等于查询天气(intent = weather)。
接着为这个触发单元配置一个回复单元,回复具体查询到的天气情况。(这里的天气查询应该先使用功能单元执行查询,由于功能单元还在开发中,因此先做简单的问答演示)。
配置完第一轮对话后,类似的可以再配置预订酒店的一轮对话。
完成基本对话单元的配置后,可以通过连线来定义对话流的走向。
完成连线后,就可以构建对话流,来测试对话流的效果了。
关联场景和设备
在实际测试效果前,需要先将对话流与具体的场景、设备组进行关联。这里的关联是用于定义我们配置的对话流能力可以在哪些设备上、哪些场景中生效。
打开场景管理后,在「旅游」APP的Main场景下,为「全部设备」关联「旅游」的对话流。
具体操作可以查看场景管理部分的用户文档。
测试效果和发布
完成了上述的配置后,就可以开始进行对话能力的测试。
打开快速测试的对话框,输入“帮我查询天气”,平台会询问具体的地点。
接下来输入具体城市「北京」,会返回查询的结果。
之后输入“帮我预订酒店”,会返回已成功预订北京的酒店。
至此我们就完成了一个对话流的能力搭建和效果测试。
详细配置
这个部分将详细介绍对话流部分的配置方式。
对话流的新建、编辑和删除
新建
在对话流列表中,点击「新增对话流」按钮,可以进入一个新的对话流详情页。
编辑
点击对话流列表右侧的编辑按钮,可以进入对应对话流详情页进行编辑。
删除
点击对话流列表右侧的删除按钮,可以删除对应的对话流。
注意:已经和场景、设备关联的对话流不允许删除,需要先解除关联后才可以删除。
对话流的全局配置
对话流的全局配置目前包括对话流名称和对话流是否允许跳出。
对话流名称没有输入限制,只需要保证不重复创建名称相同的对话流即可。
是否允许跳出的开关默认打开。打开表示在此对话流的流程中时,用户可以说出其他的意图,来从当前对话流跳转到其他的意图或者对话流。
例如,在预订机票这个对话流的过程中,用户可能需要去查询一下天气。如果在预订机票的对话流中,允许跳出的开关是打开的,就可以支持用户预订机票中途去查询天气的需求。
对话流配制
对话流的配制包括对话整体流程绘制和各个对话单元的配置。
流程绘制
对话流的绘制部分,左侧工具栏提供添加对话单元的功能,中间是绘制的画布,右侧在选中对话单元后会出现相应的配置部分。
流程绘制之前,应当先根据需求抽象出如下的对话流程
根据对话流程,就可以开始绘制对话流程。其中触发单元用作接收并处理用户的输入,功能单元用于执行相关任务,回复单元用于回复用户的输入。可以将需要的对话单元从左侧工具栏拖入画布并释放,然后按照对话流程将相关的对话单元连接起来,即可完成对话流流程的绘制。
这部分的操作可以参考上文的快速开始部分。
对话单元配置
对话流提供了4种对话单元,开始单元、触发单元、功能单元和回复单元。
1. 开始单元
开始单元是每个对话流都有且只有一个的,标志着对话流的开始。开始单元支持配置对话超时时间,指在等待用户语音指令时的最长时长,超过这个时长后,系统认为用户已经无需进行对话,对话流的状态会直接结束。超时时长默认15秒,可以根据需要自行调整。超时时长设置为0时,即表示无超时时长,会一直等待用户输入。
注:开始单元中的超时时间不会影响对话流中的意图的填槽过程。
2. 触发单元
触发单元用于接收用户的语音/文字,并对用户输入的信息进行一些条件判断,来决定后续如何回应用户。
触发单元的条件判断包括intent、slot、query和other四种:
intent即意图,用于判断用户的语音/文字指令是否能命中已配置的意图
slot即槽位,用于判断用户指令中是否包含指定的槽位值
query即用户指令的原文,可以配置query完全等于某段文本,或query包含某些特定的关键词
other代表其他,主要用于存在对话分支的部分,当用户的输入无法命中其他的预设条件时,就会命中other条件
条件的配置存在一些规则,具体分为条件自身的规则和多个条件间的规则:
1.条件自身的规则
(1)intent
- intent条件中可选择的意图,是当前账号所属组织下的打开状态下的全部意图,均需要在文法配置部分预先配置;
- 已经配置到对话流中的意图,如果在文法配置模块被关闭,会导致对话流在进行到该意图时出错。
(2)slot
需要先在当前触发单元配置了intent条件,才可以选择slot条件进行配置;
slot条件配置时,需要先选择是哪一个意图下,选择范围是当前触发单元配置的全部意图;选择完意图后,可以指定槽位和预期的槽位值。
(3)query
配置query = ‘xxxx’时,表示用户输入要和预置的条件完全一致才可以触发;
配置query 包含 ‘xxx,yyy,zzz’时,表示用户输入包含xxx、yyy、zzz三个关键词才可以触发,多个关键词之间用英文逗号隔开。
(4)other
- other条件一定是单独存在的,配置了other条件的触发单元无法添加其他条件,已存在其他条件的触发单元也不能添加other条件。
2.多条件间的规则
在配置条件时,可以点击“且”、“或”的按钮来添加多个条件,多个条件间的处理逻辑是(条件1 或 条件2)且(条件3 或 条件4)
存在一些异常的情况,在配置过程中应当尽量避免:
在触发单元中,应当避免配置类似‘intent = aaa’ 且 ‘intent = bbb’的条件;
开始单元后连接的那一层触发单元,应当避免配置‘other’条件,否则可能会导致用户的语音输入全部进入了‘other’的对话流。
3. 功能单元
功能单元的部分还在开发中,尽请期待。
4. 回复单元
回复单元用于根据用户的输入指令,给用户相应的回复。目前暂时只支持文本回复。
为了回复的多样性,可以添加多条文本回复,每次会随机选择一条回复用户。
在文本回复中,有时需要引用部分对话过程中收到的信息,比如用户查询天气的城市、日期等。可以通过引用槽位值的方式来实现。
目前的引用方式是输入{get_slot(intent1,slot1)}来引用intent1下的slot1的值,若当前对话流内没有重名的slot,也可以简化为{get_slot(slot1)}。
对话流的保存和构建
在对话流的配置过程中,随时可以保存草稿,以便下次继续编辑。
完成对话流的配置后,可以点击构建,让本次的编辑生效到测试环境,以进行效果的测试。
对于对话流的测试,需要先把对话流和具体场景、设备组关联,然后在平台上进行快速测试。具体见场景管理-编辑场景部分。