跳到主要内容
版本:1.10.0

对话树(Dailogue Tree)

本章节将讲解:什么是对话树,以及如何在平台创建一个对话树类型的技能。

对话树的定义和概念

对话树和问答对比

如果用单轮FAQ实现一个可能性分支较多的问答场景,配置答案时不得不列举出所有情况,让用户从大量文本中找寻。这样不但导致答案冗余查找费力,也会因为针对性不够强,给用户以不信任感,例如下面这个例子:

用户:我的奶粉为什么结块了

机器人:如果包装完好,刚开封就发现结块,不排除物流运输中不确定因素导致,如果奶粉颜色、气味均发生异常,我们不再建议食用。如果包装有异常磨损,由于奶粉吸湿性很强,如包装发生破损后,奶粉会与空气接触,很容易吸收空气中的水分而产生结块或变质。粉质一旦改变,不再建议食用。请您在购买产品时注意检查包装的完整性,并注意奶粉储存。如果食用了一段时间,且还在保质期范围内,食用中发现坚硬结块多与奶粉储存环境潮湿或存储不当等原因有关。正确储存应存放在避光、阴凉、干燥处,不宜存放在冰箱中,要远离电器等。开封后的产品务必在使用保质期内食用完毕,每次食用后及时密封好,奶粉开袋后不要更换包装容器储存。如果食用时间已经过了保质期,听装奶粉开封后在1个月内食用完毕;盒装或者袋装开封后建议两周内食用完毕。每次食用后,要密封保存,放在阴凉、干燥处储存,如超过开封食用保质期的,不再建议食用。

但是,如果机器人能在多轮询问中,不断细化和推进分支,最终给出一个确切答案,用户体验会更好: 对话树示例

在示例中可以看到,这个对话树具备了以下能力:

  • 当用户询问奶粉结块问题时,能够引导用户进入后续流程
  • 通过询问用户,获得 发现时间是否在保质期内 两个关键信息,给出针对性回复
  • 能够正确识别用户 是的 这类口语化表述所表达的 肯定 意图
  • 识别到用户重新回答了以前提问的内容时,能够跳回到对应节点

对话树概念

  • 对话树:这类技能搭建起来就像一棵“树”,它由有层级的树状分支构成。分支中的元素即为节点,其父子关系在树的节点之间建立了一个层次。 根据用户的提问和分支选择给出一个对应回应,如询问食品损坏原因,需要根据购买日期,损坏情况给出不同答复和后续处理。

  • 节点:是组成对话树的最小单元,按层级组织的节点构成对话树。它分为普通节点和三个特殊节点:

    • 普通节点:是在流程中,对话树停下来询问,获取用户回复信息的断点。
    • 开始根节点:对话树根节点,当用户触发对话树技能时进入这个节点,并开始后续流程。
    • 异常结束节点:在任意节点中,机器人询问次数超过最大限制后仍无法继续前进,就会异常退出对话树,这是给出异常结束节点配置的话术。
    • 成功结束节点:当流程完整结束,即对话树走到子节点时,机器人会在发送子节点文案后,直接发送成功结束节点配置的话术。
caution

异常结束时,机器人会先回复异常结束话术,再回复成功结束话术。因此请确保成功结束话术具有较强的包容性。

  • 用户说:当用户发送的消息满足“用户说”里配置的任意一个条件的时候,就跳转到这个“用户说”对应的节点。

譬如:根节点中,机器人询问用户“是否购买了保险产品”。根节点下一级接了两个子节点,一个子节点A的“用户说”配置为“购买了”,子节点B的“用户说”配置为“没有购买”。

这样,当机器人在根节点,收到用户回复是“没有,我没有购买保险产品”的时候,机器人将从根节点跳转至子节点B(“用户说”-“没有购买”)。

caution

假如对话中的收到的用户说条件,无法在对话树中找不到对应的子节点条件时,机器人会默认跳到第一条子节点。

  • 机器人说:只要机器人跳转到这个节点时,就主动发送的消息。之后等待用户回复,并根据回复信息选择下一级跳转节点。

  • 待填词槽:收集用户回复的关键信息,用于决定用户后续的跳转到哪个子节点。

  • 机器人回:只要在这个节点上,待填词槽收集到了用户回复的消息,机器人就先主动发送这个消息,然后再跳转到子节点。

caution

单个节点内的机器人说和机器人回的回复策略是一致的,如果不同,则默认按机器人说策略为准。

对话树搭建

由于对话树是一个完整的流程,因此我们需要在创建机器人前,先梳理流程,确定话术:

  • 这个流程可以拆分成几个询问节点
  • 每个节点可以通过什么意图触发
  • 触发这个节点之后,机器人要用什么话术去推进或回复

我们可以用上文中的对话文本作为一个示例,梳理一个对话树结构如下: 对话树

创建对话树

  1. 在技能管理页面,点击“新建技能”按钮,选择技能类型对话树,即可创建一个新的对话树技能。 create-dlt

  2. 填写对话树的名称、所在分类,并选择或创建一个意图作为触发技能的意图,当用户的消息被识别为这个意图时,机器人就会触发这个技能

    上文结构图中,触发技能的意图应为“奶粉为什么结块”。 intent-dlt

  3. 选择好意图后,可以点击“编辑意图”按钮对意图进行修改。

  4. 添加技能描述后点击保存,新建的对话树就展示在技能列表中,点击进入流程按钮,即可开始搭建对话树流程。 finish-dlt

画布交互

点击进入流程按钮后,会打开一个新的流程画布页面,对话树是这里搭建出来的。让我们先了解一下这个画布的交互方式:

  1. 鼠标悬浮在节点或点击节点左侧的小按钮,均可唤起节点操作:新增子节点、编辑节点、复制节点、仅看子节点、删除节点。 hover-node

  2. 双击节点框任意位置可以快速编辑节点;点击节点左侧小三角可以快速展开收起节点的子节点。

  3. 拖拽节点可以更改节点的位置顺序和父子结构。 drag-node

  4. 画布提供两种视图树状图故事线,其中:树状图能较好地体现对话树结构,故事线能更快梳理完整剧情。

初始化节点

  1. 初次进入技能画布,有三个初始化的预置节点:开始根节点成功结束异常结束default-node-dlt

  2. 在开始根节点中,“用户说”中就是创建技能时选择的触发意图。除了在画布外面修改触发意图,也可以在这里进行修改。

    在这个节点中,你可以编辑机器人被触发这个意图后,回复的第一条提问,并配置机器人收集用户回复信息作为跳转条件的词槽。

根据上文对话树结构图可见,机器人回复第一条提问是“什么时候发现结块的?”

这个时候机器人需要等待用户告知 发现时间 这个关键信息。

因为这里这个词槽的收集方式是判断用户意图,所以这个节点的词槽可以置空,不做特意限制。

note

目前平台上提供了两种词槽收集关键信息填充词槽值的方式:通过词汇填槽,通过句子填槽。

更多词槽的使用方法和操作请见 词槽 页面

start-edit-dlt

  1. 在成功结束节点和异常结束节点中,你可以编辑机器人在两种结束场景中的结束话术,配置方式类似知识问答。

自定义节点

  1. 根据要搭建的对话树结构,你需要创建一些自定义节点。各个节点内配置节点的进入条件、响应内容等。

    根据上文对话树结构图可见,根节点询问后:

    1. 用户说 发现时间 是“食用一段时间后”,机器人进一步询问“是否在保质期内?”,等待用户告知 是否过期 这个关键信息。我们在根节点创建其子节点,并按要求配置。

    2. 用户说 发现时间 是“刚刚开封”,机器人进一步询问“包装是否完好”,等待用户告知 是否完好 这个关键信息。我们在根节点创建另一个子节点,并按要求配置。 node-edit-dlt

  2. 同理,后续的节点也根据对话树结构逐一生成,即可得到下图这样一个完整的对话树。 complet-dlt

对话树设置

  1. 完成对话树搭建,点击画布右上角“技能设置”按钮,可以根据场景需求更改一些设置信息:

    1. 最大询问次数:
    • 在一个节点上,如果机器人没有从对话中获得可以填槽的关键信息,导致无法跳转,机器人就会重复询问该节点。
    • 当在一个节点的询问次数超过了最大询问次数的话,机器人将终止对话树,并依次回复失败话术和成功结束话术。
    1. 流程中能够触发其他技能:
    • 在对话中,用户可能不一定完全遵守对话树流程,而是在流程中突然穿插一个其他的问答,如果希望机器人可以完成流程内的意图切换,实现中断当前流程,优先回复切入问答,然后再回到当前流程,可以选择开启。
    1. 到达叶子节点结束规则
    • 直接退出
    • 永不退出 setting-dlt
  2. 点击页面顶栏中的“训练与发布”按钮,当提示训练发布成功后,机器人就可以开始对话啦。 train

进阶能力

待收集词槽

机器人回