From 761d954ef136ee6fdff2748dcd81c41c814f933d Mon Sep 17 00:00:00 2001 From: ageer <ageerle@163.com> Date: 星期三, 16 四月 2025 21:56:05 +0800 Subject: [PATCH] feat: mcp 1.0.0 --- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java | 45 +++++++++++++++++++++++++++------------------ 1 files changed, 27 insertions(+), 18 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 34585e2..1f2f47e 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 @@ -6,16 +6,15 @@ import io.modelcontextprotocol.spec.McpSchema; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.ruoyi.chat.listener.SSEEventSourceListener; import org.ruoyi.chat.service.chat.IChatService; -import org.ruoyi.common.chat.entity.chat.ChatChoice; -import org.ruoyi.common.chat.entity.chat.ChatCompletion; -import org.ruoyi.common.chat.entity.chat.ChatCompletionResponse; -import org.ruoyi.common.chat.entity.chat.Parameters; +import org.ruoyi.common.chat.entity.chat.*; import org.ruoyi.common.chat.entity.chat.tool.ToolCallFunction; import org.ruoyi.common.chat.entity.chat.tool.Tools; import org.ruoyi.common.chat.entity.chat.tool.ToolsFunction; import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.chat.request.ChatRequest; +import org.ruoyi.common.core.exception.ServiceException; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; @@ -33,9 +32,27 @@ private final OpenAiStreamClient openAiStreamClient; - @Override public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) { + String toolString = mcpChat(chatRequest); + + Message userMessage = Message.builder().content("宸ュ叿杩斿洖淇℃伅锛�"+toolString).role(Message.Role.ASSISTANT).build(); + List<Message> messages = chatRequest.getMessages(); + messages.add(userMessage); + + SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(emitter); + ChatCompletion completion = ChatCompletion + .builder() + .messages(messages) + .model(chatRequest.getModel()) + .stream(true) + .build(); + openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener); + return emitter; + + } + + public String mcpChat(ChatRequest chatRequest) { WebFluxSseClientTransport webFluxSseClientTransport = new WebFluxSseClientTransport(WebClient.builder().baseUrl("http://localhost:8080")); ChatCompletion completion = ChatCompletion .builder() @@ -44,6 +61,7 @@ .stream(false) .build(); List<Tools> tools = new ArrayList<>(); + McpSchema.Content content = null; try (var client = McpClient.sync(webFluxSseClientTransport).build()) { client.initialize(); McpSchema.ListToolsResult toolsList = client.listTools(); @@ -63,26 +81,17 @@ .build(); tools.add(tool); } - completion.setTools(tools); ChatCompletionResponse chatCompletionResponse = openAiStreamClient.chatCompletion(completion); String arguments = chatCompletionResponse.getChoices().get(0).getMessage().getToolCalls().get(0).getFunction().getArguments(); String name = chatCompletionResponse.getChoices().get(0).getMessage().getToolCalls().get(0).getFunction().getName(); Map<String, Object> map = JSONUtil.toBean(arguments, Map.class); McpSchema.CallToolResult sumResult = client.callTool(new McpSchema.CallToolRequest(name, map)); - System.out.println("add a+ b = " + sumResult.content().get(0)); - - - McpSchema.Content content = sumResult.content().get(0); - - emitter.send(sumResult.content().get(0)); - - } catch (IOException e) { - emitter.completeWithError(e); + content= sumResult.content().get(0); + } catch (Exception e) { + throw new ServiceException("璇锋眰澶辫触"+e); } - emitter.complete(); - return emitter; - + return content.toString(); } } -- Gitblit v1.9.3