自定义技能支持专业开发者设计符合自己业务场景的语音交互流程和业务处理逻辑,创建出功能强大的技能。
在开始创建技能之前,先来了解一下自定义技能时序流程,也就是从用户发出指令到收到回复的过程。
- 用户唤醒天猫精灵,天猫精灵使用麦克风收录用户的语音并上传到平台;
- 平台使用 ASR(音频转文字)+ NLP(自然语言处理),解析用户的意图,匹配到对应的技能和意图中。
- 将所有解析到的参数信息通过 http(s) 请求访问开发者提供的服务接口。
- 开发者的服务内部接收请求参数,执行业务逻辑,并组装回复结果。
- 平台收到开发者服务返回的结果后,使用 TTS(文字转音频)合成音频,并将音频链接下发到天猫精灵设备。
- 设备根据下发的音频链接将回复内容播报出来,本轮对话就完成了。
在这个天气查询的示例教程里,可以参考技能的创建、配置、开发、测试流程。开发属于您的自定义技能。
第一步: 创建技能并填写技能基本信息
登录 AliGenie智能应用平台,在应用列表中选择 技能,进入技能列表。点击页面右上角 创建语音技能,开始创建自定义技能。
技能名称:展示在技能市场的技能名称,在发布时将进行唯一性检测。
技能属性:选择 公有技能 / 私有技能。请谨慎选择技能属性,建议您先参考【公有&私有】。
技能调用词:也称为 唤醒词,是用户使用这个技能所需要说的关键字。如“天猫精灵,抛硬币”,则使用了调用词为“抛硬币”的技能。
技能标签设置:技能标签是开发者设置的与技能相关的标签。
适用年龄:能够使用本技能的最低适用年龄,请根据技能的情况合理选择。
收费情况:技能可以选择 免费 / 付费 / 应用内购买。
交互方式:在语音交互的基础上,可以选择技能是否还能够 触屏 / 手势 交互。
场景标签:技能适用的设备有哪些,可以选择 车内 / 随身 / 家里 等场景设备,最多可选三个。
类别标签:技能所属的类别,可以选择 社交 / 购物 / 休闲娱乐 / 游戏 等类别,最多可选三个。
其他标签:选择技能主要服务的用户类型或场所类型,用户类型有 教师 / 车主 / 男性 / 女性 等,场所类型有 医院 / 养老 / 社区 / 聚会 等,最多可选三个。
技能展示设置:可以标识技能是内部技能还是外部技能。
APP展示:如果勾选了不在APP中展示,技能上线后用户能够使用此技能,但无法在 天猫精灵APP 的技能 广场中搜索到此技能。
当以上技能信息都填写完成后,点击 确认创建 即可创建一个自定义技能了。
第二步:能力申请
能力申请在技能开发中不是必要的。如果想要使用此功能,请参考文档【Webhook 鉴权】、【OAuth2.0 授权】和【能力开放】。
第三步: 语音交互模型创建
1. 配置实体
1.1 创建自定义实体
由于天气需要提供“城市”才能查询,所以我们需要创建一个城市名称的实体,相当于提供一个词典,让算法模型知道如何去识别用户语句中的城市。关于实体,想了解更多可参考【实体】。
点击左侧:服务配置 -> 实体 菜单,打开实体配置页面,点击 创建实体 ,填写实体名称和实体标识名:
- 实体名称:要求中文字符,是此实体的中文名,便于开发者在多个实体中快速找到需要的实体。
- 实体标识名:是实体被意图中参数引用的标识,实体标识名可以使用各种字符。
1.2 添加实体值
在实体值部分选择 添加实体,在输入框输入想要添加的实体值内容。支持多个实体值同时输入(最多20个),实体值之间要以 空格 分隔,然后 回车键 添加实体。
1.3 添加同义词
当某条实体值还有其它同义词时,需要将同义词配置到相应的实体后。点击 编辑,单击同义词的输入框,逐条输入该实体值的同义词,每输入一条同义词按一次回车完成输入。全部输入后点击 保存。
1.4 引用公共实体
查询天气还需要用到日期。平台有提供日期的公共实体,不需要开发者去创建,直接引用这个公共实体即可。点击 引用公共实体,把 sys.date 实体后的 引用 按钮打开,返回到实体列表页面可以看到引用的 sys.date 实体。
2. 创建意图
意图用来设置技能的业务逻辑,是我们技能的核心。
进入 意图 菜单,点击 创建意图,输入意图名称、意图标识、意图描述,打开默认意图按钮。点 提交 创建意图:
3. 配置单轮对话语料
语料分为例句式语料和模板式语料,可以自由选择使用哪种语料,也可同时使用。只要语料的语义规则是相同的,那么语料的作用就是相同的,不需要重复定义。详情参考【语料】。
3.1 例句式语料配置方法
进入意图配置页面,在单轮对话表达中配置我们认为用户查询天气的语句。利用这些语句,算法会建立语料模型,这样用户说到相同的话时,平台就能识别出用户是在访问天气查询意图了。
上面的语句中,不少包含了天气查询所需要的 日期 和 城市,我们需要对语句进行标注,告诉算法这些词语可以由标注的实体值动态替换。
鼠标选中我们需要标注的词语,页面上会自动弹出支持标注的实体。如 “杭州今天天气”这句语料,我们分别标注“杭州”为“city”,“今天”为“sys.date(公共实体)”。标注后会自动生成参数“city”和“sys.date(公共实体)”。
平台支持批量标注,当第一次标注后,可以发现所以其他语料中“杭州”词语都被标注了“city”参数,“今天”词语都被标注了“sys.date(公共实体)”参数。所以在输入语料时,所有绑定同一个参数的关键词都设为相同的词语,这样就不需要每条语料都要去标注一遍了。
第一次标注后,自动生成的参数如下:
3.2 模板式语料配置方法
模板式语料需要开发者先手动创建参数,创建的参数只需要先指定关联实体和参数名称即可。
添加语料的时候,我们选择语料类型为 模板,语句中关键词部分使用@{参数名称}占位。如下图所示:
4. 配置参数
从上一步可以看到:有的语料中包含了两个参数,如“杭州今天天气”。平台能够从这句语料中解析到时间和地点的关键信息,这也是查询天气必要的两个参数。但有的语料不包含或只包含部分关键信息,如“天气怎么样”。那么对于缺少的必要信息就需要通过其他方式获取到。获取的方式有三种:
- 使用默认值,用户不说则参数默认是这个取值。
- 使用精灵追问,由平台自动向用户追问参数;
- 使用后台追问,后台追问参数的方法参考【响应数据】。
前两种是在意图参数中进行配置;最后一种是在后台服务中判断参数是否存在以及通过livetime值判断参数的存活时间,依此决定是否需要对此参数向用户追问。
4.1 如何配置精灵追问
在此意图中,日期和地点是查询天气的必要参数,所以我们设置两个参数为 必选。其中“city”参数我们设置了精灵追问,即在没有解析出参数值的时候,平台会自动追问。
4.2 如何配置用户可能的回复
无论是使用的精灵追问,还是使用的后台追问。当用户面对 city 参数的追问时,可能只回答城市名称,此时平台能够从用户的回答中解析到 city 参数的取值。但如果用户说“我要查北京的天气”时,平台就不知道如何处理这句话并从中获取到 city 参数的取值了,此时需要设置用户可能回复的句式,如下所示:
4.3 如何配置参数默认值
“sys.date(公共实体)”参数的默认值设置为“今天” 。
PS: 注意参数必选可能导致的问题
如果勾选了必选,没有填写默认值,也没有设置追问。就会出现对话出错,或对话正确但没有任何回复内容。
5. 配置多轮对话语料
除了 单轮对话表达,我们还可以设置一下 多轮对话编辑,多轮对话语料代表如果用户已经在本意图中,可以识别为本意图的语料,比如:
多轮语料的测试示例。请注意蓝框中的回复内容,是配置的后台服务返回的结果。
6. 配置前置意图
可以再创建一个 空气质量查询意图,在空气质量查询意图中设置天气查询意图为 前置意图。
空气质量和查询天气是相似的意图,两者都需要时间和城市两个参数,所以它们可以互相建立起前置意图的关系,在上下文的语境中,用户就不用重复表达相同的参数了。请注意蓝框中的回复内容,是配置的后台服务返回的结果。
第四步:配置回复逻辑
在创建完语料模型之后,平台就能在用户说到相关的语句时识别出用户的意图,并且解析出其中的参数,通过请求传递给开发者提供的服务进行处理。
开发者可以选择使用【Webhook 服务】或【阿里云 FaaS 服务】。
如果选择 Webhook 服务,开发者需要将提供的 Webhook服务 的请求 URL 配置到意图的回复逻辑中,并且每个意图都要配置回复逻辑。
点击 回复逻辑 菜单,再点击 默认逻辑WEBHOOK 前的 “+” 展开意图列表,点击对应意图后的 详情,进入意图逻辑配置配置页面。在此页面中可以 下载认证文件 和 填写URL。
配置完这些后提交保存,我们就可以在 在线测试 功能中对这个我们的技能了。
第五步:测试验证
1. 在线测试
点击 测试 --> 在线测试 ,可以在输入框输入语句进行测试。可以只输入调用词,就可以访问默认意图;或直接输入调用词+语料,访问指定意图。
由于直接在技能下测试,可以不用说“天猫精灵”唤醒设备,而直接使用技能的 调用词 或者 调用词 + 语料 的方式进行测试。技能调用后,只要没有退出,还可以直接使用语料交互测试。
先完成天气查询意图,再触发空气质量查询意图时,前置意图的参数会传递过来,就不需要再次向用户询问了。
2. 真机测试
如果在线测试没有问题,则可以使用真机测试进一步验证技能在机器上的效果。详情参考【真机测试】。
使用真机测试功能,并辅助APP的设备对话信息,你可以验证语音识别和交互的真实效果。如果你的唤醒词和例句包含专有名词、生僻词、同音词,可能导致识别结果达不到预期,建议你调整唤醒词和例句为更容易识别的词句。
第六步:技能发布
这样,我们就完成一个简单的天气技能的创建。从这个示例技能的创建过程中,您可以了解到自己想要创建的技能该如何实现。当您的技能一切准备就绪后,就可以提交技能进行发布,发布相关流程,请参考【首次发布】。