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