语音助手(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. 以Network Dataset(网络数据集)方式实现的最短路径分析

    转自原文 以Network Dataset(网络数据集)方式实现的最短路径分析 构建网络有两种方式,分别是网络数据集NetworkDataset和几何网络Geometric Network,这个网络结 ...

  2. MySQL复制格式小结

    基于语句级的复制 binlog=statement   优点: (1)binlog文件较小. (2)日志是包含用户执行的原始SQL,方便统计和审计. (3)出现最早可binlog.兼容较好. (4)b ...

  3. [React] Recompose: Theme React Components Live with Context

    SASS Bootstrap allows us to configure theme or branding variables that affect all components (e.g. P ...

  4. [Postgres] Filter Data in a Postgres Table with Query Statements

    We have all this data, but how do we answer questions about it? In this lesson we’ll learn how to fi ...

  5. php正则及常用正则函数怎么用

    php正则及常用正则函数怎么用 一.总结 一句话总结: 能够使用正则的函数:preg_match();preg_match_all();preg_replace();preg_grep();preg_ ...

  6. 【t061】游览路线

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 话说LCINF信息组来到烟台参加夏令营.一天,大家提议出去游玩,来到了烟台最繁华的地方.由于他们对烟台 ...

  7. 微信小程序bnner滚动

    首先是轮播图,autoplay 自动播放,interval 轮播的时间,duration 切换速度,可以根据自己需求去添加. Delete:是删除按钮,加载进来是隐藏的,需用户点轮播图进去后,轮播图全 ...

  8. K 线图的认识

    股市中的一个铁律就是:如果有个操盘规则广为所知,它会自动平衡,该规则就会失效. 1. 基本经济学概念 大盘:market index,上证综合指数(上海证券综合指数): 其样本股是全部上市股票,包括 ...

  9. JAVA从本机获取IP地址

    JAVA从本机获取IP地址 论述: 此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多博客,网上一个比较普遍的说法是通过InetAddress.getLocalHost().g ...

  10. VS 2017正式版

    Visual Studio 2017正式版发布全纪录 又是一年发布季,微软借着Visual Studio品牌20周年之际,于美国太平洋时间2017年3月7日9点召开发布会议,宣布正式发布新一代开发利器 ...