From 8fc7ad0359ba7c0ce1e144525d1d59f1dc23512e Mon Sep 17 00:00:00 2001 From: ageerle Date: Thu, 24 Apr 2025 10:31:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20mcp=E5=BC=80=E5=90=AF=E5=90=8E=E6=89=8D?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=B7=A5=E5=85=B7=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/org/ruoyi/chat/enums/BillingType.java | 4 ++-- .../java/org/ruoyi/chat/enums/ChatModeType.java | 13 +++---------- .../main/java/org/ruoyi/chat/enums/DisplayType.java | 2 +- .../chat/service/chat/impl/OpenAIServiceImpl.java | 13 ++++++++++--- .../chat/service/chat/impl/SseServiceImpl.java | 7 ++----- 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 40c3ad28..18955778 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 @@ 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; 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 772e029f..04c5e453 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 @@ 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; - } } 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 1eee4ec3..a4eae3d9 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 @@ package org.ruoyi.chat.enums; 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 f78ef5cb..c2e5ed31 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.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 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 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 f5b14b5f..f2965cbc 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 @@ 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();