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文本对话处理源码详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小猪唏哩呼噜的作者是谁啊?
- 下一篇: 求一个好听有意境的男孩名字。