From 9b32e3b3b226723cd43bfa37026e1e4487f6ef69 Mon Sep 17 00:00:00 2001 From: ageer <ageerle@163.com> Date: 星期六, 12 四月 2025 10:08:51 +0800 Subject: [PATCH] feat: mcp支持 --- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java | 64 ++++++++++++++++++++++++++++++++ 1 files changed, 64 insertions(+), 0 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 b9d2012..ebf37e1 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 @@ -5,14 +5,29 @@ import org.ruoyi.chat.listener.SSEEventSourceListener; import org.ruoyi.chat.service.chat.IChatService; import org.ruoyi.common.chat.entity.chat.ChatCompletion; +import org.ruoyi.common.chat.entity.chat.Message; import org.ruoyi.common.chat.openai.OpenAiStreamClient; import org.ruoyi.common.chat.request.ChatRequest; import org.ruoyi.domain.vo.ChatModelVo; import org.ruoyi.service.IChatModelService; +import org.springframework.ai.chat.client.ChatClient; +import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor; +import org.springframework.ai.chat.memory.ChatMemory; +import org.springframework.ai.chat.memory.InMemoryChatMemory; +import org.springframework.ai.chat.messages.UserMessage; +import org.springframework.ai.openai.OpenAiChatOptions; +import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; +import java.io.IOException; +import java.util.List; + +/** + * @author ageer + */ @Service @Slf4j public class OpenAIServiceImpl implements IChatService { @@ -23,6 +38,13 @@ private ChatConfig chatConfig; @Autowired private OpenAiStreamClient openAiStreamClient; + @Autowired + private ChatClient chatClient; + + @Autowired + private ToolCallbackProvider tools; + + private final ChatMemory chatMemory = new InMemoryChatMemory(); @Override public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) { @@ -47,4 +69,46 @@ return emitter; } + + @Override + public SseEmitter mcpChat(ChatRequest chatRequest, SseEmitter emitter) { + List<Message> msgList = chatRequest.getMessages(); + // 娣诲姞璁板繂 + for (int i = 0; i < msgList.size(); i++) { + org.springframework.ai.chat.messages.Message springAiMessage = new UserMessage(msgList.get(i).getContent().toString()); + chatMemory.add(String.valueOf(i),springAiMessage); + } + var messageChatMemoryAdvisor = new MessageChatMemoryAdvisor(chatMemory, chatRequest.getUserId(), 10); + this.chatClient.prompt(chatRequest.getPrompt()) + .advisors(messageChatMemoryAdvisor) + .tools(tools) + .options(OpenAiChatOptions.builder().model(chatRequest.getModel()).build()) + .stream() + .chatResponse() + .subscribe( + chatResponse -> { + try { + emitter.send(chatResponse, MediaType.APPLICATION_JSON); + } catch (IOException e) { + e.printStackTrace(); + } + }, + error -> { + try { + emitter.completeWithError(error); + } catch (Exception e) { + e.printStackTrace(); + } + }, + () -> { + try { + emitter.complete(); + } catch (Exception e) { + e.printStackTrace(); + } + } + ); + + return emitter; + } } -- Gitblit v1.9.3