对话树(Dailogue Tree)
本章节将讲解:什么是对话树,以及如何在平台创建一个对话树类型的技能。
对话树的定义和概念
对话树和问答对比
如果用单轮FAQ实现一个可能性分支较多的问答场景,配置答案时不得不列举出所有情况,让用户从大量文本中找寻。这样不但导致答案冗余查找费力,也会因为针对性不够强,给用户以不信任感,例如下面这个例子:
用户:我的奶粉为什么结块了
机器人:如果包装完好,刚开封就发现结块,不排除物流运输中不确定因素导致,如果奶粉颜色、气味均发生异常,我们不再建议食用。如果包装有异常磨损,由于奶粉吸湿性很强,如包装发生破损后,奶粉会与空气接触,很容易吸收空气中的水分而产生结块或变质。粉质一旦改变,不再建议食用。请您在购买产品时注意检查包装的完整性,并注意奶粉储存。如果食用了一段时间,且还在保质期范围内,食用中发现坚硬结块多与奶粉储存环境潮湿或存储不当等原因有关。正确储存应存放在避光、阴凉、干燥处,不宜存放在冰箱中,要远离电器等。开封后的产品务必在使用保质期内食用完毕,每次食用后及时密封好,奶粉开袋后不要更换包装容器储存。如果食用时间已经过了保质期,听装奶粉开封后在1个月内食用完毕;盒装或者袋装开封后建议两周内食用完毕。每次食用后,要密封保存,放在阴凉、干燥处储存,如超过开封食用保质期的,不再建议食用。
但是,如果机器人能在多轮询问中,不断细化和推进分支,最终给出一个确切答案,用户体验会更好:
在示例中可以看到,这个对话树具备了以下能力:
- 当用户询问奶粉结块问题时,能够引导用户进入后续流程
- 通过询问用户,获得
发现时间
和是否在保质期内
两个关键信息,给出针对性回复 - 能够正确识别用户
是的
、嗯
这类口语化表述所表达的肯定
意图 - 识别到用户重新回答了以前提问的内容时,能够跳回到对应节点
对话树概念
对话树:这类技能搭建起来就像一棵“树”,它由有层级的树状分支构成。分支中的元素即为节点,其父子关系在树的节点之间建立了一个层次。 根据用户的提问和分支选择给出一个对应回应,如询问食品损坏原因,需要根据购买日期,损坏情况给出不同答复和后续处理。
节点:是组成对话树的最小单元,按层级组织的节点构成对话树。它分为普通节点和三个特殊节点:
- 普通节点:是在流程中,对话树停下来询问,获取用户回复信息的断点。
- 开始根节点:对话树根节点,当用户触发对话树技能时进入这个节点,并开始后续流程。
- 异常结束节点:在任意节点中,机器人询问次数超过最大限制后仍无法继续前进,就会异常退出对话树,这是给出异常结束节点配置的话术。
- 成功结束节点:当流程完整结束,即对话树走到子节点时,机器人会在发送子节点文案后,直接发送成功结束节点配置的话术。
caution
异常结束时,机器人会先回复异常结束话术,再回复成功结束话术。因此请确保成功结束话术具有较强的包容性。
- 用户说:当用户发送的消息满足“用户说”里配置的任意一个条件的时候,就跳转到这个“用户说”对应的节点。
譬如:根节点中,机器人询问用户“是否购买了保险产品”。根节点下一级接了两个子节点,一个子节点A的“用户说”配置为“购买了”,子节点B的“用户说”配置为“没有购买”。
这样,当机器人在根节点,收到用户回复是“没有,我没有购买保险产品”的时候,机器人将从根节点跳转至子节点B(“用户说”-“没有购买”)。
caution
假如对话中的收到的用户说条件,无法在对话树中找不到对应的子节点条件时,机器人会默认跳到第一条子节点。
机器人说:只要机器人跳转到这个节点时,就主动发送的消息。之后等待用户回复,并根据回复信息选择下一级跳转节点。
待填词槽:收集用户回复的关键信息,用于决定用户后续的跳转到哪个子节点。
机器人回:只要在这个节点上,待填词槽收集到了用户回复的消息,机器人就先主动发送这个消息,然后再跳转到子节点。
caution
单个节点内的机器人说和机器人回的回复策略是一致的,如果不同,则默认按机器人说策略为准。
对话树搭建
由于对话树是一个完整的流程,因此我们需要在创建机器人前,先梳理流程,确定话术:
- 这个流程可以拆分成几个询问节点
- 每个节点可以通过什么意图触发
- 触发这个节点之后,机器人要用什么话术去推进或回复
我们可以用上文中的对话文本作为一个示例,梳理一个对话树结构如下:
创建对话树
在技能管理页面,点击“新建技能”按钮,选择技能类型为对话树,即可创建一个新的对话树技能。
填写对话树的名称、所在分类,并选择或创建一个意图作为触发技能的意图,当用户的消息被识别为这个意图时,机器人就会触发这个技能
上文结构图中,触发技能的意图应为“奶粉为什么结块”。
选择好意图后,可以点击“编辑意图”按钮对意图进行修改。
添加技能描述后点击保存,新建的对话树就展示在技能列表中,点击进入流程按钮,即可开始搭建对话树流程。
画布交互
点击进入流程按钮后,会打开一个新的流程画布页面,对话树是这里搭建出来的。让我们先了解一下这个画布的交互方式:
鼠标悬浮在节点或点击节点左侧的小按钮,均可唤起节点操作:新增子节点、编辑节点、复制节点、仅看子节点、删除节点。
双击节点框任意位置可以快速编辑节点;点击节点左侧小三角可以快速展开收起节点的子节点。
拖拽节点可以更改节点的位置顺序和父子结构。
画布提供两种视图树状图和故事线,其中:树状图能较好地体现对话树结构,故事线能更快梳理完整剧情。
初始化节点
初次进入技能画布,有三个初始化的预置节点:开始根节点、成功结束、异常结束。
在开始根节点中,“用户说”中就是创建技能时选择的触发意图。除了在画布外面修改触发意图,也可以在这里进行修改。
在这个节点中,你可以编辑机器人被触发这个意图后,回复的第一条提问,并配置机器人收集用户回复信息作为跳转条件的词槽。
根据上文对话树结构图可见,机器人回复第一条提问是“什么时候发现结块的?”
这个时候机器人需要等待用户告知
发现时间
这个关键信息。因为这里这个词槽的收集方式是判断用户意图,所以这个节点的词槽可以置空,不做特意限制。
note
目前平台上提供了两种词槽收集关键信息填充词槽值的方式:通过词汇填槽,通过句子填槽。
更多词槽的使用方法和操作请见 词槽 页面
- 在成功结束节点和异常结束节点中,你可以编辑机器人在两种结束场景中的结束话术,配置方式类似知识问答。
自定义节点
根据要搭建的对话树结构,你需要创建一些自定义节点。各个节点内配置节点的进入条件、响应内容等。
根据上文对话树结构图可见,根节点询问后:
用户说
发现时间
是“食用一段时间后”,机器人进一步询问“是否在保质期内?”,等待用户告知是否过期
这个关键信息。我们在根节点创建其子节点,并按要求配置。用户说
发现时间
是“刚刚开封”,机器人进一步询问“包装是否完好”,等待用户告知是否完好
这个关键信息。我们在根节点创建另一个子节点,并按要求配置。
同理,后续的节点也根据对话树结构逐一生成,即可得到下图这样一个完整的对话树。
对话树设置
完成对话树搭建,点击画布右上角“技能设置”按钮,可以根据场景需求更改一些设置信息:
- 最大询问次数:
- 在一个节点上,如果机器人没有从对话中获得可以填槽的关键信息,导致无法跳转,机器人就会重复询问该节点。
- 当在一个节点的询问次数超过了最大询问次数的话,机器人将终止对话树,并依次回复失败话术和成功结束话术。
- 流程中能够触发其他技能:
- 在对话中,用户可能不一定完全遵守对话树流程,而是在流程中突然穿插一个其他的问答,如果希望机器人可以完成流程内的意图切换,实现中断当前流程,优先回复切入问答,然后再回到当前流程,可以选择开启。
- 到达叶子节点结束规则
- 直接退出
- 永不退出
点击页面顶栏中的“训练与发布”按钮,当提示训练发布成功后,机器人就可以开始对话啦。