深入理解Amazon Alexa Skill(一)
语音助手(Virtual Personal Assistants, VPA)是物联网智能家居中很火的一个领域,用户可以通过语言作为入口来控制家里各种各样的设备,而亚马逊的Alexa(echo,echo dot)是做的最早也是最优秀的一款产品,衍生出了很大的开发生态圈。本文基于亚马逊的官方文档试图记录作者对其Skill工作原理的理解。
这不是一个手把手Skill开发入门教程,仅仅讲解了概念与个人的一些理解
宏观概念
Alexa提供一系列内置的功能,比如回答问题,语音游戏,控制智能家居设备,这些功能都是由skill实现的。亚马逊为Alexa skill提供了一个开放的开发环境,类似于google的Android,任何开发者都可以自由的开发skill并上传到市场中供Alexa的用户使用。Skill调用的基本过程:识别用户调用请求——根据输入语音判断用户意图——执行功能。
更具体来讲,一个skill主要分为两部分:语音用户接口部分(Voice User Interface (VUI) )和功能部分。VUI部分是运行在亚马逊的Alexa云上,Alexa根据设置的规则和用户的语音判断调用哪个skill。当选择调用你的skill后,才会执行到skill的功能部分。那么功能部分是怎么实现的呢?其实很简单,就是Alexa云发一个JSON格式的数据的HTTPS请求给你预设好的服务器(可以自己搭建web服务器来处理这个HTTPS请求,也可以用AWS的lambda设置alexa来触发)。这个JSON数据就是Alexa规定好的“协议”了,详见文档,发来的JSON内容包括用户intent,用户和设备的ID,本次会话的ID,访问用户隐私数据的令牌,用户控制设备的的token(Oauth2.0)等等很多。你自己Web服务器(自己搭建需要验证签名来判断这请求是不是Alexa服务器发来的)/Lambda的代码来处理这个发来的JSON,同时你再给Alexa回复JSON来响应。事实上,skill的功能代码可以完成任意功能,比如使用用户的token来向第三方云发送请求,实现根据语音控制他的智能家居设备。
Skill类型(Skill Models)
官方文档将skill分为了几个类别,如定制(custom)、智能家居、资讯等。
定制类型的skill需要开发者自己处理skill中涉及的几乎所有步骤:
- intents: skill可以处理的请求,即提供的功能,例如点餐,叫出租车,查天气,等等。
- interaction model: 定义出用户如何说才能调用intents,相当于图形化中点哪个按钮才能触发预设的功能。例如:“叫辆车”映射到“叫出租”的功能。
- invocation name: 定义一个Alexa识别你这个skill的名字,类似于Android App的名字,如“抖音”。因为VPA需要知根据用户说的语音来判断到底用户想启用哪个skill,安卓中用户可以明确的用手点击屏幕的App图标,但是如何判断用户要确切的启用哪个skill对语音交互来说实现就很困难。Nan Zhang等发表在S&P 2019的工作就针对这点提出了voice squatting攻击,基本想法是利用口音方言、礼貌用语(“请”,“please”)的差别,让用户调用自己的恶意skill。此外还有个印度哥Deepak Kumar发现方言误发音甚至是可预测的。
- 开发者可选引入一些除了声音以外的交互内容,比如有的高端VPA已经支持触摸屏了。
而其他类型的skill亚马逊给提供了预定义的模板,开发者不需要处理所有的步骤。比如智能家居类型(Smart Home pre-built model),就是预定义来控制门锁、灯等设备的,选择了这个模板就丧失了灵活的定制性,但是可以更方便快速的开发。使用这类的skill,由Smart Home Skill API 定义了:
- device directives: skill可以处理的请求,比如开关、锁门、改变灯的亮度等等功能。其实就像intents。
- 用户调用指令要说的话:其实就是interaction model。
开发者需要自己定义自己的skill如何响应某一个指令(directive),例如,需要写代码完成收到“turn on the light”指令时的功能,代码需要使用亚马逊的另一个服务AWS Lambda来完成。注意,使用Smart Home Skill API 就只能响应这些API里预设的特殊指令(device directives)。(这里有个疑问,alexa是如何判定调用哪个skill来管理自己家灯的?)
用户是如何与skill交互的
用户做出请求——Skill收集补充信息——用户提供需要的信息——skill完成请求功能
Custom skill的例子: User: Alexa, get high tide for Seattle from Tide Pooler.
其中Tide Pooler是skill的invocation name ,调用custom skill的用户必须明确说明这个skill的调用名称。“get high tide for Seattle ”就是需要映射到intent的语音了。
智能家居的例子: User: Alexa, turn on the living room lights.
“turn on the...”会被Alexa识别成预设的interaction model,判断用户是要开灯。
“living room lights”是用户之前设置的具体设备的名称,而不是skill的名字,Alexa会将device directive发送给可以控制living room lights这个设备的智能家居skill,这个skill再通过与设备的云平台来交互,打开这个具体的设备,并返回结果给Alexa。
转载请注明出处 https://www.cnblogs.com/ascii0x03/p/10520676.html
深入理解Amazon Alexa Skill(一)的更多相关文章
- 深入理解Amazon Alexa Skill(三)
本节来讨论Alexa Skill中涉及到的授权问题. Alexa内功能的授权 Alexa会发给skill用户的token,然后skill代码使用这个token来访问Web API访问用户的Alexa内 ...
- 深入理解Amazon Alexa Skill(四)
本节利用三星Smartthings Classic物联网平台的web service smartapp,实现了一个Alexa智能家居skill的例子,由此来了解Alexa是如何控制其他云的智能家居设备 ...
- 深入理解Amazon Alexa Skill(二)
理解skill调用 本节来更详细的讨论alexa是如何确定调用哪个skill的. 参考:https://developer.amazon.com/zh/docs/custom-skills/under ...
- Amazon Alexa登录授权(Android)
访问Alexa的API,必须要携带AccessToken,也就是必须要登录授权,本文主要记录Amazon Alexa在Android平台上的登录授权过程. 一.在亚马逊开发者平台注册应用 进入亚马逊开 ...
- Amazon Alexa 语音识别1 : 简介
Alexa是Amazon自家的语音识别技术,需要配合自家的Echo音箱使用.开发者可以在Amazon上建立自己的程序(Skill)来连接到自己的应用或是硬件.例如,用户家里有一套xx牌的智能灯,现在希 ...
- Amazon Alexa 语音识别2 : 设置
开发者建立的Skill的主要设置项目都在Skill的console内.需要填写的东西大致有以下几个: 1.Skill 名字.这个名字是用户用来唤醒你这个Skill的. 2.Intent Schema: ...
- 通过Amazon AWS 十分钟搭建私人主机 自由的不要不要的
首先承认有点标题党了,当时自己搞的时候可不止十分钟,好吧,我承认是坑太多了,所以特意开了一篇博文,就是要准备尝试的和我一样的菜鸟们,可以真正的十分钟搞定. 当然高手可能用不上十分钟. 首先,就是 ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 2.Programming assignments:Trigger word detection
Expected OutputTrigger Word Detection Welcome to the final programming assignment of this specializa ...
- How do I learn machine learning?
https://www.quora.com/How-do-I-learn-machine-learning-1?redirected_qid=6578644 How Can I Learn X? ...
随机推荐
- [SCSS] Organize SCSS into Multiple Files with Partials
Tired of dealing with monolithic CSS files? Are requests for multiple CSS files hurting your perform ...
- uml精粹——11.活动图(及整个读书笔记分享)
11.活动图activity diagram 活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...
- 百度消息推送SDK探究(并附上最简推送Demo)
上一篇<百度消息推送REST API探究>中了解了如何使用REST API推送消息,这一篇我们来看一下百度消息推送为我们提供的SDK. 帮助文档:http://developer.baid ...
- Oracle数据库零散知识09 -- DBLink的创建(转)
通过创建database link实现Oracle跨数据库查询的方法 在Oracle本地数据库端执行赋权dbuser帐号 SQL> grant create database link to d ...
- 【BZOJ 1018】 [SHOI2008]堵塞的交通traffic
[题目链接]:http://www.lydsy.com/JudgeOnline/problem.php?id=1018 [题意] [题解] 按照这里的题解写的http://blog.csdn.net/ ...
- Lua转让C功能
在上一篇文章中(C调用lua函数)中.讲述了怎样用c语言调用lua函数,通常,A语言能调用B语言,反过来也是成立的.正如Java 与c语言之间使用JNI来互调.Lua与C也能够互调. 当lua调用c函 ...
- Windows应用程序的消息处理机制
(1)操作系统接收到应用程序的窗体消息,将消息投递到该应用程序的消息队列中. (2)应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息. 取出消息后,应用程序能够对消息进行 ...
- 语言的学习 —— 西班牙语(español)
联合国六大官方语言:英语.法语.俄语.汉语.西班牙语.阿拉伯语: 在七大洲中,主要是在拉丁美洲国家中(巴西.伯利兹.法属圭亚那.海地等地除外).很多说西班牙语的人把他们的语言称为西班牙语(españo ...
- TensorFlow 学习(四)—— computation graph
TensorFlow 的计算需要事先定义一个 computation graph(计算图),该图是一个抽象的结构,只有在评估(evaluate)时,才有数值解,这点和 numpy 不同.这张图由一组节 ...
- fiddler AutoResponder(文件代理)
测试网站https://www.meishij.net/ 目标:使用fiddler完成图片的替换 1.首先找到图片地址,然后在fiddler中查找对应图片 2.将对应的图片请求拖入到fiddler的A ...