AiUserAgentQuestionThread.java
4.72 KB
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
package com.xly.thread;
import cn.hutool.core.lang.generator.UUIDGenerator;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.xly.config.SpringContextHolder;
import com.xly.entity.UserSceneSession;
import com.xly.milvus.service.AiGlobalAgentQuestionSqlEmitterService;
import com.xly.service.DynamicExeDbService;
import com.xly.service.RedisService;
import com.xly.util.MD5Util;
import com.xly.util.SqlValidateUtil;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.ChatMessageType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AiUserAgentQuestionThread implements Runnable {
private UserSceneSession session;
private String sSqlContent;
private String sQuestion;
private String cachType;
List<ChatMessage> userMessage;
public final String sProName="Sp_Ai_AiUserAgentQuestionThread";
public AiUserAgentQuestionThread(UserSceneSession session,String sQuestion,String sSqlContent,String cachType, List<ChatMessage> userMessage ) {
this.session = session;
this.sSqlContent = sSqlContent;
this.sQuestion = sQuestion;
this.userMessage = userMessage;
this.cachType = cachType;
}
@Override
public void run() {
sQuestion = sQuestion.replace("用户输入:",StrUtil.EMPTY);
String sSceneId = session.getCurrentScene().getSId();
String sMethodId = session.getCurrentTool().getSId();
DynamicExeDbService dynamicExeDbService = SpringContextHolder.getBean(DynamicExeDbService.class);
RedisService redisService = SpringContextHolder.getBean(RedisService.class);
AiGlobalAgentQuestionSqlEmitterService aiGlobalAgentQuestionSqlEmitterService = SpringContextHolder.getBean(AiGlobalAgentQuestionSqlEmitterService.class);
String sQuestionGroupNo = session.getSUserQuestionList().get(0);
Integer bRedis = (session.getSUserQuestionList().size()==1)?1:0;
Map<String, Object> data = getMap(sSceneId, sMethodId,bRedis,sQuestionGroupNo);
data.put("sQuestion",SqlValidateUtil.getsQuestion(session.getSUserQuestionList()));
data.put("sId",new UUIDGenerator().next());
data.put("cachType",cachType);
//插入Redis缓存
if(bRedis==1 && ObjectUtil.isNotEmpty(sSqlContent)){
String sReidKey = SqlValidateUtil.getsKey( sSceneId, sMethodId, sQuestionGroupNo);
redisService.set(sReidKey,sSqlContent);
}
String sKey = sSceneId+"_"+sMethodId +"_"+sQuestion;
// SqlValidateUtil.getsKey( sSceneId, sMethodId, SqlValidateUtil.getsQuestion(session.getSUserQuestionList()));
//存入向量库
aiGlobalAgentQuestionSqlEmitterService.addAiGlobalAgentQuestionSqlEmitter(sKey,data,sQuestion,sSqlContent,cachType,"ai_global_agent_question_sql");
//调用数据库插入数据库
Map<String, Object> searMap = dynamicExeDbService.getDoProMap(sProName, data);
dynamicExeDbService.getCallPro(searMap, sProName);
}
//获取组ID
private String getQuestionGroupNo(){
String sQuestionGroupNo = userMessage.stream()
.filter(one -> one.type().equals(ChatMessageType.USER) && !"用户输入:initAiService".equals(one.text()))
.findFirst()
.map(one->one.text())
.orElse(StrUtil.EMPTY);
sQuestionGroupNo = sQuestionGroupNo.replace("用户输入:",StrUtil.EMPTY);
sQuestionGroupNo = sQuestionGroupNo.replace(" ",StrUtil.EMPTY);
sQuestionGroupNo = sQuestionGroupNo.replace("\\t",StrUtil.EMPTY);
sQuestionGroupNo = sQuestionGroupNo.replace("\\n",StrUtil.EMPTY);
sQuestionGroupNo = sQuestionGroupNo.toLowerCase();
return sQuestionGroupNo;
}
/***
* @Author 钱豹
* @Date 4:22 2026/3/15
* @Param [sSceneId, sMethodId]
* @return java.util.Map<java.lang.String,java.lang.Object>
* @Description 获取执行的动态Map
**/
private Map<String, Object> getMap(String sSceneId, String sMethodId,Integer bRedis,String sQuestionGroupNo) {
Map<String,Object> data = new HashMap<>(16);
data.put("sSceneId", sSceneId);
data.put("sMethodId", sMethodId);
data.put("sSqlContent",sSqlContent);
data.put("sBrId",session.getSBrandsId());
data.put("sBrandsId",session.getSBrandsId());
data.put("sSuId",session.getSSubsidiaryId());
data.put("sSubsidiaryId",session.getSSubsidiaryId());
data.put("sLoginId",session.getUserName());
data.put("sUserName",session.getUserName());
data.put("sUserId",session.getUserId());
data.put("bRedis",bRedis);
data.put("sQuestionGroupNo",sQuestionGroupNo);
return data;
}
}