suerprisePlus
2024-09-05 cc3a00f52f356c893d9f21798e9e941bb9533d10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
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<String, String> 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<String, Object> hashMap = new HashMap<String, Object>();
        if (isMap) {
            hashMap.put("type", "Map");
            HashMap<String, Object> mapObj = new HashMap<String, Object>();
            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("未查询到相关信息");
 
    }
 
 
}