深入理解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? ...
随机推荐
- 微信公众号开发之怎样将本机IP映射成外网域名
近期一个项目须要用到微信公众号的网页授权登录,在研究这个公众号的时候遇到各种困难,现将自己的一些心得总结一下. 我想进行微信公众号开发遇到的第一个困难就是微信公众号必须输入一个外网能够訪问的域名,在网 ...
- 简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个 ...
- 【codeforces 750E】New Year and Old Subsequence
time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- CodeBlocks 配色方案设置
最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...
- TCP可靠的传输机制
TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(一般是一个客户和一个server)在彼此交换数据包之前必须先建立一个TCP连接.这一过程与打电话非常相似.先拨号振铃,等 ...
- 查询系统状态 内存大小 cpu信息 设备负载情况
1.1 查看内存状态 /proc/meminfo里面存放着内存的信息 查看内存命令(包括虚拟内存swap): free -h (低版本系统可能不支持-h) 或者 free -m (以mb单位显示) a ...
- mongose TypeError: Cannot read property 'findOne' of undefined
最近在node的一个项目中,需要在model的一个数据表中写一个钩子函数去调用另外一个文件中的方法,一开始我采用了将此方法放入到global中,直接从global.meteod这样去获取.后来我又尝试 ...
- Method for performing cache coherency in a computer system
In a computing system, cache coherency is performed by selecting one of a plurality of coherency pro ...
- 强大的 pdf 编辑器 —— Acrobat
菜单栏中的 [编辑](Edit)⇒ [编辑文本和图像](Edit Text & Images) 可以随意地编辑当前 pdf 中的文本信息,和图像信息: pdf 格式的转换,更是不在话下. 转 ...
- SQL中的JOIN语法详解
参考以下两篇博客: 第一个是 sql语法:inner join on, left join on, right join on详细使用方法 讲了 inner join, left join, righ ...