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

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

天猫精灵技能平台

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

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

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

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

提供一个想法

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

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

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

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





相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
目录
相关文章
|
JavaScript Java
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
【游戏开发】自从遇见了口袋方舟后,我的世界变得精彩了起来
188 0
|
移动开发 前端开发 JavaScript
初入前端项目实训-音乐之家
初入前端项目实训-音乐之家,介绍 HTML 和 css,使用 HTML 和 css 实现一个简单的音乐播放网页
130 0
|
移动开发 小程序 JavaScript
手撸一个在线学习在线教育小程序
最近有小伙伴找小孟开发了一个在线教育的小程序项目。
203 0
手撸一个在线学习在线教育小程序
天猫精灵开发平台AliGenie - 打造孩子专属的暖心小伙伴
在天猫精灵陪伴孩子的过程中,除了监督学习、讲故事、听儿歌,我更希望它可以成为孩子倾诉的对象,当孩子遇到困难或者在学校被欺负,它可以化身为精灵,给予孩子更多的鼓励和说些更暖心话语,温暖一个个幼小的心灵。
543 0
天猫精灵开发平台AliGenie - 打造孩子专属的暖心小伙伴
|
监控 小程序 安全
热饭的测开成果盘点第十八期:微信小程序平台
本期介绍的是一款测试微信小程序的自动化平台,功能比较简单,算是我给我带着我小徒弟(txn) 练手的第一个学习用平台。
热饭的测开成果盘点第十八期:微信小程序平台
|
机器学习/深度学习 弹性计算 供应链
上财信院大四生毕设使用阿里云体验感想
上海财经大学大学信管学院计算机专业学生,毕设是一个机器学习系统,指导老师建议部署到服务器上,选择了阿里云的高校计划的免费服务器,记录分享一下使用心得。
|
机器学习/深度学习 存储 人工智能
接入百度大脑OCR技术,读书郎让小朋友变身“自学读书郎”
接入百度大脑OCR技术,读书郎让小朋友变身“自学读书郎”
224 0
接入百度大脑OCR技术,读书郎让小朋友变身“自学读书郎”
|
弹性计算 NoSQL Java
|
机器学习/深度学习 传感器 算法
为给艺术生讲编程,上海大学副教授“变身”萝莉,自制软件二次元上网课
为给艺术生讲编程,上海大学副教授“变身”萝莉,自制软件二次元上网课
305 0
|
Linux Python
成为1%的体验是什么?技术发烧友有话要说
阿里云第15期贡献者荣誉榜单已于2018.07.03日发布。
2149 0