天猫精灵开放实验平台实验—创建天气查询意图
基于
阿里云云开发平台
开发学习 https://workbench.aliyun.com/
一、创建天气查询意图
参考链接:AliGenie - 技能应用平台,实现单轮、多轮对话
前言
创建天气查询功能的意图,实现机器与用户进行单轮或多轮的对话,让技能变得更加有趣和好玩。
1、登录天猫精灵开放平台。
2、输入用户名和密码。
3、选择“技能应用平台”。
4、选择之前创建的语音技能。
5、选择语音交互模型,点击“创建意图”。
6、填写意图名称、意图标识。
7、设置单轮对话表达,并提交保存。(即添加语料)
8、查看是否创建成功。
9、创建实体。
10、创建“城市”实体,并保存。
11、添加实体。
实体是指某领域词汇的集合,技能平台提供了丰富的系统词典来支持技能引用。
注意事项:实体值输入,一次最多输入20个,实体之间空格隔开。
这里,我们城市的实体采用“创建自定义舌实体”。“日期”选择“引入公共实体”。
12、查看实体是否创建完成。
13、进行语料标记。
选择城市名称,进行语料标记,如图所示。
① 针对所有城市的天气状况可以使用模板进行创建:
@{city}@{sys.date(公共实体)}天气怎么样
② 当用户直接询问“天气怎么样”时,即不知道城市名也不知道所问天气的日期是多少时,
我们可以做以下操作:
(1)不知道查询哪个城市的天气时,可以在参数中,添加追问语句,如“请问是哪个城市的天气呢?”;
(2)不知道所问天气的日期是哪天时,可以关闭“精灵追问”,设置“系统默认实体值”为“今天”。
设置完成后,保存提交。
14、创建多轮对话编辑。
假如用户想要进一步查询明天的天气,或者其他城市的天气,可以使用模板进行创建查询。
15、选择“后端服务”,并点击“前往开发”。
这里选择“阿里云云原生开发(FAAS)”进行后端服务开发,减少服务的创建和手动配置操作。
16、进入CLOUD IDE开发环境。
package com.alibaba.ailabs; import com.alibaba.ailabs.common.AbstractEntry; import com.alibaba.da.coin.ide.spi.meta.AskedInfoMsg; 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; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Description 天猫精灵技能函数入口,FC * handler:com.alibaba.ailabs.GenieEntry::handleRequest * @Version 1.0 **/ public class GenieEntry extends AbstractEntry { @Override public ResultModel<TaskResult> execute(TaskQuery taskQuery, Context context) { 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.getOriginalValue())); //处理名称为 welcome 的意图 if ("welcome".equals(taskQuery.getIntentName())) { taskResult.setReply("欢迎使用天气小蜜,使用小蜜可以查询天气哟"); //处理名称为 weather 的意图 } else if ("weather".equals(taskQuery.getIntentName())) { //weather 意图中 date 参数勾选了必选,请求数据中一定会携带 date 参数,只需要判断 city 参数有没有。 if (paramMap.get("city") == null) { taskResult.setReply("您要查询哪个城市的天气?"); return askReply(taskResult, "city", taskQuery.getIntentId()); } //TODO 根据参数获取天气信息,这里使用假数据替代 taskResult.setReply(paramMap.get("city") + paramMap.get("sys.date(公共实体)") + "天气 晴"); //处理名称为 ari_quality 的意图 }else { taskResult.setReply("请检查意图名称是否正确,或者新增的意图没有在代码里添加对应的处理分支。"); } return reply(taskResult); } /** * 结束对话的回复,回复后音箱闭麦 */ private ResultModel<TaskResult> reply(TaskResult taskResult) { ResultModel<TaskResult> res = new ResultModel<>(); taskResult.setExecuteCode(ExecuteCode.SUCCESS); taskResult.setResultType(ResultType.RESULT); res.setReturnCode("0"); res.setReturnValue(taskResult); return res; } /** * 指定追问参数,音箱自动开麦,用户的回答优先匹配追问的参数 */ private ResultModel<TaskResult> askReply(TaskResult taskResult, String parameterName, Long intentId) { ResultModel<TaskResult> res = new ResultModel<>(); taskResult.setExecuteCode(ExecuteCode.SUCCESS); taskResult.setResultType(ResultType.ASK_INF); AskedInfoMsg askedInfoMsg = new AskedInfoMsg(); askedInfoMsg.setIntentId(intentId); askedInfoMsg.setParameterName(parameterName); List<AskedInfoMsg> askedInfos = new ArrayList<>(); askedInfos.add(askedInfoMsg); taskResult.setAskedInfos(askedInfos); res.setReturnValue(taskResult); return res; } }
17、提交保存代码,并选择预发环境,部署。
[admin@2776a5be-6dfb-4c7c-ade8-38edd23352d7-cf87b85b5-vh8zn /home/admin/workspace/codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233] $git status On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: src/main/java/com/alibaba/ailabs/GenieEntry.java no changes added to commit (use "git add" and/or "git commit -a") [admin@2776a5be-6dfb-4c7c-ade8-38edd23352d7-cf87b85b5-vh8zn /home/admin/workspace/codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233] $git add src [admin@2776a5be-6dfb-4c7c-ade8-38edd23352d7-cf87b85b5-vh8zn /home/admin/workspace/codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233] $git commit -m "Checktheweahter" [master 83cc356] Checktheweahter 1 file changed, 28 insertions(+), 4 deletions(-) [admin@2776a5be-6dfb-4c7c-ade8-38edd23352d7-cf87b85b5-vh8zn /home/admin/workspace/codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233] $git push Counting objects: 9, done. Delta compression using up to 5 threads. Compressing objects: 100% (5/5), done. Writing objects: 100% (9/9), 1.69 KiB | 101.00 KiB/s, done. Total 9 (delta 1), reused 0 (delta 0) To https://codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233.git cd0452b..83cc356 master -> master [admin@2776a5be-6dfb-4c7c-ade8-38edd23352d7-cf87b85b5-vh8zn /home/admin/workspace/codeup.aliyun.com/61518cd7ade19007d78e3930/workbench/repo_2021-11-01_2021110101453233] $
18、等待部署完成。
19、部署完成。
20、完成在线测试。