From 9cd825aea53fa5ba0cda1485464af027e27f0ce4 Mon Sep 17 00:00:00 2001
From: admin <cgf12138@163.com>
Date: 星期五, 06 六月 2025 08:57:36 +0800
Subject: [PATCH] 0606
---
aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/controller/AiBotController.java | 361 +++++++++++++++++++++++++++++++++------------------
1 files changed, 235 insertions(+), 126 deletions(-)
diff --git a/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/controller/AiBotController.java b/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/controller/AiBotController.java
index d26169f..555afa2 100644
--- a/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/controller/AiBotController.java
+++ b/aiflowy-modules/aiflowy-module-ai/src/main/java/tech/aiflowy/ai/controller/AiBotController.java
@@ -12,25 +12,35 @@
import com.agentsflex.core.message.HumanMessage;
import com.agentsflex.core.message.SystemMessage;
import com.agentsflex.core.prompt.HistoriesPrompt;
+import com.agentsflex.core.prompt.ToolPrompt;
import com.agentsflex.core.util.CollectionUtil;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
-import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.mybatisflex.core.query.QueryWrapper;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import com.mybatisflex.core.table.TableInfo;
+import com.mybatisflex.core.table.TableInfoFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+import tech.aiflowy.ai.config.DifyStreamClient;
import tech.aiflowy.ai.entity.*;
import tech.aiflowy.ai.mapper.AiBotConversationMessageMapper;
import tech.aiflowy.ai.service.*;
import tech.aiflowy.common.ai.ChatManager;
import tech.aiflowy.common.ai.MySseEmitter;
import tech.aiflowy.common.domain.Result;
+import tech.aiflowy.common.entity.LoginAccount;
import tech.aiflowy.common.satoken.util.SaTokenUtil;
import tech.aiflowy.common.util.StringUtil;
import tech.aiflowy.common.web.controller.BaseCurdController;
@@ -42,10 +52,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigInteger;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* 鎺у埗灞傘��
@@ -67,6 +74,11 @@
private AiBotConversationMessageService aiBotConversationMessageService;
@Resource
private AiBotConversationMessageMapper aiBotConversationMessageMapper;
+
+ private static final Logger logger = LoggerFactory.getLogger(AiBotController.class);
+ @Autowired
+ private RestTemplate restTemplate;
+
public AiBotController(AiBotService service, AiLlmService aiLlmService, AiBotWorkflowService aiBotWorkflowService, AiBotKnowledgeService aiBotKnowledgeService, AiBotMessageService aiBotMessageService) {
super(service);
this.aiLlmService = aiLlmService;
@@ -75,8 +87,6 @@
this.aiBotMessageService = aiBotMessageService;
}
- @Resource
- private AiPluginsService aiPluginsService;
@Resource
private AiBotPluginsService aiBotPluginsService;
@Resource
@@ -115,6 +125,7 @@
/**
* 褰撳墠绯荤粺鐢ㄦ埛璋冪敤瀵硅瘽
+ *
* @param prompt
* @param botId
* @param sessionId
@@ -122,6 +133,11 @@
* @param response
* @return
*/
+
+ @Autowired
+ private ObjectMapper objectMapper;
+
+
@PostMapping("chat")
public SseEmitter chat(@JsonBody(value = "prompt", required = true) String prompt,
@JsonBody(value = "botId", required = true) BigInteger botId,
@@ -133,64 +149,119 @@
if (aiBot == null) {
return ChatManager.getInstance().sseEmitterForContent("鏈哄櫒浜轰笉瀛樺湪");
}
-
Map<String, Object> llmOptions = aiBot.getLlmOptions();
- AiLlm aiLlm = aiLlmService.getById(aiBot.getLlmId());
+ String systemPrompt = llmOptions != null ? (String) llmOptions.get("systemPrompt") : null;
+ if (StringUtil.hasText(aiBot.getModelAPI())){
+ String apiUrl = aiBot.getModelAPI(); // 鏇挎崲涓哄疄闄匒PI URL
+ String apiKey = aiBot.getModelKEY(); // 鏇挎崲涓哄疄闄匒PI Key
- if (aiLlm == null) {
- return ChatManager.getInstance().sseEmitterForContent("LLM涓嶅瓨鍦�");
- }
+ DifyStreamClient client = new DifyStreamClient(apiUrl, apiKey, aiBotMessageService);
+ AiBotMessageMemory memory = new AiBotMessageMemory(botId, SaTokenUtil.getLoginAccount().getId(),
+ sessionId, isExternalMsg, aiBotMessageService, aiBotConversationMessageMapper,
+ aiBotConversationMessageService);
- Llm llm = aiLlm.toLlm();
+ final HistoriesPrompt historiesPrompt = new HistoriesPrompt();
+ if (systemPrompt != null) {
+ historiesPrompt.setSystemMessage(SystemMessage.of(systemPrompt));
+ }
- if (llm == null) {
- return ChatManager.getInstance().sseEmitterForContent("LLM鑾峰彇涓虹┖");
- }
+ historiesPrompt.setMemory(memory);
- AiBotMessageMemory memory = new AiBotMessageMemory(botId, SaTokenUtil.getLoginAccount().getId(),
- sessionId, isExternalMsg, aiBotMessageService, aiBotConversationMessageMapper,
- aiBotConversationMessageService);
+ HumanMessage humanMessage = new HumanMessage(prompt);
- final HistoriesPrompt historiesPrompt = new HistoriesPrompt();
- historiesPrompt.setSystemMessage(SystemMessage.of((String) llmOptions.get("systemPrompt")));
- historiesPrompt.setMemory(memory);
+ // 娣诲姞鎻掍欢鐩稿叧鐨刦unction calling
+ appendPluginToolFunction(botId, humanMessage);
- HumanMessage humanMessage = new HumanMessage(prompt);
+ //娣诲姞宸ヤ綔娴佺浉鍏崇殑 Function Calling
+ appendWorkflowFunctions(botId, humanMessage);
- // 娣诲姞鎻掍欢鐩稿叧鐨刦unction calling
- appendPluginToolFunction(botId, humanMessage);
+ //娣诲姞鐭ヨ瘑搴撶浉鍏崇殑 Function Calling
+ appendKnowledgeFunctions(botId, humanMessage);
- //娣诲姞宸ヤ綔娴佺浉鍏崇殑 Function Calling
- appendWorkflowFunctions(botId, humanMessage);
+ historiesPrompt.addMessage(humanMessage);
- //娣诲姞鐭ヨ瘑搴撶浉鍏崇殑 Function Calling
- appendKnowledgeFunctions(botId, humanMessage);
- historiesPrompt.addMessage(humanMessage);
+ final Boolean[] needClose = {true};
- MySseEmitter emitter = new MySseEmitter((long) (1000 * 60 * 2));
+ ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- final Boolean[] needClose = {true};
- if (humanMessage.getFunctions() != null && !humanMessage.getFunctions().isEmpty()) {
+
+ MySseEmitter emitter = new MySseEmitter(1000L * 60 * 2); // 2鍒嗛挓瓒呮椂
+
try {
- AiMessageResponse aiMessageResponse = llm.chat(historiesPrompt);
- function_call(aiMessageResponse, emitter, needClose, historiesPrompt, llm, prompt, false);
+ String userId = SaTokenUtil.getLoginAccount().getId() + "";
+ client.chatStream(prompt, userId, emitter, sessionId, botId);
} catch (Exception e) {
emitter.completeWithError(e);
}
+ System.out.println(emitter.toString());
+ return emitter;
+ }
+ else{
+ AiLlm aiLlm = aiLlmService.getById(aiBot.getLlmId());
- if (needClose[0]) {
- System.out.println("function chat complete");
- emitter.complete();
+ if (aiLlm == null) {
+ return ChatManager.getInstance().sseEmitterForContent("LLM涓嶅瓨鍦�");
}
- } else {
+ Llm llm = aiLlm.toLlm();
+ if (llm == null) {
+ return ChatManager.getInstance().sseEmitterForContent("LLM鑾峰彇涓虹┖");
+ }
+
+ AiBotMessageMemory memory = new AiBotMessageMemory(botId, SaTokenUtil.getLoginAccount().getId(),
+ sessionId, isExternalMsg, aiBotMessageService, aiBotConversationMessageMapper,
+ aiBotConversationMessageService);
+
+ final HistoriesPrompt historiesPrompt = new HistoriesPrompt();
+ if (systemPrompt != null) {
+ historiesPrompt.setSystemMessage(SystemMessage.of(systemPrompt));
+ }
+
+ historiesPrompt.setMemory(memory);
+
+ HumanMessage humanMessage = new HumanMessage(prompt);
+
+ // 娣诲姞鎻掍欢鐩稿叧鐨刦unction calling
+ appendPluginToolFunction(botId, humanMessage);
+
+ //娣诲姞宸ヤ綔娴佺浉鍏崇殑 Function Calling
+ appendWorkflowFunctions(botId, humanMessage);
+
+ //娣诲姞鐭ヨ瘑搴撶浉鍏崇殑 Function Calling
+ appendKnowledgeFunctions(botId, humanMessage);
+
+ historiesPrompt.addMessage(humanMessage);
+
+ MySseEmitter emitter = new MySseEmitter((long) (1000 * 60 * 2));
+
+ final Boolean[] needClose = {true};
+
+ ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+ // 缁熶竴浣跨敤娴佸紡澶勭悊锛屾棤璁烘槸鍚︽湁 Function Calling
llm.chatStream(historiesPrompt, new StreamResponseListener() {
@Override
public void onMessage(ChatContext context, AiMessageResponse response) {
try {
+ RequestContextHolder.setRequestAttributes(sra, true);
+ if (response != null) {
+ // 妫�鏌ユ槸鍚﹂渶瑕佽Е鍙� Function Calling
+ if (response.getFunctionCallers() != null && CollectionUtil.hasItems(response.getFunctionCallers())) {
+ needClose[0] = false;
+ function_call(response, emitter, needClose, historiesPrompt, llm, prompt, false);
+ } else {
+ // 寮哄埗娴佸紡杩斿洖锛屽嵆浣挎湁 Function Calling 涔熷厛杩斿洖閮ㄥ垎缁撴灉
+ if (response.getMessage() != null) {
+ String content = response.getMessage().getContent();
+ if (StringUtil.hasText(content)) {
+ System.out.println(response);
+ emitter.send(JSON.toJSONString(response.getMessage()));
+ }
+ }
+ }
+ }
- function_call(response, emitter, needClose, historiesPrompt, llm, prompt, false);
+
} catch (Exception e) {
emitter.completeWithError(e);
}
@@ -199,7 +270,6 @@
@Override
public void onStop(ChatContext context) {
if (needClose[0]) {
- System.out.println("normal chat complete");
emitter.complete();
}
}
@@ -209,16 +279,60 @@
emitter.completeWithError(throwable);
}
});
+
+ System.out.println(emitter.toString());
+ return emitter;
}
- return emitter;
}
+
+ public Result save(@RequestBody String jsonStr) {
+ // 瑙f瀽JSON
+ JSONObject json = JSONObject.parseObject(jsonStr);
+
+ // 鍚堝苟鎵�鏈塻econdMenuId*瀛楁
+ List<Integer> menuIds = new ArrayList<>();
+ for (String key : json.keySet()) {
+ if (key.startsWith("secondMenuId")) {
+ Object value = json.get(key);
+ if (value instanceof Integer) {
+ menuIds.add((Integer) value);
+ }
+ }
+ }
+
+ // 淇濈暀绗竴涓狪D锛堟牴鎹渶瑕佽皟鏁达級
+ if (!menuIds.isEmpty()) {
+ json.put("secondMenuId", menuIds.get(0));
+ }
+
+ // 杞崲涓哄疄浣撶被
+ AiBot entity = json.toJavaObject(AiBot.class);
+
+ // 鍚庣画澶勭悊淇濇寔涓嶅彉
+ Result result = onSaveOrUpdateBefore(entity, true);
+ if (result != null) return result;
+
+ if (entity == null) {
+ throw new NullPointerException("entity is null");
+ }
+ LoginAccount loginAccount = SaTokenUtil.getLoginAccount();
+ commonFiled(entity,loginAccount.getId(),loginAccount.getTenantId(),loginAccount.getDeptId());
+ boolean success = service.save(entity);
+ onSaveOrUpdateAfter(entity, true);
+ TableInfo tableInfo = TableInfoFactory.ofEntityClass(entity.getClass());
+ Object[] pkArgs = tableInfo.buildPkSqlArgs(entity);
+ return Result.create(success).set("id", pkArgs);
+ }
+
+
/**
* 澶栭儴鐢ㄦ埛璋冪敤鏅鸿兘浣撹繘琛屽璇�
* 闇�瑕佺敤鎴蜂紶 apiKey 瀵圭敤鎴疯繘琛岃韩浠介獙璇�
- * @return
+ *
* @param stream [true: 杩斿洖sse false锛� 杩斿洖json
+ * @return
*/
@SaIgnore
@PostMapping("externalChat")
@@ -242,25 +356,27 @@
.select("api_key", "status", "expired_at")
.from("tb_sys_api_key")
.where("api_key = ? ", apiKey);
- SysApiKey aiBotApiKey = aiBotApiKeyMapper.selectOneByQuery(queryWrapper);
- if (aiBotApiKey == null ){
- return createResponse(stream, JSON.toJSONString(errorRespnseMsg(1,"璇piKey涓嶅瓨鍦�")));
+ SysApiKey aiBotApiKey = aiBotApiKeyMapper.selectOneByQuery(queryWrapper);
+ if (aiBotApiKey == null) {
+ return createResponse(stream, JSON.toJSONString(errorRespnseMsg(1, "璇piKey涓嶅瓨鍦�")));
}
- if (aiBotApiKey.getStatus() == 0 ){
- return createResponse(stream, JSON.toJSONString(errorRespnseMsg(2,"璇piKey鏈惎鐢�")));
+ if (aiBotApiKey.getStatus() == 0) {
+ return createResponse(stream, JSON.toJSONString(errorRespnseMsg(2, "璇piKey鏈惎鐢�")));
}
- if (aiBotApiKey.getExpiredAt().getTime() < new Date().getTime()){
- return createResponse(stream, JSON.toJSONString(errorRespnseMsg(3,"璇piKey宸插け鏁�")));
+ if (aiBotApiKey.getExpiredAt().getTime() < new Date().getTime()) {
+ return createResponse(stream, JSON.toJSONString(errorRespnseMsg(3, "璇piKey宸插け鏁�")));
}
AiBot aiBot = service.getById(botId);
if (aiBot == null) {
- return createResponse(stream, JSON.toJSONString(errorRespnseMsg(4,"鏈哄櫒浜轰笉瀛樺湪")));
+ return createResponse(stream, JSON.toJSONString(errorRespnseMsg(4, "鏈哄櫒浜轰笉瀛樺湪")));
}
Map<String, Object> llmOptions = aiBot.getLlmOptions();
+ String systemPrompt = llmOptions != null ? (String) llmOptions.get("systemPrompt") : null;
+
AiLlm aiLlm = aiLlmService.getById(aiBot.getLlmId());
if (aiLlm == null) {
return createResponse(stream, JSON.toJSONString(errorRespnseMsg(5, "LLM涓嶅瓨鍦�")));
@@ -269,7 +385,9 @@
Llm llm = aiLlm.toLlm();
AiBotExternalMessageMemory messageMemory = new AiBotExternalMessageMemory(messages);
HistoriesPrompt historiesPrompt = new HistoriesPrompt();
- historiesPrompt.setSystemMessage(SystemMessage.of((String) llmOptions.get("systemPrompt")));
+ if (systemPrompt != null) {
+ historiesPrompt.setSystemMessage(SystemMessage.of(systemPrompt));
+ }
historiesPrompt.setMemory(messageMemory);
String prompt = messages.get(messages.size() - 1).getContent();
@@ -277,7 +395,6 @@
// 娣诲姞鎻掍欢銆佸伐浣滄祦銆佺煡璇嗗簱鐩稿叧鐨� Function Calling
appendPluginToolFunction(botId, humanMessage);
-// appendPluginFunctions(botId, humanMessage);
appendWorkflowFunctions(botId, humanMessage);
appendKnowledgeFunctions(botId, humanMessage);
@@ -288,7 +405,6 @@
MySseEmitter emitter = new MySseEmitter((long) (1000 * 60 * 2));
final Boolean[] needClose = {true};
-// if (humanMessage.getFunctions() != null && !humanMessage.getFunctions().isEmpty()) {
if (humanMessage.getFunctions() != null && !humanMessage.getFunctions().isEmpty()) {
try {
AiMessageResponse aiMessageResponse = llm.chat(historiesPrompt);
@@ -341,7 +457,7 @@
}
} else {
AiMessageResponse messageResponse = llm.chat(historiesPrompt);
- resultFunctionCall = jsonResultJsonFunctionCall(messageResponse, historiesPrompt, llm, prompt);
+ resultFunctionCall = jsonResultJsonFunctionCall(messageResponse, historiesPrompt, llm, prompt);
AiBotExternalMsgJsonResult result = handleMessageResult(resultFunctionCall.getMessage());
return JSON.toJSONString(result, new SerializeConfig());
}
@@ -349,12 +465,18 @@
}
private AiBotExternalMsgJsonResult handleMessageResult(AiMessage aiMessage) {
- AiBotExternalMsgJsonResult messageResult = new AiBotExternalMsgJsonResult();
+ AiBotExternalMsgJsonResult messageResult = new AiBotExternalMsgJsonResult();
messageResult.setCreated(new Date().getTime());
AiBotExternalMsgJsonResult.Usage usage = new AiBotExternalMsgJsonResult.Usage();
- usage.setTotalTokens(aiMessage.getTotalTokens());
- usage.setCompletionTokens(aiMessage.getCompletionTokens());
- usage.setPromptTokens(aiMessage.getPromptTokens());
+ if (aiMessage.getTotalTokens() != null){
+ usage.setTotalTokens(aiMessage.getTotalTokens());
+ }
+ if (aiMessage.getCompletionTokens() != null){
+ usage.setCompletionTokens(aiMessage.getCompletionTokens());
+ }
+ if (aiMessage.getPromptTokens() != null){
+ usage.setPromptTokens(aiMessage.getPromptTokens());
+ }
messageResult.setUsage(usage);
AiBotExternalMsgJsonResult.Choice choice = new AiBotExternalMsgJsonResult.Choice();
AiBotExternalMsgJsonResult.Message message = new AiBotExternalMsgJsonResult.Message();
@@ -382,14 +504,14 @@
private Object createErrorResponse(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());
}
+
/**
- *
* @param aiMessageResponse 澶фā鍨嬭繑鍥炵殑娑堟伅
* @param emitter
- * @param needClose 鏄惁闇�瑕佸叧闂祦
- * @param historiesPrompt 娑堟伅鍘嗗彶璁板綍
- * @param llm 澶фā鍨�
- * @param prompt 鎻愮ず璇�
+ * @param needClose 鏄惁闇�瑕佸叧闂祦
+ * @param historiesPrompt 娑堟伅鍘嗗彶璁板綍
+ * @param llm 澶фā鍨�
+ * @param prompt 鎻愮ず璇�
* @param isExternalChatApi true 澶栭儴绯荤粺璋冪敤bot false 鍐呴儴绯荤粺璋冪敤bot
*/
private String function_call(AiMessageResponse aiMessageResponse, MySseEmitter emitter, Boolean[] needClose, HistoriesPrompt historiesPrompt, Llm llm, String prompt, boolean isExternalChatApi) {
@@ -399,62 +521,48 @@
Object messageContent = aiMessageResponse.getMessage();
if (StringUtil.hasText(content)) {
// 濡傛灉鏄閮ㄧ郴缁熻皟鐢╟hat
- if (isExternalChatApi){
+ if (isExternalChatApi) {
AiBotExternalMsgJsonResult result = handleMessageStreamJsonResult(aiMessageResponse.getMessage());
- System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
- System.out.println(JSON.toJSONString(result, new SerializeConfig()));
- System.out.println("鏈畬娴嬭瘯");
emitter.send(JSON.toJSONString(result, new SerializeConfig()));
- } else{
+ } else {
emitter.send(JSON.toJSONString(messageContent));
}
}
- List<FunctionCaller> functionCallers = aiMessageResponse.getFunctionCallers();
- if (CollectionUtil.hasItems(functionCallers)) {
- needClose[0] = false;
- for (FunctionCaller functionCaller : functionCallers) {
- Object result = functionCaller.call();
- if (ObjectUtil.isNotEmpty(result)) {
-
- String newPrompt = "璇锋牴鎹互涓嬪唴瀹瑰洖绛旂敤鎴凤紝鍐呭鏄�:\n" + result + "\n 鐢ㄦ埛鐨勯棶棰樻槸锛�" + prompt;
- historiesPrompt.addMessageTemporary(new HumanMessage(newPrompt));
-
- llm.chatStream(historiesPrompt, new StreamResponseListener() {
- @Override
- public void onMessage(ChatContext context, AiMessageResponse response) {
- needClose[0] = true;
- String content = response.getMessage().getContent();
- Object messageContent = response.getMessage();
- if (StringUtil.hasText(content)) {
- String jsonResult = JSON.toJSONString(messageContent);
- emitter.send(jsonResult);
- }
- }
-
- @Override
- public void onStop(ChatContext context) {
- if (needClose[0]) {
- System.out.println("function chat complete");
- emitter.complete();
- }
- historiesPrompt.clearTemporaryMessages();
- }
-
- @Override
- public void onFailure(ChatContext context, Throwable throwable) {
- emitter.completeWithError(throwable);
- }
- });
+ System.out.println("function call 鎺ユ敹鍒扮殑鍙傛暟message锛�" + aiMessageResponse);
+ llm.chatStream(ToolPrompt.of(aiMessageResponse), new StreamResponseListener() {
+ @Override
+ public void onMessage(ChatContext context, AiMessageResponse response) {
+ System.out.println("function call <UNK>message<UNK>" + aiMessageResponse);
+ String content = response.getMessage().getContent();
+ if (StringUtil.hasText(content)) {
+ System.out.println("if content" + content);
+ emitter.send(JSON.toJSONString(response.getMessage()));
}
}
- }
+
+ @Override
+ public void onStop(ChatContext context) {
+ System.out.println("function call complete");
+ emitter.complete();
+ }
+
+ @Override
+ public void onFailure(ChatContext context, Throwable throwable) {
+ logger.error("function_call鎶ラ敊:",throwable);
+ AiMessage aiMessage = new AiMessage();
+ aiMessage.setContent("鏈煡璇㈠埌鐩稿叧淇℃伅...");
+ emitter.send(JSON.toJSONString(aiMessage));
+ System.out.println("function call complete with error");
+ }
+ });
+
return JSON.toJSONString(messageContent);
}
- private Map<String, Object> errorRespnseMsg(int errorCode, String message){
- HashMap<String, Object> result = new HashMap<>();
+ private Map<String, Object> errorRespnseMsg(int errorCode, String message) {
+ HashMap<String, Object> result = new HashMap<>();
result.put("error", errorCode);
result.put("message", message);
return result;
@@ -474,7 +582,7 @@
return result;
}
- private AiMessageResponse jsonResultJsonFunctionCall(AiMessageResponse aiMessageResponse , HistoriesPrompt historiesPrompt, Llm llm, String prompt) {
+ private AiMessageResponse jsonResultJsonFunctionCall(AiMessageResponse aiMessageResponse, HistoriesPrompt historiesPrompt, Llm llm, String prompt) {
List<FunctionCaller> functionCallers = aiMessageResponse.getFunctionCallers();
if (CollectionUtil.hasItems(functionCallers)) {
for (FunctionCaller functionCaller : functionCallers) {
@@ -511,7 +619,7 @@
}
}
-// private void appendPluginFunctions(BigInteger botId, HumanMessage humanMessage) {
+ // private void appendPluginFunctions(BigInteger botId, HumanMessage humanMessage) {
// QueryWrapper queryWrapper = QueryWrapper.create().eq(AiBotPlugins::getBotId, botId);
// List<AiBotPlugins> aiBotPlugins = aiBotPluginsService.getMapper().selectListWithRelationsByQuery(queryWrapper);
// if (cn.hutool.core.collection.CollectionUtil.isNotEmpty(aiBotPlugins)) {
@@ -522,21 +630,22 @@
// }
// }
private void appendPluginToolFunction(BigInteger botId, HumanMessage humanMessage) {
- QueryWrapper queryWrapper = QueryWrapper.create().eq(AiBotPlugins::getBotId, botId);
- List<AiBotPlugins> aiBotPlugins = aiBotPluginsService.getMapper().selectListWithRelationsByQuery(queryWrapper);
- // 鏍规嵁鎻掍欢iD鏌ヨ璇ユ彃浠朵笅闈㈡湁鍝簺鎻掍欢宸ュ叿锛岃浆鎹㈡垚Function
- for (AiBotPlugins aiBotPlugin: aiBotPlugins){
- BigInteger pluginId = aiBotPlugin.getPluginToolId();
- QueryWrapper queryTool = QueryWrapper.create()
- .select("*")
- .from("tb_ai_plugin_tool")
- .where("plugin_id = ?", pluginId);
- List<AiPluginTool> aiPluginTools = aiPluginToolService.getMapper().selectListWithRelationsByQuery(queryTool);
- for (AiPluginTool item: aiPluginTools){
- humanMessage.addFunction(item.toFunction());
- }
+ QueryWrapper queryWrapper = QueryWrapper.create().select("plugin_tool_id").eq(AiBotPlugins::getBotId, botId);
+ List<BigInteger> pluginToolIds = aiBotPluginsService.getMapper().selectListWithRelationsByQueryAs(queryWrapper, BigInteger.class);
+ if (pluginToolIds == null || pluginToolIds.isEmpty()) {
+ return;
}
+ QueryWrapper queryTool = QueryWrapper.create()
+ .select("*")
+ .from("tb_ai_plugin_tool")
+ .in("id", pluginToolIds);
+ List<AiPluginTool> aiPluginTools = aiPluginToolService.getMapper().selectListWithRelationsByQuery(queryTool);
+ for (AiPluginTool item : aiPluginTools) {
+ humanMessage.addFunction(item.toFunction());
+ }
+
+
}
-}
+}
\ No newline at end of file
--
Gitblit v1.8.0