java unit包_Java接入UNIT文本对话处理源码详解

本文详述了如何使用Java调用UNIT接口实现文字对话功能。从训练UNIT场景模型到解析返回的JSON数据,逐步解析核心代码逻辑,并提供源码下载链接。涉及内容包括UNIT接口调用、JSON解析、意图判断及对话处理。
摘要由CSDN通过智能技术生成

应邀一位网友的想法,想实现调用UNIT接口,实现文字对话功能,特整理一下内容分享给大家。

此功能对于大神来说非常简单,但是对于新手理解代码处理逻辑,并且如何解析UNIT返回参数的处理,还是有一定的帮助的。

嘿嘿~文章最下方有源码下载地址哟~

如果您还不了解UNIT的使用,请移步到UNIT文档,请认真阅读~

http://ai.baidu.com/docs#/UNIT-sample/top

并且能够训练出该场景的机器人,本文例子就是利用这个天气机器来做对接的。

6b5cca8e0b786786eef26d6d0cf36b55.png

接下来看下对话交互的页面效果,请看下方图片

1fb2d4d2a07d894a0767726bc7cba313.png

以上是整体的交互效果,那么现在简单的来说说怎么搭建这个项目的步骤:

1.训练出UNIT场景模型(此处为天气查询场景)

2.导入此例子的源码项目(java开发)

3.修改token配置

4.启动项目即可

按照以上步骤一步一步进行,先看看该项目的包结构

3e6e2cf80c627c20c88ce8b757c25077.png

注意:获取token类之后,把token复制到UNIT核心类中,并且还需要记得修改场景ID,以下是核心类的作用:解析UNIT返回的JSON数据,获取我们需要的数据

此处能力有限,只能一步一步利用JSON解析,hhhh~

//获得返回的json数据

String str = HttpUtil.post(talkUrl, accessToken, "application/json", params);

System.out.println(str);

//获得result

JSONObject jsonobject = JSONObject.fromObject(str);

String result = jsonobject.getString("result");

System.out.println(result);

//获得会话session_id

JSONObject jsonobject2 = JSONObject.fromObject(result);

session_id = jsonobject2.getString("session_id");

map.put("session_id", session_id);

//获得动作列表

String action_list =jsonobject2.getString("action_list");

JSONArray json = JSONArray.fromObject(action_list); // 首先把字符串转成 JSONArray 对象

if(json.size()>0){

for(int i=0;i然后在分享控制层的作用:

1.首先用一个Map接收解析的数据,传到控制层,然后

2.判断是否命中意图,

3.如果命中意图,该意图是否完成还是未完成,

4.既然是命中意图,那么命中的是那个意图,需要做什么样的逻辑处理.

//调用unit分析语音

Map map = UnitService.utterance(session_id, msg);

//判断是否命中意图

if(!"fail_action".equals(map.get("action_id"))){

//判断是否意图结束

if("satisfy".equals(map.get("act_type"))){

session_id="";//意图结束,清空session_id

/**

* 以下是意图处理逻辑,根据命中的意图,判断进入当前意图的对话处理 current_qu_intent字段为意图

*/

switch (map.get("current_qu_intent")) {

case "RAIN": //查询是否下雨

//解析是否刮风的词槽列表

String companyParams = getCompany(map.get("bot_merged_slots"));

if(!companyParams.equals("")){

modelMap.put("companyParams", companyParams);

}else{

modelMap.put("companyParams", map.get("raw_query"));

}

modelMap.put("queryType", "COMPANY");

break;

case "WIND": //查询是否刮风

//解析是否刮风的词槽列表

String companyParams2 = getCompany(map.get("bot_merged_slots"));

if(!companyParams2.equals("")){

modelMap.put("companyParams", companyParams2);

}else{

modelMap.put("companyParams", map.get("raw_query"));

}

modelMap.put("queryType", "COMPANY");

break;

default:

break;

}

}else{

//意图未完成 需要传入session_id 用户下一次对话

session_id = map.get("session_id");

}

//返回机器人说的bot 不管意图有没有命中

modelMap.put("msg", map.get("say"));

}else{

modelMap.put("msg", "我好像不太明白");

}

接下来咋们看前台的一个处理,这是页面上的发送消息的一个函数,作用:

1.获取文本消息,加载到聊天页面样式中

2.ajax调用后台控制层,然后判断是否正常返回数据

3.加载机器回复消息样式

//发送消息

function sendMessage(event, from_name){

//获得发送的消息

var msg = $("#message").val();

// alert(msg);

//自己回复的样式加载

var htmlData = '

'

+ '

496584'

+ '

'

+ '

' + msg + ''

+ '

' + from_name + ' · 30秒前'

+ ''

+ '';

$("#message_box").append(htmlData);

$('#message_box').scrollTop($("#message_box")[0].scrollHeight + 20);

$("#message").val('');

var session_id = $("#session_id").val();

$.ajax({

type:"POST",

url:"${pageContext.request.contextPath}/unit/common.do",

// datatype: "json",

data:{

"session_id":session_id,

"msg":msg

},

success:function(data){

var mes = eval(data);

if (mes.success) {

var msg = data.msg;

var session_id = data.session_id;

$("#session_id").val(session_id);

//机器人回复样式加载

var htmlData = '

'

+ '

496584'

+ '

'

+ '

' + msg + ''

+ '

' + '机器人 ' + '· 30秒前'

+ ''

+ '';

$("#message_box").append(htmlData);

$('#message_box').scrollTop($("#message_box")[0].scrollHeight + 20);

$("#message").val('');

} else {

alert("返回数据失败");

}

},

error: function(){

//请求出错处理

alert("出情况了");

}

});

}

经过前台和后台的一些讲解,不知道大家清楚不,如果有任何问题,可以在下方回复我

感谢支持~

附加源码下载:https://gitee.com/liyingming/unitTest

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值