查看完整系列文章点击这里:https://www.jianshu.com/p/43e93bfd0895
任务型对话最简单的形式就是一问一答,但实际设计中却经常碰到多轮对话,就是经过多次问答最终完成用户的任务,设计这种对话逻辑我们一般遵循以下步骤:
开始对话
一切对话的起点,都是从我们能识别出一个用户意图开始。用户表达一个意图时,可能有以下两种情况。
完整表达
完整表达的含义就是,完整的表达出用户所有需求,即机器能够识别用户意图,并且获得完整明确的槽位信息,例如:
Q:帮我创建一个明天早上8点的闹钟提醒叫我起床
A:为你设置了起床提醒。于明天早上8点通过闹钟准时提醒你。
在这种情况下,要直接反馈结果,让用户清楚自己的表达是清晰的,并且已经被机器所理解。
针对无屏场景,反馈话术中需要包含所有用户需要的信息,同时保证简单精炼。
针对有屏场景,反馈话术应尽量简单,播报话术可以与反馈话术不完全相同,但反馈话术一定要包含在播报话术中。
完整表达的情况下,无论无屏还是有屏场景,都需要有可视的卡片内容出现(无屏场景,满足卡片显示在对应 APP 中),代表我们完成了一个用户意图的交互任务。
部分表达
部分表达的含义是,表达的需求能让机器识别意图,但是没有完整明确的槽位信息,例如:
Q:帮我记个备忘
A:你想记录什么内容?
在这种情况下,用户刚开始表达意图的时候,并不知道自己需要把关键信息说清楚,所以需要我们给用户明确的提问,让用户知道应该回答什么问题,通过多轮对话的方式,澄清不清晰的槽位信息。
主流程设计
要设计多轮对话,首先你需要勾勒出对话的主流程,我们将对话简单的分为两类:强制多轮对话& 被动多轮对话,简单介绍下两种情况的主流程设计。
强制多轮对话
强制多轮的含义,就是对话中的必填槽位信息,不能用默认值或当前用户状态默认填充,必须由用户清楚的表达出来,才能完成任务,我们称其为“强制多轮对话”,比较典型的场景是闹钟创建的过程,必须由用户说明闹钟提醒的时间才能完成。
强制多轮中需要确定的是,必填槽位和对应的澄清话术,以及澄清必填槽位的优先级(就是先问什么再问什么的顺序)。
被动多轮对话
被动多轮的含义,就是指对话中的必填槽位信息,可以利用默认值或当前用户状态默认填充,但用户可能会在得到答案后,继续改变条件进行追问,我们称其为“被动多轮对话” , 比较典型的场景是 音乐播放 或 天气询问,例如:
Q:播放歌曲
A:好的 【开始播放歌曲】
Q:播放周杰伦的歌曲
A:好的【改变条件,开始播放周杰伦的歌曲】
或者
Q:今天天气怎么样
A:北京今天...【播报北京天气情况】
Q:上海呢?
A:上海今天...【播报上海天气情况】
这种在完成一个任务后,修改条件进行的多轮是被动多轮,被动多轮设计的时候,需要考虑到用户更改条件的可能性,设计后续行为操作,在某些延续性满足的场景(例如听音乐、看视频、播报新闻)这种被动多轮的可能性比较高。
对话流设计
我们使用流程图体现对话流程设计,针对垂类首先撰写整体逻辑,以提醒为例如下图:
这里的对话逻辑是整体的概要逻辑,包含了创建,退出完整的逻辑过程。
分支流程设计
针对上一步的产出,我们继续完善每个逻辑单元中的分支逻辑,详细描述各个分支各种情况的流程设计。
分支流程图
分支流程图体现整体业务逻辑的流程,以创建提醒为例,如下图:
分支流程策略撰写
在分支流程设计中,最核心的就是策略撰写,多轮策略是真正定义多轮的详细需求,一般在“多轮逻辑”的基础上,针对逻辑图中每个独立模块(例如:询问时间、填入内容槽位)进行策略需求细化,以创建提醒“询问时间”为例:
【策略 X】时间有歧义(不能完全无歧义的指定到一个精确时间的)需要确认
a. 用户仅表达了1~11点的时间(没有日期),在24小时内有两个符合条件的时间,无法判断具体什么时间的,需要给用户至少两个时间点询问(e.g. Q:“8点钟叫我吃药” A:“是今天晚上8点,还是明天早上8点?”)
b. 用户表达了日期(X月X日,周X,明天)+时间,在当日的24小时内有两个符合条件的时间,不能准确识别事件和时间的关系,无法判断具体什么时间的,需要给用户至少两个时间点询问(e.g. Q:“12月31日8点钟叫我吃药” A:“是12月31日早上8点,还是12月31日晚上8点?”)
c. 如果用户表达“明天早上X点叫我起床”,如果当前时间为凌晨3~6点,且叫醒time大于当前时间,让用户确认是今天早上还是明天早上(e.g. Q:“明天早上8点叫我起床” A:“当前已经是凌晨了,是明天早上8点,还是今天早上8点?”)
d. 如果用户表达的日期有歧义(如12月第三周的周一),需要给用户至少两个时间点询问(e.g. Q:“12月第三周的周一早上8点钟叫我起床” A:“是X月X日早上X点,还是X月X日早上X点?”)
以上是多轮策略的一段文字需求描述,可以看到,这里的策略需求是针对多轮对话中某个关键槽位澄清的需求,也就是说不应该对多轮做整体策略需求,而应该对多轮中每个关键槽位澄清做专门的策略需求。
退出流程设计
针对多轮的退出策略需要单独设计,一般来说分为三种情况:完成任务主动退出、用户主动表达退出而退出、超时退出。
完成任务主动退出
对于任何BOT,无论是内建能力,还是第三方Skills,都秉承 “用完即走” 的理念,也就是说,只要完成任务,BOT需要立刻退出,离开对话多轮。
唯一需要注意的是在 “被动多轮” 中,用户完成了一个任务,但是后续依然会表达对之前多轮的修正,这就需要结合上下文来定义策略,这部分策略需要在分支逻辑中写清楚。
用户主动表达退出而退出
用户在多轮中可能会显得不耐烦而表达退出,这时需要召回用户的各种表达,针对不同BOT用户可能表达的退出指令词不一样,在聊天中可能用户会说“不想聊了”,在听音乐的过程中用户可能表达 “不听了”,这些需要BOT在设计多轮时针对性的召回退出特定退出指令词。
另外一种情况是,无论在任何情况下,用户都说“停止” 或 “退出”,作为通用的退出指令,会立刻退出当前任意存在的多轮BOT,这个需要有整体的退出策略进行召回。
超时退出
一般定义的超时退出时间在3分钟,用户没有任何沟通会自动退出多轮,各BOT可以根据自己的情况酌情调整。
复杂对话流程设计
有时候为了完成一个完整的任务,会串联多个对话BOT,例如如果我用语音指令购买一个商品,商品选择BOT帮我确定好购买的商品信息,支付BOT协助我完成语音交互的支付操作,订单BOT告诉我订单已经确认。这样的场景就是复杂对话流程设计。
查看完整系列文章点击这里:https://www.jianshu.com/p/43e93bfd0895