From 788b372e3273f4804e83d50608dc001c7fcf9b58 Mon Sep 17 00:00:00 2001 From: ageerle <ageerle@163.com> Date: 星期四, 17 四月 2025 16:23:32 +0800 Subject: [PATCH] feat: mcp支持远程调用 --- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java | 32 +++++++++++++++++++++++++++++--- 1 files changed, 29 insertions(+), 3 deletions(-) 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 1f2f47e..2c9fd28 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 @@ -2,6 +2,7 @@ import cn.hutool.json.JSONUtil; import io.modelcontextprotocol.client.McpClient; +import io.modelcontextprotocol.client.McpSyncClient; import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport; import io.modelcontextprotocol.spec.McpSchema; import lombok.RequiredArgsConstructor; @@ -15,6 +16,12 @@ import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.common.core.exception.ServiceException; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.ai.chat.memory.InMemoryChatMemory; +import org.springframework.ai.mcp.SyncMcpToolCallbackProvider; +import org.springframework.ai.tool.ToolCallbackProvider; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; @@ -27,14 +34,33 @@ @Service @Slf4j -@RequiredArgsConstructor public class OpenAIServiceImpl implements IChatService { - private final OpenAiStreamClient openAiStreamClient; + @Autowired + private OpenAiStreamClient openAiStreamClient; + + private final ChatClient chatClient; + + private final ChatMemory chatMemory = new InMemoryChatMemory(); + + + + public OpenAIServiceImpl(ChatClient.Builder chatClientBuilder, List<McpSyncClient> mcpSyncClients, ToolCallbackProvider tools) { + this.chatClient = chatClientBuilder + .defaultTools(new SyncMcpToolCallbackProvider(mcpSyncClients)) + .build(); + } + + + public String webMcpChat(String prompt){ + return this.chatClient.prompt(prompt).call().content(); + + } + @Override public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) { - String toolString = mcpChat(chatRequest); + String toolString = webMcpChat(chatRequest.getPrompt()); Message userMessage = Message.builder().content("宸ュ叿杩斿洖淇℃伅锛�"+toolString).role(Message.Role.ASSISTANT).build(); List<Message> messages = chatRequest.getMessages(); -- Gitblit v1.9.3