天猫精灵(AliGenie)自定义技能语音交互逻辑

本文发布于 6 年前,部分内容可能已经失去参考价值。

阅读官方文档了解基本概念和逻辑:http://doc-bot.tmall.com/docs/doc.htm?treeId=393&articleId=106714&docType=1

文档中的示例是以自己创建的实体来示范的,如果我们需要创建一个“找工作”的意图,那么不可能把所有的工种一一添加到实体中,必须在语料中使用 sys:any 这个系统实体来匹配工种。例如:

添加语料:我想找会计的工作。把会计标注为 sys:any,参数名称可以取为 job,必选,追问语句:请说出您要找的工作类型。这样,Web Hook 就能接收到参数 job 了,而且值可以为用户说的任意工种。


同样的,我们可以再添加一个“租房子”的意图。


有了两个或多个意图后,必须选择其中一个为默认意图。如果我们的意图功能有同等的重要性,那么可以再添加一个入口意图,引导用户自己选择需要使用的意图,实现类似 10086 的层级选项。


添加一个“想干嘛”的意图并设为默认,不管是否添加语料或参数,意图完成时最终还是会调用 Web Hook,那么我们就在 Web Hook 中返回引导语句,如:您要找工作还是租房子呢?


然后在“找工作”意图中添加语料:我要找工作。在“租房子”意图中添加语料:我要租房子。顺利引导用户进入相应意图。


为了避免对话中断,需要在“想干嘛”意图的 Web Hook 中将 resultType 设为 ASK_INF


AliGenie 的语料匹配过程并非是:

先匹配语料填充参数,再通过追问语句引导匹配其它语料填充剩余必选参数,最后调用 Web Hook。

我觉得更应该是:

先匹配语料填充参数,再通过追问语句引导单个填充剩余必选参数,最后调用 Web Hook。


也就是说追问语句应尽量引导用户回答单个实体值(如在查天气示例中:“明天”、“北京”,加一些助词之类的也是没问题的,毕竟是人工智能嘛),而不是引导用户去匹配其它语料。


当我们成功完成一次找工作的检索后,如果用户想继续询问其它岗位,需要再重新匹配一次语料。添加连续对话语料可以实现更简洁的对话场景:

连续对话语料:厨师

其中厨师标注为 job

可以实现如下对话:

我要找工作

请说您要找的工作类型

驾驶员

没有找到关于 驾驶员 的招聘信息。

司机呢

为您找到 司机 的招聘信息。 xxxxxxxx

如果没有这个连续对话语料,那么最后一句的回答是:对不起,我不明白你的意思


为了提高用户体验,当成功返回用户所要找的工作信息时追问“重听还是下一条?”,这时我在连续对话语料或普通语料中添加“重听”,会丢失 job 参数,直接返回了 job 参数的追问语句,无法调用 Web Hook,期待大家指点迷津。


更多需要注意的地方:

  • 修改配置(意图、实体等信息)后,如果在线测试未即时生效,可能有缓存或 bug,第二天再继续测试,当然也不排除配置有误,应仔细排查。

  • 文档中心底部可以直接向提交问题,官方会给予回复(不保证),及时性令人捉急。

  • 用户的语句是按:连续对话语料 -> 普通语料 -> 意图 -> 技能 -> 平台 的顺序来匹配的。也就是说,如果上一步是在处理意图 A 的逻辑,那么下一步会优先匹配意图 A 的连续对话语料和普通语料,如果未匹配,但匹配了意图 B 的语料,那么照样会执行意图 B 的逻辑。如果是真机测试,那么甚至是跳出技能来匹配官方技能(如唱一首歌)。

  • AliGenie 会在匹配语料之前对用户的话进行建模,如果添加了语料“我找工作”,实际测试中,有时候能匹配语句“我找工作”,有时候却不能,有时候甚至连“我找工作”都不能匹配,具体的匹配逻辑令人无法捉摸,可能这样更像是“人工智能”吧。

  • 真机测试时最好在手机上开启“天猫精灵”App,时刻观察天猫精灵识别到的内容,以减少我们对 AliGenie 处理逻辑的误判。

  • sys:time 可以匹配:今天、明天、后天、大后天等,但不能匹配“昨天”,神马情况?

  • AliGenie 目前还不完善,特别是添加修改语料时经常出错莫名错误和乱码,期待阿里能尽快完善,能让更多的开发者参与到其中来,共同推动 AI 发展。


xoyozo 7 年前
转载请注明出处
可能相关的内容