开发者学堂课程【3节课走进云小蜜产品:课时1:简单对话场景搭建和云小蜜接口集成】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/298/detail/3495
课时1:简单对话场景搭建和云小蜜接口集成(三)
六、开发新场景实例
首先点击新建对话流单元:
用系统内置的模板来进行快速配置:
选择无分支空白模板,名称设置为查火车票。点击确定进入画布:
由于选择的是无分支空白模板,所以此时已经自动创建出了用户说节点,填槽节点,函数节点,回复节点:
买火车票场景需要多轮交互,首先需要用户表达查火车票的意图,然后机器人访问用户收集参数:出发地、目的地、出发日期,收集到信息之后,机器人调用12306接口获取符合这三个信息的火车票都有哪些,然后将答案告诉用户。以上就是所有流程。首先配置用户说节点:
填槽节点:
函数节点:
回复节点:
在该流程当中,首先用户说要查车票,然后机器人与人进行多轮交互,收集所涉及到的参数。收集到参数之后,机器人就会查询当前给定信息下的火车票信息。查询完成之后,告诉用户已经查询到的火车票有哪些,以上就是买火车票流程:
接下来需要将每个节点的具体配置内容完善。用户说节点:
在用户说节点当中需要配置意图。也就是用户说什么样的话术能够表达该意图,同时需要配置该意图当中所涉及到的参数。所以新建意图:意图名称为查火车票。新增用户话术,也就是用户说什么样的话可以触发该意图。例如“我要查火车票”,“帮我买一张火车票” 等等:
话术配置完成之后,点击确定:
此时用户说节点已经与意图产生了关联:
当用户所说的话满足了查火车票的意图时,流程就会进行到用户说节点,并且继续向下进行。接下来会进行到集参数节点,参数在意图当中定义点击意图的低低设置。此处定义语义词,语义词就是为了达成意图,机器人需要向用户收集的信息。例如该场景当中需要收集出发地,目的地和出发日期,也就是两个地址类型的参数和一个日期类型的参数:
例如用户可能会说“我要查从明天北京出发到天津的火车票”,此时该话术当中包含了三个所需要的信息,系统做自定义推荐之后会发现可能需要收集的参数有哪些,就会将其提示出来。例如要收集地级市作为出发地,收集地级市作为目的地,收集日期作为出发日期,
此时可以给参数更换名字:
由于机器人自带实体识别的能力,例如会识别出用户的话语当中的北京是一个地级市,天津市一个地级市,明天是时间,会用该能力识别出所需要的信息,此时为该意图定义了三个参数。接下来,在收集参数当中可以选择关联查火车票意图,此时要查的三个参数都被列出:
接下来需要关心的是如何让机器人访问得到这三个参数,例如设置反问问题“您从哪里出发?”,“您到哪里去?”,“哪天出发?”:
针对每一个参数设置了反问话术,用于询问用户该三个参数:
接下来是HTTP接口,HTTP接口就是收集完三个参数之后,通过三个参数去查询接口,查询满足出发地是北京,目的地是天津,时间是明天的火车票有哪些。可以在阿里云的云市场当中查询到许多API,以下是在阿里云市场搜索到的火车票查询的API:
如果是制作demo,还有免费的限额。在下方有调用的说明,例如调用接口的URL是什么,需要传哪些参数,例如火车票查询当中需要传出发地,到达地和时间三个参数,此时只需要将参数传入,就会有返回列表,返回所有满足条件的火车票,只需要让机器人将该结果返回给用户即可。
但其中存在一个问题,机器人返回的是 JSON,但不能将 JSON 直接返回给终端用户,用户体验不好,需要机器人将话术组织,组织为从北京到天津明天的火车票有 G34、G32 等等,所以需要对函数进行后处理,此时可以使用阿里云函数计算控制台:
在此处可以使用无服务的概念,快速开发 HTTP 接口,该 HTTP 接口当中可以做任意事情。新建服务,
新建函数:
进行简单的代码编写之后就可以快速实现 HTTP 接口。此时所展示的代码当中调用的是火车票查询接口,得到结果之后,对结果进行了修改,集合返回了 type、name 和火车班次,将其作拼接,给用户更友好的体验。因为希望呈现的答案是:
北京到天津明天的班次有高铁 g34,高铁 g32。
函数完成之后能够进行快速调试。以下是函数 url:
https://1942022723137282.cn-shanghai.fc.aliyuncs. .com/2016-08-15/proxy/news. headline. service/train. ticket function/
可以点击复制到其他地方。此时定义了三个参数,分别是 depart _city、Arrive_city和 date。传入对应的值北京,杭州,2020-08-20:
执行完成之后,函数的返回符合预期结果:
以上就是自行封装的 HTTP 的返回结果。在该 HTTP 内部可以再加入一些代码,调用其他 HTTP 或做其他更丰富的事情,例如访问阿里云的数据库或发消息队列,发信息都可以在计算代码当中完成。该函数计算为机器人开通了另一片天地,可以做任何用户想做的事情,只需要不超时即可。此时可以单点调试完所有HTTP接口之后。将链接复制,在函数节点粘贴通过函数计算开发的服务:
并且将参数传入:
需要将意图当中收集好的参数作为 HTTP 接口的参数传给接口,所以需要引用,引用完成之后修改名称。可以通过“$” 的方式引用意图当中的参数: 出发地、目的地和出发日期。此时将收集到的三个参数作为 HTTP 集合请求发给 HTTP 接口。此时在回复节点中设置回复文本:“符合条件的火车票有:”,将函数的返回值进行拼接,拼接成完整的答案,返回给用户。
保存之后进行测试:
用户说“我要查火车票”
机器人回复“你从哪里出发?”
用户说“北京”
机器人回复“你到哪里去?”
用户回复“杭州”
机器人回复“哪天出发?”
用户回复“明天”
此时机器人列出所有符合条件的火车票班次:
点击查看详情,可以查看每一轮对话的详情:
例如最后一轮已经收集到的槽位是:出发地是北京,目的地是杭州,出发日期是明天,明天被解析为2020年8月12日,在详情当中有调用情况:调用了 HTTP 接口以及请求参数,函数返回值等等详细的信息帮助给用户调试。此时流程开发完毕,简单的多轮对话能够让机器人帮助用户通过收集用户参数,出发地、目的地和时间,帮助用户
查询到高铁的情况。
七、总结
首先需要定义对话的框架:
也就是说需要制作的多人对话的框架是怎样的,用户表述,希望机器人和用户收集何种参数以及机器人是否要采取一些动作,例如查询接口做运算等等,以及机器人应该给予什么样的回复。以上就是简单的线性基于填槽的流程。可以丰富用户场景,两个较为实用的工具:
1.阿里云市场可以搜索到许多有用的 API,有些是免费,有些是收费,可以根据用户需要使用;
2.函数计算,可以在函数计算的控制台上创建服务函数,在其中可以写简单的脚本函数,做任何想做的事,完成所需要的数据处理及格式处理或是第三方数据的查询,数据的存储等等。函数能力赋予了机器人无穷无尽的想象力,基本上可以完成任何事情,例如调用接口控制电视机或空调的开关或者调用接口查询信息,例如查询用户的账户余额或其他信息,甚至可以做数据的读写,将一些数据放到阿里云 OSS 或数据库上,函数计算赋予了机器人较强的能力。也可以靠开发者的想象力和开发能力扩展。
最后可以定义机器人的回复,以上就是简单的多轮对话场景。后续课程会介绍较为复杂的场景以及效果调优。