玩转《天猫精灵技能平台》,搞一个诗词问答小游戏

简介: 看了中国诗词大会,必须要自己搞一个诗词问答小游戏。文章最后还有一个思路,非常简单的思路,大家可以试着去实现一下。

天猫精灵技能平台

家里面一直有一个天猫精灵,也有过一些开发想法。所以趁着本次机会研究了一下。

天猫精灵技能平台是一个技能应用的管理平台。

image.png

在这里平台下,可以创建专属的技能。

我今天特殊要说的是语音技能的开发。

新增技能环节

下面我们来新增一个技能,点击新增技能按钮,进入下图界面:

image.png

这些操作没什么难度,所以不着重说明了。

基本信息填写

技能名称应用名称(随便写都行)

技能属性:

公有应用:将发布到公开市场,审核通过后在所有天猫精灵设备都可使用。

私有应用:不发布到公开市场,只在定制合作设备上使用。

我们平时的开发不会使用到私有应用,除非你是第三方企业等,可以选择私有应用。

技能调用词:进入应用的指令词,这个要注意填写。

收费情况:是否收费

选择后端服务资源的部署方式

image.png

我本次开发使用的是阿里云云开发(FAAS),在线开发与阿里云云开发没什么差别;第三种自建状态是使用自己的服务器。

创建成功

创建成功后,进入到详情页面:

image.png

技能配置环节

技能创建完成后,开始进行技能应用的配置处理。

image.png

整个配置环节,共有六个步骤。

基础信息

在创建技能的时候,我们会填写基础信息。

在这里也可以进行一些修改。

image.png

定义语音交互模型

语音交互模型的配置,是用户进入后端程序的入口。

在这里可以配置一些语音交互逻辑。

介绍一下其中的几个关键词信息:意图、实体、问答。

意图:如果前端要访问后端,需要知道接口是什么?如果天猫精灵访问后端,就需要知道要访问哪个意图。以此来说,意图在概念上相当于接口,也可以说是入口。

实体:就是参数,而且在其中还提供了一系列的内部参数(实体);其中包括时间,位置等等的信息。

问答:一问一答,没什么特别,但是很重要且很好用。

image.png

构建后端服务逻辑

进行到了后端服务逻辑步骤,从名称来看就是关于后端服务的配置。

在开发后端代码时,需要先编辑部署,绑定阿里云账号。

在关联阿里云账号,需要先开通云开发功能,我就在这卡了半天。

image.png

image.png

编辑部署,绑定阿里云账号后,就可以进入到在线开发页面了。

image.png

添加屏显页面(可选)

屏显页面是为智能天猫精灵(触屏版)准备的,主要是维护一些资源。本次开发暂不考虑,我也没过多研究。

测试

提供了两种方式:在线测试、真机测试。没什么好详细说的,操作很简单。

image.png

发布

image.png

发布信息可编辑,自行编辑就可以了。

开发一个诗词问答小游戏

代码实现

publicclassGenieEntryextendsAbstractEntry {
privatestaticfinalMap<String, Integer>USER_SORT=newConcurrentHashMap<>();
privatestaticList<String>KNOWLEDGE=newArrayList<>();
privatestaticList<String>ANSWER=newArrayList<>();
privatestaticRandomrandom=newRandom();
static {
KNOWLEDGE.add("但愿人长久,千里共婵娟。其中婵娟指的是什么? A、月亮 B、姻缘");
ANSWER.add("A");
KNOWLEDGE.add("以下提到菊花的诗词中,哪个肯定是在重阳节写的?A、待到重阳日,还来就菊花 B、莫道不消魂,帘卷西风,人比黄花瘦 C、丛菊两开他日泪,孤舟一系故园心");
ANSWER.add("A");
KNOWLEDGE.add("成语“出水芙蓉”最早用来形容什么?A、美女 B、诗歌 C、绘画");
ANSWER.add("A");
KNOWLEDGE.add("“君看一叶舟,出没风波里”请问这“一叶舟”在干什么?A、比赛 B、摆渡 C、捕鱼");
ANSWER.add("B");
KNOWLEDGE.add("名句“七月流火,九月授衣”中“流火”的含义是?A、天气炎热 B、天气转凉 C、天气寒冷");
ANSWER.add("A");
KNOWLEDGE.add("9、重阳节亲友开心相聚,一起登高赏景时,最适合引用以下哪项诗句?A、夕阳无限好,只是近黄昏 B、万里悲秋常作客,百年多病独登台 C、尘世难逢开口笑,菊花须插满头归");
ANSWER.add("C");
KNOWLEDGE.add("苏轼“老夫聊发少年狂,左牵黄,右擎苍”中的“黄”和“苍”分别指?A、黄马、苍鹰 B、黄犬、苍鹰 C、黄犬、黑犬");
ANSWER.add("B");
KNOWLEDGE.add("“只恐双溪舴艋舟,载不动,许多愁”中“舴艋舟”是什么舟?A、蚱蜢纹饰的小舟 B、形似蚱蜢的小舟 C、雄伟坚固的战船");
ANSWER.add("B");
    }
@OverridepublicResultModel<TaskResult>execute(TaskQuerytaskQuery, Contextcontext) {
context.getLogger().info("taskQuery: "+JSON.toJSONString(taskQuery));
// 从请求中获取意图参数以及参数值Map<String, String>paramMap=taskQuery.getSlotEntities().stream().collect(Collectors.toMap(slotItem->slotItem.getIntentParameterName(), slotItem->slotItem.getStandardValue()));
StringuserId=taskQuery.getRequestData().get("userOpenId");
Stringanswer=paramMap.get("answer");
userId=userId==null?"testUser" : userId;
if ("exit".equals(taskQuery.getIntentName())) {
returnreply("已为您退出,再见。");
        }
if ("start".equals(taskQuery.getIntentName()) &&answer==null) {
intrandomIndex=random.nextInt(KNOWLEDGE.size());
USER_SORT.put(userId, randomIndex);
returnintentChangeReply(KNOWLEDGE.get(randomIndex));
        }
if(answer!=null){
if(answer.equals(ANSWER.get(USER_SORT.get(userId)))){
returnintentChangeReply("恭喜你!答对了。");
            }else{
returnintentChangeReply("很遗憾!答错了。");
            }
        }
returnreply("请检查意图名称是否正确,或者新增的意图没有在代码里添加对应的处理分支。");
    }
/*** 结束对话的回复,回复后音箱闭麦*/privateResultModel<TaskResult>reply(Stringreply) {
returngetResult(reply, ResultType.RESULT);
    }
/*** 未指定追问参数,音箱自动开麦,用户的回答可跳转到其它意图*/privateResultModel<TaskResult>intentChangeReply(Stringreply) {
returngetResult(reply, ResultType.ASK_INF);
    }
privateResultModel<TaskResult>getResult(Stringreply, ResultTypeaskInf) {
ResultModel<TaskResult>res=newResultModel<>();
TaskResulttaskResult=newTaskResult();
taskResult.setReply(reply);
taskResult.setExecuteCode(ExecuteCode.SUCCESS);
taskResult.setResultType(askInf);
res.setReturnCode("0");
res.setReturnValue(taskResult);
returnres;
    }
}

待完善

  1. 数据库如何连接没有研究明白,只能使用JDBC连接,没有找到相关的配置。
  2. 循环问答还没有实现完成。
  3. 逻辑还不太完善(有bug)。

成果演示

image.png

image.png

拍视频太费劲,大家就这样看吧,嘿嘿嘿。

提供一个想法

天猫精灵技能平台中提供了一个问答的语音交互方式。

我们完全可以使用这个问答功能,构建一个问答百科全书。

在家里可以随意问答,录入一些小知识。

看哪位有兴趣可以试着构建一下。





相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
5月前
|
Web App开发 机器人
小白一学就会小红书全自动写文发文机器人-爆文仿写笔记(二) -附提示词
小白一学就会小红书全自动写文发文机器人-爆文仿写笔记(二) -附提示词
117 1
|
JavaScript Java
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
180 0
重拾梦想!语音交友源码平台搭建技术知识:在线KTV功能的实现
随着网络的快速发展,语音交友源码平台的新型功能将我们儿时的歌手梦托起,这个功能就是语音交友源码平台的在线KTV功能,对于开发语音交友平台的公司和个人来说,这个功能是非常重要的,下面我就详细为大家讲解语音交友源码平台搭建技术:在线KTV功能的实现!
重拾梦想!语音交友源码平台搭建技术知识:在线KTV功能的实现
|
移动开发 小程序 JavaScript
手撸一个在线学习在线教育小程序
最近有小伙伴找小孟开发了一个在线教育的小程序项目。
199 0
手撸一个在线学习在线教育小程序
天猫精灵开发平台AliGenie - 打造孩子专属的暖心小伙伴
在天猫精灵陪伴孩子的过程中,除了监督学习、讲故事、听儿歌,我更希望它可以成为孩子倾诉的对象,当孩子遇到困难或者在学校被欺负,它可以化身为精灵,给予孩子更多的鼓励和说些更暖心话语,温暖一个个幼小的心灵。
532 0
天猫精灵开发平台AliGenie - 打造孩子专属的暖心小伙伴
|
移动开发 前端开发 Java
令我室友大为震惊!手把手教我室友撕web前端基础知识,上手小项目广告推广软文页面。
令我室友大为震惊!手把手教我室友撕web前端基础知识,上手小项目广告推广软文页面。
170 0
令我室友大为震惊!手把手教我室友撕web前端基础知识,上手小项目广告推广软文页面。
|
前端开发 程序员 数据库
做一个程序媛是一种什么体验?
身为程序媛,是不是只要颜值就够了? 可能很多人都觉得,身为程序媛只要有颜值就够了,或者自己颜值不行,可以介绍颜值高的女性朋友们啊!秉着“男女搭配,干活不累”的原则,一个程序媛肯定是超级吃香的。至于技术嘛,没关系,不会的话撒个娇,就会有一堆程序猿们来教你,比如下面这样:
做一个程序媛是一种什么体验?
|
机器学习/深度学习 机器人 程序员
深度学习入行一年能干啥?菜鸟程序员开发系统识别火影手势,收获大把二次元粉丝
深度学习入行一年能干啥?菜鸟程序员开发系统识别火影手势,收获大把二次元粉丝
327 0
|
算法 程序员 芯片
【聚能聊有奖话题】手机的100种玩法,程序员你是怎么“善待”你的手机的?
生活中,除了手机里现有的各种应用外,我们还可以用手机来做很多事情。比如自己写个APP,带上自己的加密算法,用它来感应自动开门。没人知道你的算法,所以跟市面上卖的比起来,安全性特别高。以后出门钥匙也不用带了。再比如冬天懒得起来关灯,在被窝里直接用手机关灯、关电视、关空调、关门、关……
4348 0
|
开发者 程序员 NoSQL
滑板、航拍、写小说…你以为是个艺人,其实是支付宝程序员 | 开发者必读(055期)
最炫的技术新知、最热门的大咖公开课、最有趣的开发者活动、最实用的工具干货,就在《开发者必读》!
937 0