From fab6de1f5c52b541a0ce2a8afd005eb05c9dab4e Mon Sep 17 00:00:00 2001 From: winkey <wwwgto@qq.com> Date: 星期一, 07 四月 2025 15:16:50 +0800 Subject: [PATCH] 知识库对话修改 --- ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java | 49 +++++++++++++------------------------------------ 1 files changed, 13 insertions(+), 36 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java b/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java index d51b2f5..1b5b2fa 100644 --- a/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java +++ b/ruoyi-admin/src/main/java/org/ruoyi/controller/KnowledgeController.java @@ -1,16 +1,14 @@ package org.ruoyi.controller; import cn.dev33.satoken.stp.StpUtil; +import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; -import org.ruoyi.common.chat.config.ChatConfig; import org.ruoyi.common.chat.domain.request.ChatRequest; -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.core.domain.R; import org.ruoyi.common.core.validate.AddGroup; import org.ruoyi.common.excel.utils.ExcelUtil; @@ -20,6 +18,7 @@ import org.ruoyi.common.mybatis.core.page.TableDataInfo; import org.ruoyi.common.satoken.utils.LoginHelper; import org.ruoyi.common.web.core.BaseController; +import org.ruoyi.knowledge.chain.vectorstore.VectorStore; import org.ruoyi.knowledge.domain.bo.KnowledgeAttachBo; import org.ruoyi.knowledge.domain.bo.KnowledgeFragmentBo; import org.ruoyi.knowledge.domain.bo.KnowledgeInfoBo; @@ -31,11 +30,9 @@ import org.ruoyi.knowledge.service.IKnowledgeAttachService; import org.ruoyi.knowledge.service.IKnowledgeFragmentService; import org.ruoyi.knowledge.service.IKnowledgeInfoService; -import org.ruoyi.system.listener.SSEEventSourceListener; import org.ruoyi.system.service.ISseService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.ruoyi.knowledge.chain.vectorstore.VectorStore; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.List; @@ -63,47 +60,27 @@ private final EmbeddingService embeddingService; - private OpenAiStreamClient openAiStreamClient; - - private final ChatConfig chatConfig; - private final ISseService sseService; /** * 鐭ヨ瘑搴撳璇� */ @PostMapping("/send") - public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest) { - - openAiStreamClient = chatConfig.getOpenAiStreamClient(); - SseEmitter sseEmitter = new SseEmitter(0L); - SSEEventSourceListener openAIEventSourceListener = new SSEEventSourceListener(sseEmitter); + public SseEmitter send(@RequestBody @Valid ChatRequest chatRequest, HttpServletRequest request) { List<Message> messages = chatRequest.getMessages(); - String content = messages.get(messages.size() - 1).getContent().toString(); + // 鑾峰彇鐭ヨ瘑搴撲俊鎭� + Message message = messages.get(messages.size() - 1); + StringBuilder sb = new StringBuilder(message.getContent().toString()); List<String> nearestList; - List<Double> queryVector = embeddingService.getQueryVector(content, chatRequest.getKid()); - nearestList = vectorStore.nearest(queryVector,chatRequest.getKid()); + List<Double> queryVector = embeddingService.getQueryVector(message.getContent().toString(), chatRequest.getKid()); + nearestList = vectorStore.nearest(queryVector, chatRequest.getKid()); for (String prompt : nearestList) { - Message sysMessage = Message.builder().content(prompt).role(Message.Role.USER).build(); - messages.add(sysMessage); + sb.append("\n####").append(prompt); } - Message userMessage = Message.builder().content(content + (nearestList.size() > 0 ? "\n\n娉ㄦ剰锛氬洖绛旈棶棰樻椂锛岄』涓ユ牸鏍规嵁鎴戠粰浣犵殑绯荤粺涓婁笅鏂囧唴瀹瑰師鏂囪繘琛屽洖绛旓紝璇蜂笉瑕佽嚜宸卞彂鎸�,鍥炵瓟鏃朵繚鎸佸師鏉ユ枃鏈殑娈佃惤灞傜骇" : "") ).role(Message.Role.USER).build(); - messages.add(userMessage); - if (chatRequest.getModel().startsWith("ollama")) { - return sseService.ollamaChat(chatRequest); - } - - ChatCompletion completion = ChatCompletion - .builder() - .messages(messages) - .model(chatRequest.getModel()) - .temperature(chatRequest.getTemperature()) - .topP(chatRequest.getTop_p()) - .stream(true) - .build(); - openAiStreamClient.streamChatCompletion(completion, openAIEventSourceListener); - - return sseEmitter; + sb.append( (nearestList.size() > 0 ? "\n\n娉ㄦ剰锛氬洖绛旈棶棰樻椂锛岄』涓ユ牸鏍规嵁鎴戠粰浣犵殑绯荤粺涓婁笅鏂囧唴瀹瑰師鏂囪繘琛屽洖绛旓紝璇蜂笉瑕佽嚜宸卞彂鎸�,鍥炵瓟鏃朵繚鎸佸師鏉ユ枃鏈殑娈佃惤灞傜骇" : "")); + message.setRole(Message.Role.USER.getName()); + message.setContent(sb.toString()); + return sseService.sseChat(chatRequest, request); } /** -- Gitblit v1.9.3