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