Selaa lähdekoodia

feat: mcp开启后才执行工具调用

ageerle 1 kuukausi sitten
vanhempi
commit
8fc7ad0359

+ 2 - 2
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java

@@ -4,8 +4,8 @@ import lombok.Getter;
 
 @Getter
 public enum BillingType {
-    TOKEN("1", "token扣费"), // token扣费
-    TIMES("2", "次数扣费");   // 次数扣费
+    TOKEN("1", "token扣费"),
+    TIMES("2", "次数扣费");
 
     private final String code;
     private final String description;

+ 3 - 10
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java

@@ -4,9 +4,9 @@ import lombok.Getter;
 
 @Getter
 public enum ChatModeType {
-    OLLAMA("ollama", "本地部署模型"), // token扣费
-    CHAT("chat", "中转模型"),   // 次数扣费
-    VECTOR("vector", "知识库向量模型");   // 次数扣费
+    OLLAMA("ollama", "本地部署模型"),
+    CHAT("chat", "中转模型"),
+    VECTOR("vector", "知识库向量模型");
 
     private final String code;
     private final String description;
@@ -16,11 +16,4 @@ public enum ChatModeType {
         this.description = description;
     }
 
-    public String getCode() {
-        return code;
-    }
-
-    public String getDescription() {
-        return description;
-    }
 }

+ 1 - 1
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java

@@ -3,7 +3,7 @@ package org.ruoyi.chat.enums;
 import lombok.Getter;
 
 /**
- * 描述:
+ * 描述:是否显示
  *
  * @author ageerle@163.com
  * date 2025/4/10

+ 10 - 3
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.ai.chat.client.ChatClient;
 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;
@@ -29,6 +30,10 @@ public class OpenAIServiceImpl implements IChatService {
 
     private OpenAiStreamClient openAiStreamClient;
 
+
+    @Value("${spring.ai.mcp.client.enabled}")
+    private Boolean enabled;
+
     private final ChatClient chatClient;
 
     public OpenAIServiceImpl(ChatClient.Builder chatClientBuilder, List<McpSyncClient> mcpSyncClients) {
@@ -43,10 +48,12 @@ public class OpenAIServiceImpl implements IChatService {
     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()

+ 2 - 5
ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java

@@ -80,12 +80,11 @@ public class SseServiceImpl implements ISseService {
                 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 @@ public class SseServiceImpl implements ISseService {
                 count++;
                 RedisUtils.setCacheObject(redisKey, count);
             }
-
     }
 
     /**
@@ -145,8 +143,7 @@ public class SseServiceImpl implements ISseService {
         if(StringUtils.isEmpty(sysPrompt)){
             sysPrompt ="你是一个由RuoYI-AI开发的人工智能助手,名字叫熊猫助手。你擅长中英文对话,能够理解并处理各种问题,提供安全、有帮助、准确的回答。" +
                     "当前时间:"+ DateUtils.getDate()+
-                    "#注意:回复之前注意结合上下文和工具返回内容。";
-
+                    "#注意:回复之前注意结合上下文和工具返回内容进行回复。";
         }
         // 设置系统默认提示词
         Message sysMessage = Message.builder().content(sysPrompt).role(Message.Role.SYSTEM).build();