先准备好
自定义技能开发能支持开发者设计符合自己业务场景的 语音交互流程 以及 业务处理逻辑 ,创建出功能强大的专属技能哦。
在开始创建技能开始之前,先来了解下自定义技能时序流程,也就是从用户发出指令到收到回复 的过程。
- 用户唤醒精灵,天猫精灵用麦克风收录用户的语音并上传到平台;
- 然后平台使用ASR(音频转文字)+ NLP(自然语言处理),解析用户的意图,匹配到对应的技能和意图中。
- 将所有解析到的参数信息通过 http(s) 请求访问开发者提供的服务接口。
- 开发者的服务内部接收请求参数,然后执行业务逻辑,并组装回复结果。
- 然后平台收到开发者服务返回的结果后,使用 TTS(文字转音频)合成音频,并将音频链接下发到天猫精灵设备。
- 设备根据下发的音频链接将回复内容播出来,本轮对话也就完成了。
在这个天气查询小程序里,可以参考技能的创建、配置、开发、测试流程。开发属于您自己的自定义技能。
第一步: 创建技能并填写技能基本信息
先登录 AliGenie智能应用平台,在应用列表里面选 技能,然后进入技能列表。点击页面右上角 创建语音技能,开始创建自定义技能吧
- 技能名称:展示在技能市场的技能名称,在发布时将进行唯一性检测。
- 技能属性:选择 公有技能 / 私有技能。请谨慎选择技能属性,建议您参考下【公有&私有】。
- 技能调用词:也称为 唤醒词,是用户使用这个技能所需要说的关键字。如“天猫精灵,抛硬币”,则使用了调用词为“抛硬币”的技能就能唤醒。
- 技能标签设置:技能标签是开发者设置的与技能相关的标签。
- 适用的年龄:能用本技能的最低适用年龄,请根据技能的情况合理选择。
- 收费情况:技能可以选择 免费 / 付费 / 应用内购买。
- 交互方式:在语音交互的基础上,可以选择技能是否是 触屏 / 手势 交互的方式
- 场景标签:技能适用的设备有哪些,可以选 车内 / 随身 / 家里 等场景设备,最多可选三个。
- 类别标签:技能所属的类别,可以选择 社交 / 购物 / 休闲娱乐 / 游戏 等细分类别,最多可选三个。
- 其他标签:选择技能主要服务的用户类型或场所类型;
- 用户类型有 教师 / 车主 / 男性 / 女性 等,
- 场所类型有 医院 / 养老 / 社区 / 聚会 等,最多可选三个。
- 技能展示设置:可标识技能是内部技能还是外部技能。
当以上技能信息都填写完成后,点击 确认创建 即可建一个自定义技能了。
第二步:能力申请(非必要)
能力申请在技能开发中不是必要的。如果想要使用此功能,请看下这些文档【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的设备对话信息,你可以验证语音识别和交互的真实效果。如果你的唤醒词和例句包含专有名词、生僻词、同音词,可能导致识别结果达不到预期,建议你调整唤醒词和例句为更容易识别的词句。
第六步:技能发布
这样,我们就完成一个简单的天气技能的创建。从这个技能的创建过程中,您可以了解到自己想要创建的技能该如何实现;当您的技能一切准备就绪后,就可以提交技能进行发布啦。