天猫精灵测评与开发案例

点此查看 所有教程、项目、源码导航

文章目录

  • 1. 背景
  • 2. 概念
    • 2.1 天猫精灵
    • 2.2 天猫精灵开放平台
    • 2.3 技能应用平台
    • 2.4 技能
    • 2.5 语音技能
  • 3. 创建技能
    • 3.1 登录
    • 3.2 创建语音技能
    • 3.3 填写技能基本信息
    • 3.4 选择开发方式
  • 4. 开发流程
    • 4.1 概述
    • 4.2 语音交互模型
    • 4.3 开发后端服务
    • 4.4 代码编辑
    • 4.5 使用Git保存源码
    • 4.6 代码部署
    • 4.7 在线测试
    • 4.8 真机测试与发布
  • 5. 小结

1. 背景

作为一个码农,程序猿,不能总沉浸在自己的世界里,也得看看外面的繁华和发展。

我时常关注阿里云开发者社区,这里经常会有一些新产品、新想法、新技能,从中我能获取一些产品、开发、测试、运维相关的思维火花。

近期开发者社区推出了天猫精灵的评测活动,正好之前我在杭州菲住布渴酒店体验过,确实有点意思,可以控制电视、灯光、窗帘,也可以跟用户聊天谈心。

但是实际上,我之前还不确定天猫精灵是否有面向开发者的开放平台,也不甚清楚此类开放平台会如何设计、接入,此次借此活动,也是对这种智慧硬件的一次了解和学习。

2. 概念

2.1 天猫精灵

如下图,天猫精灵是一个可以和用户聊天沟通的硬件产品,类似的产品还有百度的小度。可以通过语音跟它沟通,而它可以通过上面的软件应用,来控制家居设备。所以使用起来还是比较科幻的。
在这里插入图片描述

2.2 天猫精灵开放平台

天猫精灵本质上也是个计算机了,上面的应用有阿里内置的,也有程序员开发的。开放平台就是程序员接入天猫精灵的平台,上面有开发文档,有开发流程,有在线测试工具。开放平台就是程序员的一站式开发服务平台。

2.3 技能应用平台

开放平台包含物联网、AI、技能、数字应用相关的平台,用来开发不同种类的应用。技能应用平台主要面向语音交互,也就是开发跟天猫精灵聊天的应用。
在这里插入图片描述

2.4 技能

对程序员来说,就是开发一个应用。但是对天猫精灵来说,就是它学会了一个新的技能。这个技能就是程序员通过程序赋予给它的。

2.5 语音技能

天猫精灵支持的技能类型比较多,包含语音技能、小程序、安卓APP应用、H5小游戏。很好很强大,不过本文我们选择最经典的语音技能进行测评。
在这里插入图片描述

3. 创建技能

3.1 登录

首先,登录天猫技能应用平台,地址:https://iap.aligenie.com/,然后从控制台进入技能应用平台。
在这里插入图片描述

3.2 创建语音技能

如下图,选择自定义技能,这样我们能享有充分的灵活度。
在这里插入图片描述

3.3 填写技能基本信息

填写技能的名字,此处我们开发一个日程小秘书,可以提醒我们日常的待办事项。技能调用词的意思是:当我们对天猫精灵说出这个词时,就会进入我们开发的技能。
另外此处可以选择后端服务,也就是我们的代码,的部署方式。我们可以选择FAAS,直接使用阿里云在线开发、部署、调试、运行。后面会详解描述FAAS使用过程。
在这里插入图片描述

3.4 选择开发方式

首先选择熟悉的语言,这个根据个人喜好选择即可。然后选择空白模板,这样我们能更自由的发挥。
在这里插入图片描述

4. 开发流程

4.1 概述

终于进入激动人心的开发环节了,我们选择了阿里云的FAAS模式,所以所有开发流程都可以在线上完成。阿里的开发实力还是相当强大的,作为程序员都知道,写普通程序或许比较容易,但是写一个用来开发程序的程序,那就不是一个简单的事情了。

好的,我们通过概览里面的示意图,可以看到开发过程主要分基础信息、语音交互模型、构建后端服务、添加屏显页面、测试、发布。接下来我们逐一实现。
在这里插入图片描述

4.2 语音交互模型

语音交互模型我们需要定义意图和实体。意图就是天猫精灵理解我们想要干啥,这个用户想要做的事情抽象为意图。日程小秘书需要的意图如下:

很好理解,当我们使用日程小秘书时,小秘书会欢迎我们。然后小秘书还可以支持日程查询、日程添加的操作。需要注意的是,这三种操作到代码里面,会匹配welcome/query/add标识,这就是现实中的意图和代码中的字符串的对应关系了。
在这里插入图片描述
然后日程添加的时候,我们需要知道添加何种待办事项。这个在程序里面叫做参数,我们需要先建立一个实体来对应待办事项这个概念:
在这里插入图片描述
最后在日程添加意图中,关联这个实体概念。这样当用户对天猫精力说【吃饭】的时候,吃饭就会进入item这个参数了。
在这里插入图片描述

4.3 开发后端服务

接下来我们需要创建后端服务应用,来决定如何编辑、部署代码。先点击创建应用。
在这里插入图片描述
然后选择FAAS开发模式,这个模式下开发部署测试全程线上,还是比较爽快的。
在这里插入图片描述
然后使用阿里云账号登录云开发平台。
在这里插入图片描述
接下来是一番操作授权,我个人感觉比较麻烦,本来此处是有若干张具体步骤的截图,我感觉意义不大就去掉了。反正此处就是各种授权、开通、同意,如下图之类的东西。
在这里插入图片描述

4.4 代码编辑

终于开始写代码了,点击前往开发:
在这里插入图片描述
这个云开发平台,核心的编辑器感觉就是个VSCode。
在这里插入图片描述
我们编写核心接入类代码如下,其实很好理解,根据不同的意图和参数决定不同的行为。


/*** @Description 天猫精灵技能函数入口**/
public class GenieEntry extends AbstractEntry {@Overridepublic ResultModel<TaskResult> execute(TaskQuery taskQuery, Context context) {String token = taskQuery.getToken();// 用户标志WorkDao workDao = new WorkDao();context.getLogger().info("taskQuery: " + JSON.toJSONString(taskQuery));ResultModel<TaskResult> res = new ResultModel<>();TaskResult taskResult = new TaskResult();// 从请求中获取意图参数以及参数值Map<String, String> paramMap = taskQuery.getSlotEntities().stream().collect(Collectors.toMap(slotItem -> slotItem.getIntentParameterName(), slotItem -> slotItem.getStandardValue()));// taskResult.setReply("你的意图是:" + taskQuery.getIntentName());String msg = "";try {// 处理名称为 welcome 的意图if ("welcome".equals(taskQuery.getIntentName())) {msg = "欢迎使用日程小秘书,我会开心陪伴你处理好每件工作哦";} else if ("query".equals(taskQuery.getIntentName())) {taskResult.setReply("您今天的任务是:吃饭、睡觉、打豆豆");List<Work> works = workDao.getAll();if (works.size() == 0) {msg = "主人,您今天的事情都已干完,厉害炸了!";} else {msg = "主人,您今天待办的工作有:";for (Work w : works) {msg += w.getItem() + ",";}}} else if ("add".equals(taskQuery.getIntentName())) {Work work = new Work();work.setToken(token);work.setItem(paramMap.get("item"));workDao.insert(work);msg = "好的,主人,我记下来了";} else {msg = "对不起主人,这事我处理不了";}} catch (Exception e) {msg = e.getMessage();}taskResult.setReply(msg);taskResult.setExecuteCode(ExecuteCode.SUCCESS);taskResult.setResultType(ResultType.RESULT);res.setReturnCode("0");res.setReturnValue(taskResult);return res;}
}

另外我们将日程数据存入数据库,数据库操作使用了ApacheCommonDbUtils,这个库比较简单,封装代码如下:

/*** 数据访问*/
public class WorkDao {/*** 新增*/public void insert(Work work) throws Exception {Connection conn = ConnectionUtils.getConnection();String sql = "insert into work(token,item)values(?,?)";Object[] params = { work.getToken(), work.getItem() };QueryRunner runner = new QueryRunner();runner.update(conn, sql, params);ConnectionUtils.releaseConnection(conn);}/*** 移除*/public void deleteById(String id) throws Exception {Connection conn = ConnectionUtils.getConnection();String sql = "delete from work where id =?";Object[] params = { id };QueryRunner runner = new QueryRunner();runner.update(conn, sql, params);ConnectionUtils.releaseConnection(conn);}/*** 更新*/public void update(Work work) throws Exception {Connection conn = ConnectionUtils.getConnection();String sql = "update work set token=?,item=? where id =?";Object[] params = { work.getToken(), work.getItem(), work.getId() };QueryRunner runner = new QueryRunner();runner.update(conn, sql, params);ConnectionUtils.releaseConnection(conn);}/*** 获取一个*/public Work getById(String id) throws Exception {Connection conn = ConnectionUtils.getConnection();String sql = "select * from work where id =?";Object[] params = { id };QueryRunner runner = new QueryRunner();Work work = (Work) runner.query(conn, sql, new BeanHandler<Work>(Work.class), params);ConnectionUtils.releaseConnection(conn);return work;}/*** 获取全部*/public List<Work> getAll() throws Exception {Connection conn = ConnectionUtils.getConnection();String sql = "select * from work ";QueryRunner runner = new QueryRunner();List<Work> works = runner.query(conn, sql, new BeanListHandler<Work>(Work.class));ConnectionUtils.releaseConnection(conn);return works;}
}/**- 数据库连接工具类*/
public class ConnectionUtils {// 连接所需的固定参数private static String driver = "com.mysql.jdbc.Driver";private static String url = "jdbc:mysql://39.101.138.173:3306/calendar?useUnicode=true&characterEncoding=utf-8&useSSL=false";private static String user = "root";private static String password = "xxxxxx";/**- 获取连接- - @throws ClassNotFoundException*/public static Connection getConnection() throws SQLException, ClassNotFoundException {Class.forName(driver);return DriverManager.getConnection(url, user, password);}/**- 释放连接*/public static void releaseConnection(Connection conn) {if (conn != null)try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}

此处解释几点:

  • 天猫精灵项目基于maven构建,所以我们可以轻易地通过pom.xml引入各种依赖库。
  • 天猫精灵访问公网资源,例如数据库或者HTTP协议的API接口,并无限制。

4.5 使用Git保存源码

跟VSCode类似,直接使用云开发平台提交代码即可。千万不要忘了提交,不然下次进入云开发平台,代码就丢了。
在这里插入图片描述

4.6 代码部署

点击左侧部署菜单,然后选择【预发环境】,点击最下面的部署按钮,即可将天猫精灵部署到预发环境。此处的语法环境可以理解为测试环境。
在这里插入图片描述
点击部署后,控制台会提示部署信息,直到最后部署完成。
在这里插入图片描述

4.7 在线测试

通过在线测试,可以模拟与天猫精灵的会话过程。这个很好理解,就是通过文字代表了语音而已。看看我们日程小秘书的运行过程。是不是有点意思哈。
在这里插入图片描述

4.8 真机测试与发布

由于真机尚未拿到,所以暂时未进行真机测试与正式发布工作,此处简单解释下。

真机测试,就是将开发的技能应用,使用真实的设备进行测试,这样的话更接近真实使用环境,测试效果更加。

发布的话,肯定是需要经过阿里审核的,避免出现质量低下,或者出现不良内容。

5. 小结

其实语音技能还支持屏显页面开发,当然还提供了很丰富的接口供开发者调用,此处不再详细介绍,感兴趣的同学可以登录开放平台自行研究。

从天猫精灵开放平台的推出,可以看到现在很多产品,都是在建立生态。不仅仅是依靠一家公司,还有全世界开发者的合力,凝聚更强大的生命力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/47556.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天猫精灵的开发者生态

文章转自 智联网事 (欢迎关注&#xff0c;每周一篇原创&#xff0c;直至.... No End) https://mp.weixin.qq.com/s?__bizMzI3NDE2NDMwNQ&mid2649905740&idx1&sn958e33454bf53011687783846619e8e1&chksmf31ec572c4694c642baffdec5cac0e26e403afda12487f611ee4…

如何快速搭建一个像“天猫精灵”的智能语音助手?

不看这几篇好文&#xff0c;就别说自己了解物联网 天猫精灵相信大家都不陌生了&#xff0c;它是阿里巴巴于2017年7月5日发布的AI智能终端品牌。让用户以自然语言对话的交互方式&#xff0c;实现影音娱乐、购物、信息查询、生活服务等功能操作&#xff0c;成为消费者的家庭助手。…

【TB-02模组专题②】学习如何对接天猫精灵语音控制的过程;

本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写。如有不对之处&#xff0c;请留言&#xff0c;我们及时更改。 1、BLE MESH开发环境linux版搭建&#xff0c;点亮一盏LED灯&#xff01;&#xff1b; 2、简单学习如何对接…

Aligenie语音开发平台(天猫精灵)的对接记录

首先找到阿里语音开发平台&#xff1a; 用自己的淘宝号登录&#xff0c;进入控制台&#xff1a; 添加新技能&#xff1a; 这里以智能家居接入为例&#xff0c;填写以下信息&#xff0c;填完点击下一步&#xff1a; 填写服务配置&#xff1a; 到此为止&#xff0c;语音开发平台的…

天猫精灵家居对接第三方设备(详细版)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言补充准备阶段&#xff08;内网映射到外网&#xff09;一、天猫精灵官网配置准备二、天猫精灵部分实现代码三、天猫精灵配置技能广场四、天猫精灵语音调试测试总…

如何让 ChatGPT 充当细致入微的 Java 代码优化工? | 得物技术

注&#xff1a;本文使用 New Bing&#xff08;GPT4.0&#xff09;演示 让他扮演一个 Java 软件开发者 第一步&#xff1a;我们让 ChatGPT 扮演一个 Java 软件开发者的角色 提示词插件&#xff1a;地址&#xff1a;ChatGPT BingChat GPT3 Prompt Generator App (Streamlit) - a…

低代码是行业毒瘤吗?ChatGPT这样回答

一、低代码现状 从2019年开始低代码领域备受资本市场关注&#xff0c;在争议中不断发展&#xff0c;至今仍存在诸多尚未厘清的概念有待探讨&#xff0c;比如低代码是行业毒瘤吗&#xff1f; 根据对行业近况的搜罗&#xff0c;总结以下现状&#xff1a;当前低代码行业在中国面…

万亿赛道大爆发,are you ready? “2022首届AIGC共创共建论坛”来了!

图片来源&#xff1a;由无界版图 AI 绘画工具生成 12月初的这个周末&#xff0c;ChatGPT在科技圈彻底火了&#xff0c;这是OpenAI新推出的AI聊天机器人&#xff0c;它就像科幻电影的智能助理&#xff0c;不管什么问题&#xff0c;它都能给出最优解。AIGC&#xff0c;人工智能内…

QQ 群聊美少女语音AI(ChatGLM 本地化版本)

QQ 群聊美少女语音AI&#xff08;ChatGLM 本地化版本&#xff09; ✨ 基于 go-cqhttp 以及 VITS-fast-fine-tuning ChatGLM 实现 ✨ Combination of ChatGLM and VITs anime girl AI voice and used in QQ robot 项目地址&#xff1a;https://github.com/Panzer-Jack/ChatGL…

谷歌、OpenAI 都白干,开源才是终极赢家!谷歌内部文件泄露:欲借开源打败 OpenAI...

&#xff09;省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年4月份热门报告合集 无需翻墙&#xff0c;ChatGPT直接使用 万字干货&#xff1a;ChatGPT的工作原理 2023年创业&#xff08;有创业想法&#xff09;必读手…

从零训练一个多模态LLM

本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 一、准备阶段 1 模型结构 目前主要有三种模型架构&#xff0c;基于Transformer解码器&#xff0c;基于General Language Model…

从零训练一个多模态LLM:预训练+指令微调+对齐+融合多模态+链接外部系统

深度学习自然语言处理 分享知乎&#xff1a;逃脱鱼子酱 进NLP群—>加入NLP交流群 本文尝试梳理一个完整的多模态LLM的训练流程。包括模型结构选择、数据预处理、模型预训练、指令微调、对齐、融合多模态以及链接外部系统等环节。 一、准备阶段 1 模型结构 目前主要有三种模型…

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

GPT-4比人类更懂融资!AI企划书让VC疯狂打call

尚恩 发自 凹非寺量子位 | 公众号 QbitAI 你敢信&#xff0c;一份由AI写的融资企划书&#xff0c;竟然引发VC疯狂追捧&#xff01; 甚至有VC投资人当场承诺&#xff0c;愿意给这份由GPT-4生成的企划书直接投资。 又一个用GPT赚钱的小技能&#xff0c;Get。 对此咱真不得不感叹一…

微信小游戏个人开发者上架:从注册到上线的详细步骤

微信小游戏个人开发者上架&#xff1a;从注册到上线的详细步骤 一&#xff0c;注册小程序账号1.1 微信公众平台1.2 填写信息1.3 绑定管理 二&#xff0c;打包步骤2.1 工具准备2.2 关于Unity版本2.3 打包详解 三&#xff0c;提包步骤3.1 填写用户隐私3.2 完善开发者自查3.3 游戏…

对标GPT核心技术RLHF!港科大开源RAFT「木筏」,适用GPT扩散模型

梦晨 发自 凹非寺 量子位 | QbitAI 开源大模型火爆&#xff0c;已有大小羊驼LLaMA、Vicuna等很多可选。 但这些羊驼们玩起来经常没有ChatGPT效果好&#xff0c;比如总说自己只是一个语言模型、没有感情blabla&#xff0c;拒绝和用户交朋友。 归根结底&#xff0c;是这些模型没…

DDPM详解 AI绘画

话说DDPM DDPM模型&#xff0c;全称Denoising Diffusion Probabilistic Model&#xff0c;可以说是现阶段diffusion模型的开山鼻祖。不同于前辈GAN、VAE和flow等模型&#xff0c;diffusion模型的整体思路是通过一种偏向于优化的方式&#xff0c; 逐步从一个纯噪音的图片中生成图…

对抗生成网络GAN系列——DCGAN简介及人脸图像生成案例

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;对抗生成网络GAN系列——GAN原理及手写数字生成小案例 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞…

用户画像·用户性别预测

文章目录 一、为什么进行性别预测二、特征数据选取三、算法选择四、代码示例1、使用朴素贝叶斯&#xff0c;进行建模2、使用支持向量机3、使用逻辑斯蒂回归 一、为什么进行性别预测 用户注册时&#xff0c;所填写的性别&#xff0c;存在大概率的随意性&#xff1b;不能完全作为…

云开发视频资源变现微信小程序源码

简介&#xff1a; 云开发视频资源变现微信小程序源码&#xff0c;带有流量主功能。获取视频&#xff0c;获取资源需先看广告&#xff0c;资源变现小程序全源码无删减&#xff0c;自己付费做的。 主要功能&#xff0c;就是用户想观看你的视频或者获取你的资源&#xff0c;就需…