天猫精灵语音开发 您所在的位置:网站首页 天猫精灵的作用 天猫精灵语音开发

天猫精灵语音开发

2023-07-25 06:34| 来源: 网络整理| 查看: 265

前言 在第一天的教程《天猫精灵语音开发-第一天》 里我们已经尝试开发出了一个hello world 在第二天的课程《天猫精灵语音开发-第二天》里我们已经尝试开发出一个查询天气的语音技能。 在第三天的课程《天猫精灵语音开发-第三天》里我们尝试开发一个多意图关联的空气质量查询语音技能 流程 前台配置流程 创建地理小百科技能 后台开发流程 根据实际情况修改基础代码 提交代码并部署上线 前台检查自动生成流程 检查自动生成的意图 检查对话语料和标注 语音测试 项目下线 前台配置流程 创建地理小百科技能

image.png

后台开发流程

本次不再创建语音交互模型,直接跳到后端服务创建应用并登录阿里云云开发平台(网址:workbench.aliyun.com)基于默认模板的代码进行功能开发

image.png

image.png

基于实际情况修改基础代码

修改后的源码

package com.alibaba.ailabs; import java.util.Arrays; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Random; import java.util.concurrent.ConcurrentHashMap; import com.alibaba.ailabs.common.AbstractEntry; import com.alibaba.da.coin.ide.spi.meta.ExecuteCode; import com.alibaba.da.coin.ide.spi.meta.ResultType; import com.alibaba.da.coin.ide.spi.standard.ResultModel; import com.alibaba.da.coin.ide.spi.standard.TaskQuery; import com.alibaba.da.coin.ide.spi.standard.TaskResult; import com.alibaba.fastjson.JSON; import com.aliyun.fc.runtime.Context; /** * @Description 天猫精灵技能函数入口,FC handler:com.alibaba.ailabs.GenieEntry::handleRequest * @Version 1.0 **/ public class GenieEntry extends AbstractEntry { private static final Map USER_MAP = new ConcurrentHashMap(); private static final List KNOWLEDGE; private static Random random = new Random(); static { KNOWLEDGE = Arrays.asList( "世界热极:巴士拉(伊拉克)最高记录58.8摄氏度", "世界冷极:东方站(南极)最低记录-89.2摄氏度", "世界湿极:怀厄莱阿莱(太平洋上的一个岛屿)每年平均有335天下雨,年降水量达12244毫米", "世界干极:阿塔卡马沙漠(南美洲)平均年降水量小于0.1毫米,1845年~1936年的91年间未曾下雨", "海拔最高的山峰:珠穆朗玛峰(海拔8844.43米)", "地球上体积最大的山及火山:冒纳罗亚火山(MaunaLoa,夏威夷岛,海拔4169米,火山体积达7万5000立方公里)", "地球上最高的活火山:奥霍斯德尔萨拉多山(海拔6893米)", "太阳系内已知的最高、体积最大的山及火山:奥林帕斯火山(火星,高达约27公里)", "最大的岛屿:格陵兰岛(面积达2166086平方公里)", "人口最多的岛屿:爪哇岛(人口达12400万)", "唯一分属三个国家的岛屿:加里曼丹岛", "最大的湖泊及咸水湖:里海(面积达371000平方公里)", "最大的淡水湖:坦噶尼喀湖(非洲)", "最深的湖泊及淡水湖:贝加尔湖(水深达1940米)", "海拔最低的湖泊:死海(湖面海拔负392米,是已露出陆地的最低点)", "最咸的湖泊:死海(湖水盐度达300‰,为一般海水的8.6倍)", "最古老的湖泊:贝加尔湖(已经在地球上存在超过2500万年)", "最长的河流:尼罗河(全长6671公里)", "流域面积最大的河流:亚马逊河(面积达7050000平方公里)", "含沙最多的河流:黄河(1977年录得最高含沙量达每立方米920千克沙)", "流经最多国家的河流:多瑙河(流经西欧至东欧共18个国家)", "最早的运河:古苏伊士运河(建于公元前19世纪,完成于前500年,8世纪被毁弃,19世纪重建。)", "海拔最高的长河:雅鲁藏布江(河床海拔平均在3000米以上)", "太阳系已知的最大峡谷:水手号峡谷(火星,长达4500公里,阔200公里,深11公里)", "最大的沙漠:撒哈拉沙漠(面积约有960多万平方千米)", "面积最大的盆地:刚果盆地", "世界上已知体积最大的独立岩石:艾尔斯巨石(高348米,底沿周长约9400米,占地面积约1200公顷)", "质量最大的行星:木星(约为其余八大行星质量总和的2倍)", "太阳系中最大的卫星:木卫三", "最深的海沟:马里亚纳海沟(深11034米)", "最长的洋流:南极环流(长达21000公里)" ); } @Override public ResultModel execute(TaskQuery taskQuery, Context context) { context.getLogger().info("taskQuery: " + JSON.toJSONString(taskQuery)); String userId = taskQuery.getRequestData().get("userOpenId"); userId = userId == null ? "testUser" : userId; LinkedList list = USER_MAP.get(userId); //欢迎意图 或 用户缓存数据为空 if ("welcome".equals(taskQuery.getIntentName()) || list == null) { list = new LinkedList(); int randomIndex = random.nextInt(KNOWLEDGE.size()); list.addLast(randomIndex); USER_MAP.put(userId, list); return intentChangeReply(KNOWLEDGE.get(randomIndex)); } //下一个意图,随机选择一个内容回复,并将index追加到用户数据的LinkedList集合最后 if ("next".equals(taskQuery.getIntentName())) { int randomIndex = random.nextInt(KNOWLEDGE.size()); list.addLast(randomIndex); return intentChangeReply(KNOWLEDGE.get(randomIndex)); } //上一个意图,将用户数据的LinkedList集合中最后一个index移除,并返回该index的内容。首先要判断集合内是否有元素,没有则不需要移除 if ("prev".equals(taskQuery.getIntentName())) { if (list.size() > 0) { list.removeLast(); } if (list.size() == 0) { return intentChangeReply("这已经是第一个了。"); } return intentChangeReply(KNOWLEDGE.get(list.get(list.size() - 1))); } //退出意图,清除用户缓存 if ("exit".equals(taskQuery.getIntentName())) { USER_MAP.remove(userId); return reply("已为您退出,再见。"); } return reply("请检查意图名称是否正确,或者新增的意图没有在代码里添加对应的处理分支。"); } /** * 结束对话的回复,回复后音箱闭麦 */ private ResultModel reply(String reply) { return getResult(reply, ResultType.RESULT); } /** * 未指定追问参数,音箱自动开麦,用户的回答可跳转到其它意图 */ private ResultModel intentChangeReply(String reply) { return getResult(reply, ResultType.ASK_INF); } private ResultModel getResult(String reply, ResultType askInf) { ResultModel res = new ResultModel(); TaskResult taskResult = new TaskResult(); taskResult.setReply(reply); taskResult.setExecuteCode(ExecuteCode.SUCCESS); taskResult.setResultType(askInf); res.setReturnCode("0"); res.setReturnValue(taskResult); return res; } } 复制代码 提交代码并部署上线 使用Git提交代码 选择预发环境部署上线,详情请看第一天教程 前台检查自动生成流程 检查自动生成的意图

image.png

检查自动生成的对话语料

image.png

提交代码并部署上线 语音测试

进入在线测试进行测试

image.png

ps: 目前因为没有实体机所以就不实机测试了。

项目下线

在线测试完成后,要在云开发平台中我的应用及时将部署的应用下线,因为免费额度有限,不及时下线将会产生不必要的费用

image.png

image.png



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有