语音助手(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(一)的更多相关文章

  1. 深入理解Amazon Alexa Skill(三)

    本节来讨论Alexa Skill中涉及到的授权问题. Alexa内功能的授权 Alexa会发给skill用户的token,然后skill代码使用这个token来访问Web API访问用户的Alexa内 ...

  2. 深入理解Amazon Alexa Skill(四)

    本节利用三星Smartthings Classic物联网平台的web service smartapp,实现了一个Alexa智能家居skill的例子,由此来了解Alexa是如何控制其他云的智能家居设备 ...

  3. 深入理解Amazon Alexa Skill(二)

    理解skill调用 本节来更详细的讨论alexa是如何确定调用哪个skill的. 参考:https://developer.amazon.com/zh/docs/custom-skills/under ...

  4. Amazon Alexa登录授权(Android)

    访问Alexa的API,必须要携带AccessToken,也就是必须要登录授权,本文主要记录Amazon Alexa在Android平台上的登录授权过程. 一.在亚马逊开发者平台注册应用 进入亚马逊开 ...

  5. Amazon Alexa 语音识别1 : 简介

    Alexa是Amazon自家的语音识别技术,需要配合自家的Echo音箱使用.开发者可以在Amazon上建立自己的程序(Skill)来连接到自己的应用或是硬件.例如,用户家里有一套xx牌的智能灯,现在希 ...

  6. Amazon Alexa 语音识别2 : 设置

    开发者建立的Skill的主要设置项目都在Skill的console内.需要填写的东西大致有以下几个: 1.Skill 名字.这个名字是用户用来唤醒你这个Skill的. 2.Intent Schema: ...

  7. 通过Amazon AWS 十分钟搭建私人主机 自由的不要不要的

      首先承认有点标题党了,当时自己搞的时候可不止十分钟,好吧,我承认是坑太多了,所以特意开了一篇博文,就是要准备尝试的和我一样的菜鸟们,可以真正的十分钟搞定.  当然高手可能用不上十分钟. 首先,就是 ...

  8. 课程五(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 ...

  9. 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? ...

随机推荐

  1. poi读取excell表格

    原文链接:http://blog.csdn.net/qq_37936542/article/details/79024847 最近项目需要实现一个将excell中的数据导入数据库,在网上找到这篇文章, ...

  2. web项目开启日志打印

    原文链接:http://blog.csdn.net/qq_37936542/article/details/79045188 参考文章地址:点击打开链接,写的很清晰 一:导入log4j包或依赖     ...

  3. href="javascript:;" href="javascript:void(0);" href="#"区别

    一.href="javascript:;" 这种用法不正确,这么用的话会出现浏览器访问"javascript:;"这个地址的现象: 二.href="j ...

  4. 全栈JavaScript之路( 二十五 )訪问元素的样式

    不论什么支持style 特性的元素在 ,在其DOM  节点 对象中都有一个 style 属性与之相应. 这个style 对象是 CSSStyleDeclaration类型的实例,包括着html sty ...

  5. 【u022】车的放置

    [问题描述] [题解] 先考虑一个最简单的情况.如一个n*n的棋盘.然后要放k个车. 我们可以先选出k行即C(n,k); 然后在列上对这k个棋子进行一次全排列即A(n,k); 比如k = 4;N=5 ...

  6. Python 数组[],元组(),字典{}的异同

    序列 Python有6中内建的序列,在这里我们重点讨论两种,数组和元组.所有序列都可以做某些特定的操作,大致上常用的是:加,乘,索引,分片以及检查某个元素是否属于序列的成员. Python还提供一些内 ...

  7. 虚拟机的ip网络设置的选择

    首先看一下vm的这几个设置 通过截图可以基本看到几个网络设置的区别,具体体现在虚拟机装好以后,网络设置会多出两个适配器,不同模式会分配不同区段的ip,需要固定时主要区段要求 所以总结一下 1.桥连,适 ...

  8. iPhone6/6Plus下app状态栏内容放大问题处理

    分为兼容模式和高分辨率模式. 兼容模式 当你的 app 没有提供 3x 的 LaunchImage 时,系统默认进入兼容模式,大屏幕一切按照 320 宽度渲染,屏幕宽度返回 320:然后等比例拉伸到大 ...

  9. 【codeforces 782A】Andryusha and Socks

    [题目链接]:http://codeforces.com/contest/782/problem/A [题意] 如果手套没有成一双,那么其中的一只就会被放在桌子上; 问你桌子上手套的只数最多的时候有几 ...

  10. [GeekBand] 设计模式之观察者模式学习笔记

    本文参考文献::GeekBand课堂内容,授课老师:李建忠 :网络资料: http://blog.csdn.net/hguisu/article/details/7556625 本文仅作为自己的学习笔 ...