From 8fc7ad0359ba7c0ce1e144525d1d59f1dc23512e Mon Sep 17 00:00:00 2001 From: ageerle <ageerle@163.com> Date: 星期四, 24 四月 2025 10:31:58 +0800 Subject: [PATCH] feat: mcp开启后才执行工具调用 --- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java | 13 +++---------- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java | 7 ++----- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java | 4 ++-- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java | 2 +- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java | 13 ++++++++++--- 5 files changed, 18 insertions(+), 21 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java index 40c3ad2..1895577 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java @@ -4,8 +4,8 @@ @Getter public enum BillingType { - TOKEN("1", "token鎵h垂"), // token鎵h垂 - TIMES("2", "娆℃暟鎵h垂"); // 娆℃暟鎵h垂 + TOKEN("1", "token鎵h垂"), + TIMES("2", "娆℃暟鎵h垂"); private final String code; private final String description; diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java index 772e029..04c5e45 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java @@ -4,9 +4,9 @@ @Getter public enum ChatModeType { - OLLAMA("ollama", "鏈湴閮ㄧ讲妯″瀷"), // token鎵h垂 - CHAT("chat", "涓浆妯″瀷"), // 娆℃暟鎵h垂 - VECTOR("vector", "鐭ヨ瘑搴撳悜閲忔ā鍨�"); // 娆℃暟鎵h垂 + OLLAMA("ollama", "鏈湴閮ㄧ讲妯″瀷"), + CHAT("chat", "涓浆妯″瀷"), + VECTOR("vector", "鐭ヨ瘑搴撳悜閲忔ā鍨�"); private final String code; private final String description; @@ -16,11 +16,4 @@ this.description = description; } - public String getCode() { - return code; - } - - public String getDescription() { - return description; - } } diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java index 1eee4ec..a4eae3d 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java @@ -3,7 +3,7 @@ import lombok.Getter; /** - * 鎻忚堪锛� + * 鎻忚堪锛氭槸鍚︽樉绀� * * @author ageerle@163.com * date 2025/4/10 diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java index f78ef5c..c2e5ed3 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.ai.mcp.SyncMcpToolCallbackProvider; import org.springframework.ai.openai.OpenAiChatOptions; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.List; @@ -28,6 +29,10 @@ private IChatModelService chatModelService; private OpenAiStreamClient openAiStreamClient; + + + @Value("${spring.ai.mcp.client.enabled}") + private Boolean enabled; private final ChatClient chatClient; @@ -43,10 +48,12 @@ public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) { ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey()); - String toolString = mcpChat(chatRequest.getPrompt()); - Message userMessage = Message.builder().content("宸ュ叿杩斿洖淇℃伅锛�"+toolString).role(Message.Role.USER).build(); List<Message> messages = chatRequest.getMessages(); - messages.add(userMessage); + if (enabled) { + String toolString = mcpChat(chatRequest.getPrompt()); + Message userMessage = Message.builder().content("宸ュ叿杩斿洖淇℃伅锛�"+toolString).role(Message.Role.USER).build(); + messages.add(userMessage); + } SSEEventSourceListener listener = new SSEEventSourceListener(emitter); ChatCompletion completion = ChatCompletion .builder() diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java index f5b14b5..f2965cb 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java @@ -80,12 +80,11 @@ checkUnauthenticatedUserChatLimit(request); }else { LocalCache.CACHE.put("userId", chatCostService.getUserId()); - chatRequest.setUserId(chatCostService.getUserId()); // 淇濆瓨娑堟伅璁板綍 骞舵墸闄よ垂鐢� chatCostService.deductToken(chatRequest); } - // 鏍规嵁妯″瀷鍚嶇О鍓嶇紑璋冪敤涓嶅悓鐨勫鐞嗛�昏緫 + // 鏍规嵁妯″瀷鍒嗙被璋冪敤涓嶅悓鐨勫鐞嗛�昏緫 switchModelAndHandle(chatRequest,sseEmitter); } catch (Exception e) { log.error(e.getMessage(),e); @@ -119,7 +118,6 @@ count++; RedisUtils.setCacheObject(redisKey, count); } - } /** @@ -145,8 +143,7 @@ if(StringUtils.isEmpty(sysPrompt)){ sysPrompt ="浣犳槸涓�涓敱RuoYI-AI寮�鍙戠殑浜哄伐鏅鸿兘鍔╂墜锛屽悕瀛楀彨鐔婄尗鍔╂墜銆備綘鎿呴暱涓嫳鏂囧璇濓紝鑳藉鐞嗚В骞跺鐞嗗悇绉嶉棶棰橈紝鎻愪緵瀹夊叏銆佹湁甯姪銆佸噯纭殑鍥炵瓟銆�" + "褰撳墠鏃堕棿锛�"+ DateUtils.getDate()+ - "#娉ㄦ剰锛氬洖澶嶄箣鍓嶆敞鎰忕粨鍚堜笂涓嬫枃鍜屽伐鍏疯繑鍥炲唴瀹广��"; - + "#娉ㄦ剰锛氬洖澶嶄箣鍓嶆敞鎰忕粨鍚堜笂涓嬫枃鍜屽伐鍏疯繑鍥炲唴瀹硅繘琛屽洖澶嶃��"; } // 璁剧疆绯荤粺榛樿鎻愮ず璇� Message sysMessage = Message.builder().content(sysPrompt).role(Message.Role.SYSTEM).build(); -- Gitblit v1.9.3