当前位置: 首页 > Web前端 > HTML5

一位前端开发工程师的天猫精灵测评报告

时间:2023-04-05 15:40:44 HTML5

虽然在普通用户看来,用语音向天猫精灵发送指令,然后收到后者语音回复的过程看似简单,但背后其实有人工智能的存在ASR(语音识别)、NLP(自然语言处理)、TTS(语音合成)等自然语言处理技术的参与和融合。我们先来看一个典型用户通过语音与天猫精灵进行交互的流程图。用户通过语音唤醒天猫精灵,天猫精灵接收用户语音并上传至智能应用平台。平台利用ASR(audio-to-text)和NLP(自然语言处理)技术,智能分析用户语音中包含的意图(通俗地说,就是用户当前期望天猫精灵完成什么样的操作)。平台会自动将当前的用户指令与开发者创建的相应技能和意图进行匹配。具体匹配过程是将平台解析的所有参数信息通过HTTPS请求访问到开发者提供的服务接口。开发者负责实现服务(托管在自己的应用服务器或阿里云Serverless环境),接收平台发送的请求参数,执行业务逻辑(如天气预报查询、拼图、语音游戏等),并组装回复结果。智能应用平台在执行完业务逻辑后,收到开发者服务返回的响应数据后,通过TTS(text-to-audio)合成音频,推送回天猫精灵。天猫精灵通过麦克风播放接收到的音频,完成本轮与用户的交互。分析这个交互场景,不难发现需要开发者手动完成的过程包括以下两个方面:在AliGenie技能应用平台上创建新的技能和意图,接收用户的语音请求。应用程序开发人员选择是将需要在应用服务器中完成的业务逻辑编写,还是在Serveless运行环境中编写以实现新技能。新技能创建及意图定义登录AliGenie技能应用平台,点击创建新技能,通过向导创建新技能。以下是天猫精灵技能创建页面。本页url:https://iap.aligenie.com/cons...其中技能id为89247,id为2022042968002,为技能的创建时间。从开发过程的状态转换图可以看出,一个新的语音技能在创建之后需要经过以下几个步骤,最终才能正式发布给用户:定义语音交互模型,构建后台-端服务逻辑,增加屏幕展示页面(可选)(可选步骤,略过)测试:可以使用真机测试或者网页测试来测试技能属性维护的详情页,我们可以观察到如下信息:[外链图片传输失败,源站可能有防盗链机制,建议保存图片直接上传(img-XI038Jh9-1652060198031)(https://upload-images.jianshu...)】技能最重要的属性就是维持技能召唤词。当用户向天猫精灵发送语音命令时,只有包含技能调用词时,天猫精灵才会执行相应的技能处理状态。在我的测评中,我选择的技能调用词是王梓熙是谁,因为调用词不能和平台已有的调用词冲突。语音技能可以包含多个意图。Intent代表用户与天猫精灵互动对话的目的。例如,我的自定义技能包含三个意图:体重、天气查询和欢迎意图。IntentID即意图ID,需要在技能开发者编写的代码实现中使用。我们在上图中选择一个intent打开,比如天气查询intent,打开它的编辑页面,可以看到一个单轮对话表情维护界面。前面说过,一个语音技能可以对应多个意图,所以如果用户向天猫精灵发起的语音指令与单轮对话表情中维护的语句相同或相似,则判定命中相应的意图。例如,当用户向天猫精灵发起的对话类似于以下类型的句子:杭州今天天气怎么样?Intentid,天气,传递给应用程序业务接口。在我们自己写的程序中,如果得到天气id,就知道当前用户希望查询今天杭州市的天气情况。这时候我们就可以调用RestfulAPI进行天气查询来完成业务逻辑了。单轮对话表情的参数定义我们观察到,在预期的单轮对话表情维护界面中,杭州和今天这两个词被特殊颜色突出显示。这意味着它们是对话表达式中的参数。显然,天气预报服务只对特定的城市和日期有意义,所以这些参数也需要发送给应用开发者编写的服务接口。下图是weather,天气预报intent的参数列表页面,其中城市的id为city,我们可以在应用界面的代表中使用这个id来获取用户语音中包含的城市名称要求。上图中ParameterName右边的那一列叫做AssociatedEntity。实体是自然语言处理领域的短语集合,包括关键字和应用领域的术语。例如,在天气预报领域,关键字是时间、地点和天气情况。在智能应用平台的处理流程中,实体负责告诉平台,当从用户语音请求中解析出参数时,这些参数可能的取值范围。语音技能支持平台提供的自定义实体或参考公共实体。上图中定义的参数都有一一对应的实体,接口如下:如果用户发起的请求没有明确表示要知道哪个城市的天气情况,那么我们可以使用向用户询问的向导查询功能发起一个新问题,例如:您要问的是哪个城市?获取城市参数的值。意图编辑页面中的多轮对话编辑也是一个很有用的功能:在上面的例子中,如果用户当前的请求已经在天气意图的处理上下文中,此时用户再问:北京呢?此时智能平台会判断本轮对话仍属于天气预报意图,因此会向用户自定义服务实现接口发送参数字符串city=Beijing。技能后台编码技能后台编码是天猫精灵自定义技能开发的重头戏。点击代码编辑面板,为该技能针对的业务接口实现选择对应的服务部署方式。在线开发模式与阿里云的云原生开发相同,即FAAS。这两种方式都不需要自己搭建应用服务器。不同的是,前者是免费的云服务资源,是资源有限的在线开发环境,更适合快速体验天猫精灵技能应用的开发过程,不适合部署在技能的生产模式中。因此,我选择了阿里云的serverless产品FAAS,可以直接在浏览器中开发、调试、部署和运行技术后端服务。依次打开API网关、日志服务、函数计算、对象存储四个资源后,快速创建一个基于JavaSpringBoot应用模板的服务实现:访问FAAS环境的控制台url:后台的Java实现代码服务接口托管在codeup代码仓库上:在开发部署页面,我们可以查看部署日志,调整FAAS实例的硬件参数等:API网关与FC计算服务的关系展示下图中:点击开发,就可以使用CloudIDE进行Java开发了:对于每天使用VisualStudioCode进行Angular开发的笔者来说,对于这款浏览器所使用的CloudIDE的模样是再熟悉不过了:https://workbench.aliyun.com/...inCloud大部分常规开发操作都可以在IDE中完成,比如代码编辑、git代码仓库提交、Maven构建、一键部署等:更多功能由CloudIDE可以在view->commandpanel中查看:之后就可以在CloudIDE生成的基于模板的项目中实现GenieEntry的execute方法来编写自定义技能的业务逻辑了: