欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/11/27 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java unit包_Java接入UNIT文本对话处理源码详解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

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

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

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

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

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

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

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

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

3.修改token配置

4.启动项目即可

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

注意:获取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 = '

'

+ '

'

+ '

'

+ '

' + 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 = '

'

+ '

'

+ '

'

+ '

' + 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

总结

以上是生活随笔为你收集整理的java unit包_Java接入UNIT文本对话处理源码详解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。