package com.yb.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.yb.config.R; import com.yb.config.XzConfig; import com.yb.service.AgentService; import com.yb.service.XzService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @Tag(name = "Agent意图") @RestController @RequestMapping("/api/agent") @Api(tags = "Agent意图") @Component public class agentController { @Autowired private XzConfig xzConfig; @Autowired private XzService xzService; @Autowired private AgentService agentService; @ApiOperation("意图识别") @PostMapping("/intention") @Operation(summary = "意图识别") public R getIntention(@RequestParam Map allParams) throws Exception { System.out.println("rec getMessage:" + allParams); String msg = allParams.get("message"); String sessionId = allParams.get("session_id"); String libId = allParams.get("lib_id"); String url = xzConfig.agentUrl; String intent = xzConfig.agentIntent; String rag = xzConfig.agentRag; String chart = xzConfig.agentChat; // 判断msg是否为空 if (StringUtils.isEmpty(msg)) { String info = agentService.getAgentIntention(url, intent, "''"); JSONObject obj = JSONObject.parseObject(info); String cont = obj.getString("content"); System.out.println("rec isEmpty:" + cont); return R.error(cont); // } // 判断是否调用地图 boolean isMap = msg.matches("(?i).*@map.*"); HashMap hashMap = new HashMap(); if (isMap) { hashMap.put("type", "Map"); HashMap mapObj = new HashMap(); String funcInfo = agentService.getAgentIntention(url, intent, msg); JSONObject jsonObject = JSON.parseObject(funcInfo); String orderString = jsonObject.getString("order"); if(orderString == null){ hashMap.put("type", "text"); JSONObject errInfo = JSON.parseObject(funcInfo); String erroContent = errInfo.getString("content"); hashMap.put("content", erroContent); return R.error(erroContent); } JSONObject orderObject = JSON.parseObject(orderString); String func = orderObject.getString("name"); JSONObject argsObject = JSON.parseObject(orderObject.getString("args")); String place = argsObject.getString("place"); String type = argsObject.getString("attris"); String dis = argsObject.getString("redius"); int radius = 5000; if (dis != null) { dis = dis.replace("m", ""); radius = Integer.parseInt(dis); } String queryFiled = "enti_name"; String typeFiled = "sjnr"; String func1 = "poiMap"; String func2 = "aroundPoi"; String func3 = "queryMeta"; if (func.equals(func1)) { String poiMap = agentService.getAgentPoiMap(place, queryFiled); System.out.println("poiMap: " + poiMap); JSONObject poiObj = JSONObject.parseObject(poiMap); System.out.println("poiMap: " + poiObj); mapObj.put("func", func1); mapObj.put("data", poiObj); } else if (func.equals(func2)) { mapObj.put("func", func2); String aroundPoi = agentService.getAgentAroundPoi(place, type, radius, queryFiled, typeFiled); JSONArray dataArray = JSONArray.parseArray(aroundPoi); System.out.println("aroundPoi: " + dataArray); mapObj.put("data", dataArray); } else if (func.equals(func3)) { mapObj.put("func", func3); String filedString= xzService.getQueryMeta(xzConfig.layerId, xzConfig.dbid,typeFiled,xzConfig.queryEntity); JSONObject metaObject = JSON.parseObject(filedString); JSONArray dataArray = metaObject.getJSONArray("data"); String markDown = "| 数据类型 | 数据量 |\\n|------|------|\\n"; for (int i = 0; i < dataArray.size(); i++) { JSONObject dataObj = dataArray.getJSONObject(i); System.out.println("rec queryMeta:" + dataObj); String[] filedValue = new String[2]; for (String key : dataObj.keySet()) { if (key == typeFiled) { filedValue[0] = dataObj.getString(key); } else { filedValue[1] = dataObj.getString(key); } } markDown += "| " + filedValue[0] + " | " + filedValue[1] + " |\n"; } mapObj.put("data", markDown); } hashMap.put("content", mapObj); return R.ok(hashMap); } else { String ragInfo = agentService.getAgentIntention(url, chart, msg); JSONObject jsonObject = JSON.parseObject(ragInfo); String answer = jsonObject.getString("content"); System.out.println("Answer: " + answer); hashMap.put("content", answer); hashMap.put("type", "Rag"); return R.ok(hashMap); } // return R.error("未查询到相关信息"); } }