From 7d3282c3479697cd91d2c824d06a10c45e593834 Mon Sep 17 00:00:00 2001
From: ageerle <ageerle@163.com>
Date: 星期三, 14 五月 2025 13:53:49 +0800
Subject: [PATCH] feat: 修复知识库上传失败

---
 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java |   78 +++++++++++++++++++++++---------------
 1 files changed, 47 insertions(+), 31 deletions(-)

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 cc5f289..1387230 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
@@ -2,6 +2,7 @@
 
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.protobuf.ServiceException;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
@@ -29,6 +30,8 @@
 import org.ruoyi.domain.bo.ChatSessionBo;
 import org.ruoyi.domain.bo.QueryVectorBo;
 import org.ruoyi.domain.vo.ChatModelVo;
+import org.ruoyi.domain.vo.KnowledgeInfoVo;
+import org.ruoyi.service.IKnowledgeInfoService;
 import org.ruoyi.service.VectorStoreService;
 import org.ruoyi.service.IChatModelService;
 import org.ruoyi.service.IChatSessionService;
@@ -66,6 +69,8 @@
     private final ChatServiceFactory chatServiceFactory;
 
     private final IChatSessionService chatSessionService;
+
+    private final IKnowledgeInfoService knowledgeInfoService;
 
     private ChatModelVo chatModelVo;
 
@@ -148,50 +153,61 @@
             }
     }
 
-
     /**
      *  鏋勫缓娑堟伅鍒楄〃
      */
     private void buildChatMessageList(ChatRequest chatRequest){
-         chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
+        String sysPrompt;
+        chatModelVo = chatModelService.selectModelByName(chatRequest.getModel());
         // 鑾峰彇瀵硅瘽娑堟伅鍒楄〃
         List<Message> messages = chatRequest.getMessages();
-        String sysPrompt = chatModelVo.getSystemPrompt();
+        // 鏌ヨ鍚戦噺搴撶浉鍏充俊鎭姞鍏ュ埌涓婁笅鏂�
+        if(StringUtils.isNotEmpty(chatRequest.getKid())){
+            List<Message> knMessages = new ArrayList<>();
+            String content = messages.get(messages.size() - 1).getContent().toString();
+            // 閫氳繃kid鏌ヨ鐭ヨ瘑搴撲俊鎭�
+            KnowledgeInfoVo knowledgeInfoVo = knowledgeInfoService.queryById(Long.valueOf(chatRequest.getKid()));
+            // 鏌ヨ鍚戦噺妯″瀷閰嶇疆淇℃伅
+            ChatModelVo chatModel = chatModelService.selectModelByName(knowledgeInfoVo.getEmbeddingModelName());
 
-
-        if(StringUtils.isEmpty(sysPrompt)){
-            // TODO 绯荤粺榛樿鎻愮ず璇�,鍚庣画浼氬鍔犳彁绀鸿瘝绠$悊
-            sysPrompt ="浣犳槸涓�涓敱RuoYI-AI寮�鍙戠殑浜哄伐鏅鸿兘鍔╂墜锛屽悕瀛楀彨鐔婄尗鍔╂墜銆備綘鎿呴暱涓嫳鏂囧璇濓紝鑳藉鐞嗚В骞跺鐞嗗悇绉嶉棶棰橈紝鎻愪緵瀹夊叏銆佹湁甯姪銆佸噯纭殑鍥炵瓟銆�" +
-                    "褰撳墠鏃堕棿锛�"+ DateUtils.getDate()+
-                    "#娉ㄦ剰锛氬洖澶嶄箣鍓嶆敞鎰忕粨鍚堜笂涓嬫枃鍜屽伐鍏疯繑鍥炲唴瀹硅繘琛屽洖澶嶃��";
+            QueryVectorBo queryVectorBo = new QueryVectorBo();
+            queryVectorBo.setQuery(content);
+            queryVectorBo.setKid(chatRequest.getKid());
+            queryVectorBo.setApiKey(chatModel.getApiKey());
+            queryVectorBo.setBaseUrl(chatModel.getApiHost());
+            queryVectorBo.setVectorModelName(knowledgeInfoVo.getVectorModelName());
+            queryVectorBo.setEmbeddingModelName(knowledgeInfoVo.getEmbeddingModelName());
+            queryVectorBo.setMaxResults(knowledgeInfoVo.getRetrieveLimit());
+            List<String> nearestList = vectorStoreService.getQueryVector(queryVectorBo);
+            for (String prompt : nearestList) {
+                Message userMessage = Message.builder().content(prompt).role(Message.Role.USER).build();
+                knMessages.add(userMessage);
+            }
+            messages.addAll(knMessages);
+            // 璁剧疆鐭ヨ瘑搴撶郴缁熸彁绀鸿瘝
+            sysPrompt = knowledgeInfoVo.getSystemPrompt();
+            if(StringUtils.isEmpty(sysPrompt)){
+                sysPrompt ="###瑙掕壊璁惧畾\n" +
+                        "浣犳槸涓�涓櫤鑳界煡璇嗗姪鎵嬶紝涓撴敞浜庡埄鐢ㄤ笂涓嬫枃涓殑淇℃伅鏉ユ彁渚涘噯纭拰鐩稿叧鐨勫洖绛斻�俓n" +
+                        "###鎸囦护\n" +
+                        "褰撶敤鎴风殑闂涓庝笂涓嬫枃鐭ヨ瘑鍖归厤鏃讹紝鍒╃敤涓婁笅鏂囦俊鎭繘琛屽洖绛斻�傚鏋滈棶棰樹笌涓婁笅鏂囦笉鍖归厤锛岃繍鐢ㄨ嚜韬殑鎺ㄧ悊鑳藉姏鐢熸垚鍚堥�傜殑鍥炵瓟銆俓n" +
+                        "###闄愬埗\n" +
+                        "纭繚鍥炵瓟娓呮櫚绠�娲侊紝閬垮厤鎻愪緵涓嶅繀瑕佺殑缁嗚妭銆傚缁堜繚鎸佽姘斿弸濂�" +
+                        "褰撳墠鏃堕棿锛�"+ DateUtils.getDate();
+            }
+        }else {
+            sysPrompt = chatModelVo.getSystemPrompt();
+            if(StringUtils.isEmpty(sysPrompt)){
+                sysPrompt ="浣犳槸涓�涓敱RuoYI-AI寮�鍙戠殑浜哄伐鏅鸿兘鍔╂墜锛屽悕瀛楀彨鐔婄尗鍔╂墜銆備綘鎿呴暱涓嫳鏂囧璇濓紝鑳藉鐞嗚В骞跺鐞嗗悇绉嶉棶棰橈紝鎻愪緵瀹夊叏銆佹湁甯姪銆佸噯纭殑鍥炵瓟銆�" +
+                        "褰撳墠鏃堕棿锛�"+ DateUtils.getDate()+
+                        "#娉ㄦ剰锛氬洖澶嶄箣鍓嶆敞鎰忕粨鍚堜笂涓嬫枃鍜屽伐鍏疯繑鍥炲唴瀹硅繘琛屽洖澶嶃��";
+            }
         }
         // 璁剧疆绯荤粺榛樿鎻愮ず璇�
         Message sysMessage = Message.builder().content(sysPrompt).role(Message.Role.SYSTEM).build();
         messages.add(0,sysMessage);
 
         chatRequest.setSysPrompt(sysPrompt);
-        // 鏌ヨ鍚戦噺搴撶浉鍏充俊鎭姞鍏ュ埌涓婁笅鏂�
-        if(StringUtils.isNotEmpty(chatRequest.getKid())){
-            List<Message> knMessages = new ArrayList<>();
-            String content = messages.get(messages.size() - 1).getContent().toString();
-            QueryVectorBo queryVectorBo = new QueryVectorBo();
-            queryVectorBo.setQuery(content);
-            queryVectorBo.setKid(chatRequest.getKid());
-            queryVectorBo.setApiKey(chatModelVo.getApiKey());
-            queryVectorBo.setBaseUrl(chatModelVo.getApiHost());
-            queryVectorBo.setModelName(chatModelVo.getModelName());
-            // TODO 鏌ヨ鍚戦噺杩斿洖鏉℃暟,杩欓噷搴旇鏌ヨ鐭ヨ瘑搴撻厤缃�
-            queryVectorBo.setMaxResults(3);
-            List<String> nearestList = vectorStoreService.getQueryVector(queryVectorBo);
-            for (String prompt : nearestList) {
-                Message userMessage = Message.builder().content(prompt).role(Message.Role.USER).build();
-                knMessages.add(userMessage);
-            }
-            // TODO 鎻愮ず璇�,杩欓噷搴旇鏌ヨ鐭ヨ瘑搴撻厤缃�
-            Message userMessage = Message.builder().content(content + (!nearestList.isEmpty() ? "\n\n娉ㄦ剰锛氬洖绛旈棶棰樻椂锛岄』涓ユ牸鏍规嵁鎴戠粰浣犵殑绯荤粺涓婁笅鏂囧唴瀹瑰師鏂囪繘琛屽洖绛旓紝璇蜂笉瑕佽嚜宸卞彂鎸�,鍥炵瓟鏃朵繚鎸佸師鏉ユ枃鏈殑娈佃惤灞傜骇" : "")).role(Message.Role.USER).build();
-            knMessages.add(userMessage);
-            messages.addAll(knMessages);
-        }
         // 鐢ㄦ埛瀵硅瘽鍐呭
         String chatString = null;
         // 鑾峰彇鐢ㄦ埛瀵硅瘽淇℃伅

--
Gitblit v1.9.3