简单对话场景搭建和云小蜜接口集成 | 学习笔记

简介: 简介:快速学习简单对话场景搭建和云小蜜接口集成

开发者学堂课程【智能语音对话机器人训练营课程:简单对话场景搭建和云小蜜接口集成】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/908/detail/14395


简单对话场景搭建和云小蜜接口集成

 

目录:

一、对话机器人的基本架

二、多构多轮对话的概念

三、云小蜜会话接口的使用讲解

四、用云小蜜来搭建一个对话场景


一、对话机器人的基本架

image.png用户发起语音请求 ASR 系统,ASR 系统将语音转换为文本,将文本内容发送给 Chatbot,chatbot 对用户的语音进行理解,做一个答案的生成,再将生成回复的文本发送给 TTS 系统,TTS 在进行语音合成,再将合成的语音发送给用户。

Chatbot 有三个步骤 NLU (自然语言理解)  DM (对话管理)  NLG (自然语言生成),当用户的请求从语音转换为文本之后 Chatbot 对这句话理解是什么意思,做一个对话管理来决定下一步采取什么样的措施采取什么样的动作,第三步根据这个动作生成什么样的回复,将回复的文本给 TTS,再转换成语音交给用户。

所以开发者在开发一个类似于机器人小程序或者 HO 页面的时候,开发的页面在这个层次,用户语音的请求在 HO 页面输入一个请求语音的信号无论是短文件传给 ASR 转成文本,再将文本请求输入给 Chatbot 系统,系统接收到后在内部进行处理生成答案的文本,再用TTS系统生成语音发给用户,这就是整个机器人架构,云小蜜包含 Chatbot 其中的三个步骤 ,它的输入文本形式的用户请求,输出是文本形式的答案;云小蜜扮演的角色就是红框这些东西。

 

二、多构多轮对话的概念

首先黄色框是人说的话,白色的框是机器人的回复。用户说买火车票,机器人回复亲从哪儿出发呀?

用户回答北京,机器人继续回答哪天出发,用户说明天,机器人继续出 亲想坐火车从北京到哪里呀?

用户回答 杭州,机器人就找出明天从北京出发到杭州。这个其实就是一个典型的多轮对话 

多轮对话的概念:

·对话上下文

·对话的历史

·当前对话的状态

·通过 Session 来维护对话上下文

· Sessionld 作为标识

Session 可以认为一通多轮对话的一个标识一个单位,用 Session 描述带上下文的一通对话。

每一个 Session 都赋予一个 Session ID,当 Session ID 保持不变的情况下,用户和机器人一直处于这个多轮对话当中,也就是机器人一直会记得用户。用户在这个多轮对话当中的 Session 的概念。

 有了 Session ID 才能让机器人知道跟用户说话是处于哪个 Session 当中,用什么样的上下文理解用户这段话。


三、云小蜜会话接口的使用讲解

https://help.aliyun.com/document_detail/68183.html?spm=a2c4g.11186623.593.23177818TOhO3d

SDK 参考

智能对话机器人为开发者提供了 Java / TypeScript(NodeJs) / Go / PHP / Python / C# / C++ 七种编程语言的SDK。通过 SDK ,开发者可以免去手工计算API签名的步骤,快速地集成智能对话机器人的会话能力。 

以下是智能对话机器人提供的 SDK 信息:

1.智能对话机器人 SDK 调用

参考 阿里云-SDK 平台 完成 SDK 集成

2.阿里云通用 SDK 调用

参考 阿里云 Java SDK 开发指南 > 快速开始,如果 Maven 没有从中央存储库下载 jar 包,则需要将此依赖项添加到 pom.xml 文件中,否则将报告 NoClassDefFoundError 异常。 

调用示例

public static void main(String[] args) throws Exception {

String accountAccessAK = "XXXXXXXXXXXXXXXXXX";

String accountAccessSK = "XXXXXXXXXXXXXXXXXX";

String popRegion = "cn-shanghai";

String popProduct = "Chatbot";

String popDomain = "chatbot.cn-shanghai.aliyuncs.com";

DefaultProfile.addEndpoint(popRegion, popProduct, popDomain);

IClientProfile profile = DefaultProfile.getProfile(popRegion, accountAccessAK, accountAccessSK);

DefaultAcsClient client = new DefaultAcsClient(profile);

//固定入参

CommonRequest commonRequest = new CommonRequest();

commonRequest.setSysProduct("Chatbot");

commonRequest.setSysMethod(MethodType.GET);

//根据API会有变化

commonRequest.setSysAction("Chat");

commonRequest.setSysVersion("2017-10-11");

commonRequest.putQueryParameter("Utterance", "hi");

//机器人 id

commonRequest.putQueryParameter("InstanceId", "chatbot-cn-xxxxxxxxxxxx");

CommonResponse commonResponse = client.getCommonResponse(commonRequest);

System.out.println(commonResponse.getData());

}      

Chat 接口

描述

根据机器人实例ID与其进行会话。

请求参数 

名称

类型

是否必填

描述

Action

string

系统规定参数,取值:Chat

Instanceld

string

机器人实例ID。登录智能对话机器人控制台,左侧面板选择开发者->基本配置,查看机器人示例信息,可获得该实例ID

Utterance

string

机器人访问者的输入

Sessionld

string

会话ID,用于标识一个访问者的会话和保持上下文信息。对于一个新的访问者,首次调用Chat接口时无需传递此字段,机器人会开启一个会话,并在Chat接口的响应中返回该会话的Sessionld。对于该访问者的后续轮次的会话,调用Chat接口时传递当前会话的
Sessionld,机器人即可基于Sessionld继续该轮次会话

Knowledgeld

string

知识库词条的知识标题的ID.若指定此ID,那么机器人会直接返回指定的知识标题指定视角的答案

Senderld

string

访问者ID。用于识别当前会话中的用户

SenderNick

string

当前会话中访问的昵称

Tag

string

可以传递任何内容参数,该参数将会直接在返回结果中透传回来

Perspective.1

string

视角编码,用于调用同一知识标题下不同视角的答案。在拼装请求参数时,需要以
Perspective.1={视角编码}的格式传递参数。如:
&Perspective.1=FZJBY3raWr。使用SDK时以SDK中定义的参数为准。目前仅支持一个视角答案的调用。

Recommend

Boolean

默认true,会话API保持出推荐逻辑;如果recommend =false则不出推荐

RecommendNum

Integer

推荐问题数量,1-10,当出推荐的时候才生效,返回不大于RecommendNum的推荐问题数量

返回参数

名称 

类型

描述

Messageld

String

本条会话应答消息的ID

Sessionld

string

本次会话的ID

Messages

 

Array of Message

消息的列表

Associate 

Array of Associate

推荐信息

四、用云小蜜来搭建一个对话场景

image.png如图所示,用简单的线框图,来描绘一下多轮对话的样子,一个典型的多轮对话,多个对话轮次,一个轮次,都是由用户说一句,机器人回复一句,来组成的。所以在这里用一个简单的线框图,就可以描绘出一个多轮对话。

比如这里用户说我要查天气,机器人说 查哪里的天气,这就是一轮对话,然后接下来第二轮,用户说北京然后机器人说北京天气晴,这相当于多轮对话的第二轮对话。

在云小蜜的产品里也是基于这个模型来建模的。

首先在阿里云首页打开云小蜜,到达云小蜜的控制台首页。

创建一个机器人,就是一个说话的对象,所有的问题问这个机器人,会回答你所有的问题。赋予这个机器人所具有的技能,比如查天气,订火车票,操控智能家居。

创建一个机器人,并进行自己命名,选择机器人类型,机器人服务语言。在机器人管理当中找到对话流管理,配置机器人具有对话的能力

点击保存草稿并点击测试,把当前的对话流提交到测试环境,测试环境就相当于一个沙盒,这时候左边弹出一个调试窗

调试窗的目的就是模拟在线上的对话,然后可以在这里进行调试,当调试完成时就可以点击发布

机器人管理里的会话接口有 会话接口信息

用户说节点

image.png

节点名称:用户说查天气

意图名称:查天气意图

意图是用户查天气所会说的话术,机器人会根据这些话术理解用户的意图, 

image.png

机器人回复天气状况

回复节点

image.png

名称:机器人回复天气状况

文本回复:北京天气晴

机器人想:

判断节点 服务调用 函数节点 赋值节点

对话基本元素

组装对话流的原理,就是人类和机器对话的本质,一问一答间,尽显大道至简之风。系统将三种对话现象高度抽象提炼,成为组成对话流的三个基本元素:触发节点、函数节点、回复节点。

新建一个 查火车票 

用户输入节点:

节点名称:用户说查火车票

填槽节点:

名称:收集参数

函数节点:

名称:查询火车票信息

回复节点:

名称:机器人告知车票情况

意图名称:查火车票

用户话语:我要查火车票  帮我买一张火车票 我要查从明天京出发天津的火车票 语义槽推荐:系统-地级市 系统-日期

在收集参数里会发现三个要收集的的参数被列集在这里

通过反问配置收集缺失信息:

反问问题:你从哪里出发  你到哪里去  哪天出发

HTTP 接口

在阿里云市场>全部分类>API市场>交通地理

找对应的 API 接口,进行相应的设置。

可以在函数计算的控制台上创建服务,函数,可以写一般简单的函数,第三方接口的查询

函数计算控制台

服务\函数  通过新建服务跟函数

函数代码

http.get(httpRequest,(httpResp) => {

let data = ‘ ’;

httpResp.on( ‘data ‘, (chunk) => {

data += chunk;

});

httpResp.on ( ‘ end ' , ( ) => {

var resultData = JSON.parse(data) ;

var ticketList = resultData.result.list;

var responseString = ticketList.map(t => t.typename+'-'+t.trainnd).join( ‘, ' );

resp.send ( responseString);

});

}) 

收集参数

查火车票.出发地=

查火车票,出发地.origin =北京

查火车票.目的地=杭州

查火车票.目的地.origin =杭州

查火车票.出发日期=2020-08-12

查火车票.出发日期.origin =明天

查火车票.查询火车票信息

·协议

http

· url

https://1942022723137282.cnshanghai.fc.aliyuncs.com/20160815/proxy/news_headline_service/train_ticket_function/?date=2020-08-12&depart_city=%E5%8C%97%E4%BA%AC&arrival_city=%E6%9D%AD%E5%B7%9E

·请求类型

GET

·接口参数

Header

Accept: */*

Content-Type: */*

·接口返回

高铁-G57,高铁-G19,高铁-G55,高铁-G41,高铁-G33,高铁-G163,高铁-G31,高铁-G167,高铁-G419,高铁-G59,高铁-G43,高铁-G35,高铁-G45,高铁-G37,高铁-G273,高铁-G39,直达特快-Z281,动车-D717,快速-K101

相关实践学习
阿里巴巴智能语音交互技术与应用
智能语音交互,是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人机交互体验。适用于多个应用场景中,包括智能问答、智能质检、法庭庭审实时记录、实时演讲字幕、访谈录音转写等。 本课程主要讲解智能语音相关技术,包括语音识别、人机交互、语音合成等。  
相关文章
|
6月前
|
NoSQL Java Redis
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
SpringBoot集成Redis解决表单重复提交接口幂等(亲测可用)
493 0
|
6月前
|
存储 JSON Java
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
SpringBoot集成AOP实现每个接口请求参数和返回参数并记录每个接口请求时间
362 2
|
3月前
|
Java jenkins Shell
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
jenkins学习笔记之五:Maven、Ant、Gradl、Node构建工具集成
|
3月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
3月前
|
jenkins 持续交付
jenkins学习笔记之九:jenkins认证集成github
jenkins学习笔记之九:jenkins认证集成github
|
3月前
|
安全 jenkins 持续交付
jenkins学习笔记之八:jenkins认证集成gitlab
jenkins学习笔记之八:jenkins认证集成gitlab
|
3月前
|
jenkins Devops 持续交付
jenkins学习笔记之七:jenkins集成LDAP用户认证
jenkins学习笔记之七:jenkins集成LDAP用户认证
|
4月前
|
XML JSON API
开发者必备:淘宝商品列表接口集成全攻略
淘宝开放平台提供的商品列表数据接口让开发者编程获取商品列表数据。接口支持按关键词、类目等查询条件获取商品详情,包括标题、价格等信息。具备灵活性高、数据丰富及操作便捷等特点。使用流程包括注册账号、构建并发送HTTP请求及处理响应数据。可用于电商数据分析、商品推荐等场景。开发者需遵守规定确保数据安全合法。[体验API](c0b.cc/R4rbK2)
|
4月前
|
SQL Java 数据库
实时计算 Flink版产品使用问题之Spring Boot集成Flink可以通过什么方式实现通过接口启动和关闭Flink程序
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法