人类的对话就是通过有效的形式交换彼此的意思。表达和理解意图并不是我们看上去那么简单,你需要认真地,有目的地区设计Alexa和用户之间的对话。一个好的语音交互体验可以让用户通过多种不同的形式去表达自己的意图和想法。
会话界面由用户发起,Alexa跟进回答。对于很多人来说,这是一种全新的交互形式。设计开始是,要确保你的用户能够加入到对话之中。
搭建功能之前完成设计
首先你要明确希望用户从产品功能上得到什么体验和感受。一旦你确定了目的,脚本,流程,那么你就可以去设计意图和表达方式
确定意图
意图是指用户可以要求你的产品功能实现的事情,比如制定旅行计划,获取某种状态,说个笑话,袭击怪兽类等。关于如何定义功能,请看功能设计流程。
不要指望用户会一直把自己的意图准确表达出来。当用户说“制定一个旅行计划”,他可能是会简单滴说“去夏威夷度假”。为了确保你的功能可以尽可能的满足用户,你需要提供一个庞大的语料库,包括单词、句子和短语
下面是关于对话意图的例子:
使用内置意图
每个Alexa技能都需要包括“取消”、“停止”、“帮助”的能力。除此之外,还有其他的指令比如“重复”“播放”“下一个”等,都包含在内置意图库中。内置意图是预先配置好使得Alexa可以识别对应的话语。例如,对于帮助的意图,你无需再为用户做出特殊说明。你也可以自定义内置意图的扩展
定义表达方式
表达方式是用户对Alexa所说的话,表达方式由关键词命令,自然语音(比如虚词)和可以传达多样化信息的信息接口组成。语音交互体验最重要的一项设计就是确定用户表达的范围
为了确保良好的用户体验,需要从那些语焉不详的碎片和只言片语中获取完整的信息。为了尽可能滴提高覆盖率,你需要考虑到细微的变化,同义词、近义词、类似的语句,甚至是错误的发音。例如在“打开”命令下,你需要考虑到“打开”的同义词或类似的表达方式,比如“开动”、“启动”等
一次性表达:是指用户一口气把触发功能所需的信息全部提供完毕,一般用于启动某项功能,并在功能使用过程中出现。
不完整信息:用户经常会发出不完整的命令或请求,这将会要求Alexa发起更多的交互以收集完整的信息
过度回答的处理
有时,用户的回答会超过Alexa的提问范围。比如Alexa问到出发日期,用户可能也会告知出发地,也或者用户还提供了抵达城市,出行方式,但就是没有告诉Alexa所需要的时间
在设计对话时,需要对此重视。可在Dialog Interface Reference 和Plan My Trip tutorial 中了解更多
处理用户的更正行为
当用户认为Alexa出错,或者他改变主意了,他们会试图做出更正行为。比如,他可能紧跟着说“不是的”或“我说的是这样,不是那样”要恰当地处理这些问题
表达方式覆盖范围更多样化
为了保证你的功能运行顺利,比较好的标准是每个意图提供30或更多的表达方式。一些简单的意图,你不用百分百覆盖,但是有更多的表达方式当然更好。当然我们不断增加表达方式可以改进我们的用户体验
增加表达方式多样化的一些技巧
用户说我要制定一个行程,Alexa需要收集出发地、目的地,日期和方式。这是一个和家人朋友玩角色扮演的机会,你可以从中获得多样化的对话方式
一次性表达方式
考虑用户一次性说出所有信息的表达方式。
部分信息方式
考虑用户一般会给你比较少的信息,这点非常重要,因为用户很难一次性把完整信息提供给你。
定义槽(slot)
一句话中可变的部分就是槽,如城市名、日期。槽在任务-信息集中的功能中很常见。你需要设计表达方式中的槽,并且从内置目录中给槽匹配,或者自己给槽赋值。
在下面的例子中{to city}和{traveldate}就是槽:
“I’d like to go to {toCity}”
“book a trip for {travelDate}”
“plan a vacation to {toCity}”
使用内置槽值
有条件的话,尽可能使用官方提供的内置槽来节省时间和提高准确度。为了满足你的功能,你可以扩展一些内置槽值。例如,当增加一个地区名称库,你可以扩AMAZON.US_CITY。建议参考slot values you can extend
认真审查槽值
虽然搜集、复制、粘贴槽值表这种事是比较容易的,但有必要认真的审核和编辑这些内容。错误的槽值会带来技能的逻辑错误,并且给用户带来破坏性的体验,你需要注意以下几种情况:
排除重复的槽值;
避免无关的词汇
避免拼写错误或标点格式上的错误(多发生在英文上),保证编辑文档时选择正确的标点格式,参考supported punctuation.