小爱同学学习总结

小爱开放平台技能开发平台:https://xiaoai.mi.com/skill/create/index

音箱 Hello World 自定义技能: https://xiaoai.mi.com/documents/Home?type=/api/doc/render_markdown/SkillAccess/SkillDocument/SkillExample/SoundboxHelloWorld

多轮对话

平台内置的模型工具中提供了两种实现上下文对话的功能。一是连续对话语料,能够实现在当前意图的多轮对话中进行槽位信息的传递,实现多轮对话。另外一个是前置意图,能够实现跨意图中的槽位信息传递。 https://xiaoai.mi.com/documents/Home?type=/api/doc/render_markdown/SkillAccess/BackendDocument/ImportantConcepts

续对话语料

连续对话语料是指在一段连续的上下文对话中,仍然会被识别成为当前意图的语料,同时会将一般对话语料中的槽位信息传递到当前语料中,这是实现多轮对话的一个设置项,开发者可以根据自己的需要选择是否要配置连续对话语料。在连续对话语料中,也可以使用槽位进行输入。

例如对于查询天气这个意图,用户开始会说“北京今天天气怎么样”,这句话命中了用户提问语料中配置的”{ChinaCity}{Date}天气怎么样”这个句式,会被识别成为查询天气意图,技能会给出反馈,告诉用户北京今天的天气如何。接下来用户可能会说“那明天呢?”,这句话从上下文来看,仍然是一个查询天气的意图,并且实际是要查询“北京”“明天”的天气,但是用户的语料并不在用户提问语料中,也不包含“北京”这个槽位。如果要让模型理解这种多轮对话,可以在连续对话语料中配置用户可能会进行的上下文对话,上面这个例子,只需要在连续对话语料中配置一个“那{Date}呢”的语料即可,这样当用户说“那明天呢”时,会被继续识别为查询天气的意图,并且将上一句话中的{ChinaCity}参数传过来,模型就知道用户想要查询的是北京明天的天气。

前置意图

前置意图跟连续对话语料类似,也是理解用户多轮对话的一个功能,但连续对话语料实现的是在同一个意图内槽位的传递,而前置意图解决的是在不同意图之间传递槽位的问题。有些技能,能处理用户的多个意图,例如一个生活类技能,可能既能查天气,又能查交通,这些意图虽然不一样,但是意图之间有些槽位是一样的,例如查天气需要{ChinaCity}{Date}两个槽位,查交通同样需要{ChinaCity}{Date}这两个参数。

用户在实际使用技能过程中,可能会先问天气“北京今天交通怎么样”,在技能给出反馈以后,紧接着问“那天气呢”,在这样的一段上下文中,我们可以看出用户实际是想查“北京”的天气。为了让查天气和查交通这两个意图关联起来,我们可以设置查天气的前置意图为查交通。同时在{ChinaCity}{Date}的前置意图传递槽位设置中,分别选择前置意图(查交通)中的{ChinaCity}{Date}

案例

同样的,这里提供一个简单的电影推荐的使用案例。

设置意图:

意图的判别:

设置槽位:

槽位对应的用户自定义词典:

槽位追问: