共计 2823 个字符,预计需要花费 8 分钟才能阅读完成。
尽管从普通用户眼中,应用语音向天猫精灵发动指令,而后收到后者的语音回复,这个流程仿佛很简略,但背地实际上有着人工智能中 ASR(语音辨认)、NLP(自然语言解决)、TTS(语音合成)等自然语言解决技术的参加和整合。
咱们先来看一个典型的用户通过语音同天猫精灵交互的流程图。
- 用户用语音唤醒天猫精灵,后者接管到用户语音,上传到智能利用平台。
- 平台应用 ASR(音频转文字)和 NLP(自然语言解决)技术,智能解析出用户收回语音蕴含的用意(艰深的说,即用户以后冀望天猫精灵实现什么样的操作)。平台会主动将以后用户指令,匹配到开发人员创立的对应的技能和用意去。具体的匹配过程,就是将平台所有解析到的参数信息,通过 HTTPS 申请拜访开发者提供的服务接口。
- 开发者负责实现的服务(托管在本人的应用服务器或者阿里云 Serverless 环境),接管到平台发送的申请参数,执行业务逻辑(比方天气预报查问,智力题,语音游戏等),并组装回复后果。
- 智能利用平台收到开发者服务执行完业务逻辑返回的响应数据后,应用 TTS(文字转音频)合成音频,并将音频推送回天猫精灵。
- 天猫精灵将收到的音频通过麦克风播报进去,本轮同用户的交互就实现了。
剖析这个交互场景,不难发现,须要开发人员入手操作的流程蕴含以下两个方面:
- 在 AliGenie 技能利用平台上创立新的技能和用意,用于接管用户通过语音发送过去的申请。
- 利用开发人员本人抉择在应用服务器还是 Serveless 运行环境里实现新的技能须要实现的业务逻辑编写。
新技能的创立和用意的定义
登录 AliGenie 技能利用平台,点击 创立新技能
,通过向导创立一个新技能。
上面是天猫精灵技能创立页面。这个页面的 url:
https://iap.aligenie.com/cons…
其中 skill id 为 89247
,id 为 2022042968002
,取的是技能创立工夫。
从开发流程状态迁徙图能看出,一个新的语音技能,从创立后,顺次要通过下列的步骤,最初能力正式公布给用户应用:
- 定义语音交互模型
- 构建后端服务逻辑
- 增加屏显页面(可选步骤,可跳过)
- 测试:能够用真机测试或者网页上测试
在技能属性保护的明细页面,咱们能够察看到下列信息:
[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-XI038Jh9-1652060198031)(https://upload-images.jianshu…)]
技能最重要的属性是保护技能调用词,当用户向天猫精灵收回的语音指令,蕴含技能调用词时,天猫精灵才会进行相应的技能解决状态。
在我的评测里,我选用的技能调用词为 汪子熙是谁
,因为该调用词不能和平台已有的调用词相冲突。
一个语音技能能够蕴含多个用意。用意代表用户同天猫精灵进行交互对话的目标。比方我的自定义技能,蕴含了三个用意:体重,天气查问和欢送用意。用意标识即用意 ID,须要在技能开发人员编写的代码实现里应用到。
咱们在上图抉择一个用意关上,比方 天气查问
用意,关上其编辑页面,能看到一个 单轮对话表白
的保护界面。因为之前曾经说过,一个语音技能能够对应多个用意,所以如果用户向天猫精灵发动的语音指令,同单轮对话表白里保护的语句雷同或类似时,就被断定为命中了对应的用意。
比方用户向天猫精灵发动的对话,同下列类型的语句类似时:
- 杭州今天天气怎么样
- 今天天气怎么样
- 杭州天气怎么样
智能利用平台就会将这些申请参数,比方 明天
, 杭州
,以及断定出的用意 id,weather
,传入应用程序业务接口。在咱们本人编写的程序里,拿到 weather
id,就晓得以后用户冀望 查问
杭州
这个城市 明天
的天气情况,此时就能够调用天气查问的 Restful API 实现业务逻辑了。
单轮对话表达式的参数定义
咱们察看到了在用意的单轮对话表达式保护界面里,杭州
和 明天
这两个词都通过非凡的色彩进行高亮。这代表它们是对话表达式里的 参数
。显然,天气预报业务要针对具体的城市和日期才有意义,因而这些参数也须要被发送到利用开发人员编写的服务接口中去。
下图是 weather
,天气预报用意的参数列表页面,其中 城市
的 id 为 city
,咱们能够在利用接口的代表中应用该 id,获取用户语音申请中蕴含的 城市
名称。
上图 参数名称
左边的一列,叫做 关联实体
。实体(Entity)是自然语言解决畛域里中示意一类短语的汇合,蕴含了利用所在畛域的关键词和术语。
比方天气预报畛域,关键词为工夫,地点,天气状况。在智能利用平台的解决流程里,实体负责通知平台,当从用户语音申请中解析出参数时,这些参数的可能取值范畴。语音技能反对自定义实体或者援用平台提供的公共实体。
上图定义的参数,都有一个一一对应的实体,界面如下:
如果用户发动的申请里,并没有显式阐明想晓得哪一个城市的天气状况,此时咱们能够应用 精灵诘问
性能,向用户发动一个新的发问,比方: 你问的是哪一个城市
?从而获取 city 参数的值。
用意编辑页面里的多轮对话编辑也是一个很有用的性能:
上图的例子是,如果用户以后的申请曾经位于 weather
用意的解决上下文,在这个状况下用户再次诘问:那北京呢
?此时智能平台会判断出,这一轮的对话仍旧属于天气预报的用意,因而会将 city = 北京
这个参数串,发送给用户定义的业务实现接口。
技能后端编码
技能的后端编码是天猫精灵自定义技能开发的重头戏。点击 代码编辑
面板,能够为该技能针对的业务接口实现,抉择对应的服务部署形式。
在线开发模式同阿里云云原生开发即 FAAS,这两种形式均无需搭建本人的应用服务器,区别在于前者作为一款收费的云服务资源和在线开发环境,资源额度无限,更适宜疾速体验天猫精灵技能利用的开发流程,而不适宜用于技能的生产模式下部署。
因此我抉择了阿里云的 Serverless 产品 FAAS,能够间接在浏览器里进行技能后端服务的开发,调试,部署和运行。
顺次开明 API 网关,日志服务,函数计算,对象存储四个资源后,基于 Java Spring Boot 利用模板,疾速创立一个服务实现:
拜访 FAAS 环境的控制台 url:
这个后盾服务接口的 Java 实现代码,托管在 codeup
代码仓库上:
在开发部署页面,咱们能够查看部署日志,对 FAAS 实例的硬件参数进行调整等操作:
API 网关和 FC 计算服务的关系如下图所示:
点击 返回开发
,就能够在浏览器里应用 CloudIDE 进行 Java 开发了:
对于天天用 Visual Studio Code 进行 Angular 开发的笔者,对于这个浏览器里应用的 Cloud IDE 的外观再相熟不过了:https://workbench.aliyun.com/…
在 Cloud IDE 里能实现绝大多数惯例的开发操作,比方代码编辑,git 代码仓库提交,Maven 构建,一键部署等等:
该 Cloud IDE 提供的更多功能,能够通过 视图
-> 命令面板
里查看:
接下来,就能够在 Cloud IDE 基于模板生成的我的项目里,通过实现 GenieEntry 的 execute 办法,来编写自定义技能的业务逻辑了: