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-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java | 9 + ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java | 10 +- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java | 13 +- ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java | 78 +++++++++++------- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java | 9 + ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java | 14 ++- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java | 16 ++- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java | 14 ++- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java | 69 +++++++++-------- 9 files changed, 139 insertions(+), 93 deletions(-) diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java index 230a1d6..34b1c2d 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/KnowledgeInfo.java @@ -1,5 +1,6 @@ package org.ruoyi.domain; +import com.alibaba.excel.annotation.ExcelProperty; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; @@ -78,14 +79,19 @@ private Long textBlockSize; /** - * 鍚戦噺搴� + * 鍚戦噺搴撴ā鍨嬪悕绉� */ - private String vector; + private String vectorModelName; /** - * 鍚戦噺妯″瀷 + * 鍚戦噺鍖栨ā鍨嬪悕绉� */ - private String vectorModel; + private String embeddingModelName; + + /** + * 绯荤粺鎻愮ず璇� + */ + private String systemPrompt; /** * 澶囨敞 diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java index 00a22b7..9a510a6 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/KnowledgeInfoBo.java @@ -83,16 +83,22 @@ private Long textBlockSize; /** - * 鍚戦噺搴� + * 鍚戦噺搴撴ā鍨嬪悕绉� */ @NotBlank(message = "鍚戦噺搴撲笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class }) - private String vector; + private String vectorModelName; /** - * 鍚戦噺妯″瀷 + * 鍚戦噺鍖栨ā鍨嬪悕绉� */ @NotBlank(message = "鍚戦噺妯″瀷涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class }) - private String vectorModel; + private String embeddingModelName; + + + /** + * 绯荤粺鎻愮ず璇� + */ + private String systemPrompt; /** * 澶囨敞 diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java index 33e8204..ff3a26e 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/QueryVectorBo.java @@ -26,9 +26,14 @@ private Integer maxResults; /** - * 妯″瀷鍚嶇О + * 鍚戦噺搴撴ā鍨嬪悕绉� */ - private String modelName; + private String vectorModelName; + + /** + * 鍚戦噺鍖栨ā鍨嬪悕绉� + */ + private String embeddingModelName; /** * 璇锋眰key diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java index 9510403..e4d8c38 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/bo/StoreEmbeddingBo.java @@ -32,9 +32,14 @@ private List<String> fids; /** - * 妯″瀷鍚嶇О + * 鍚戦噺搴撴ā鍨嬪悕绉� */ - private String modelName; + private String vectorModelName; + + /** + * 鍚戦噺鍖栨ā鍨嬪悕绉� + */ + private String embeddingModelName; /** * 璇锋眰key diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java index 6a5fdbf..ed4f6aa 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/domain/vo/KnowledgeInfoVo.java @@ -98,16 +98,20 @@ private Integer textBlockSize; /** - * 鍚戦噺搴� + * 鍚戦噺搴撴ā鍨嬪悕绉� */ - @ExcelProperty(value = "鍚戦噺搴�") - private String vector; + private String vectorModelName; /** - * 鍚戦噺妯″瀷 + * 鍚戦噺鍖栨ā鍨嬪悕绉� */ - @ExcelProperty(value = "鍚戦噺妯″瀷") - private String vectorModel; + private String embeddingModelName; + + + /** + * 绯荤粺鎻愮ず璇� + */ + private String systemPrompt; /** * 澶囨敞 diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java index e27c94c..be445b9 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java @@ -13,14 +13,14 @@ void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo); - void removeByDocId(String kid,String docId); - - void removeByKid(String kid); - List<String> getQueryVector(QueryVectorBo queryVectorBo); void createSchema(String kid,String modelName); - void removeByKidAndFid(String kid, String fid); + void removeByKid(String kid,String modelName); + + void removeByDocId(String kid,String docId,String modelName); + + void removeByKidAndFid(String kid, String fid,String modelName); } diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java index d74176a..b5f7962 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java @@ -1,5 +1,7 @@ package org.ruoyi.service.impl; +import cn.hutool.core.util.RandomUtil; +import com.google.protobuf.ServiceException; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.EmbeddingModel; @@ -16,6 +18,7 @@ import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore; import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.service.ConfigService; import org.ruoyi.domain.bo.QueryVectorBo; @@ -40,11 +43,10 @@ private final ConfigService configService; - Map<String,EmbeddingStore<TextSegment>> storeMap = new HashMap<>(); + private EmbeddingStore<TextSegment> embeddingStore; @Override public void createSchema(String kid,String modelName) { - EmbeddingStore<TextSegment> embeddingStore; switch (modelName) { case "weaviate" -> { String protocol = configService.getConfigValue("weaviate", "protocol"); @@ -84,88 +86,83 @@ embeddingStore = new InMemoryEmbeddingStore<>(); } } - storeMap.put(kid,embeddingStore); } @Override public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo) { - EmbeddingStore<TextSegment> store = storeMap.get(storeEmbeddingBo.getKid()); - EmbeddingModel embeddingModel = getEmbeddingModel(storeEmbeddingBo.getModelName(), + createSchema(storeEmbeddingBo.getKid(),storeEmbeddingBo.getVectorModelName()); + EmbeddingModel embeddingModel = getEmbeddingModel(storeEmbeddingBo.getEmbeddingModelName(), storeEmbeddingBo.getApiKey(), storeEmbeddingBo.getBaseUrl()); - for (int i = 0; i < storeEmbeddingBo.getChunkList().size(); i++) { + List<String> chunkList = storeEmbeddingBo.getChunkList(); + for (int i = 0; i < chunkList.size(); i++) { Map<String, Object> dataSchema = new HashMap<>(); dataSchema.put("kid", storeEmbeddingBo.getKid()); dataSchema.put("docId", storeEmbeddingBo.getKid()); dataSchema.put("fid", storeEmbeddingBo.getFids().get(i)); - Response<Embedding> response = embeddingModel.embed(storeEmbeddingBo.getChunkList().get(i)); - Embedding embedding = response.content(); - TextSegment segment = TextSegment.from(storeEmbeddingBo.getChunkList().get(i)); + Embedding embedding = embeddingModel.embed(chunkList.get(i)).content(); + TextSegment segment = TextSegment.from(chunkList.get(i)); segment.metadata().putAll(dataSchema); - - store.add(embedding,segment); + embeddingStore.add(embedding,segment); } } @Override public List<String> getQueryVector(QueryVectorBo queryVectorBo) { - EmbeddingStore<TextSegment> store = storeMap.get(queryVectorBo.getKid()); - - EmbeddingModel embeddingModel = getEmbeddingModel(queryVectorBo.getModelName(), + createSchema(queryVectorBo.getKid(),queryVectorBo.getVectorModelName()); + EmbeddingModel embeddingModel = getEmbeddingModel(queryVectorBo.getEmbeddingModelName(), queryVectorBo.getApiKey(), queryVectorBo.getBaseUrl()); - Filter simpleFilter = new IsEqualTo("kid", queryVectorBo.getKid()); + // Filter simpleFilter = new IsEqualTo("kid", queryVectorBo.getKid()); Embedding queryEmbedding = embeddingModel.embed(queryVectorBo.getQuery()).content(); EmbeddingSearchRequest embeddingSearchRequest = EmbeddingSearchRequest.builder() .queryEmbedding(queryEmbedding) .maxResults(queryVectorBo.getMaxResults()) // 娣诲姞杩囨护鏉′欢 - .filter(simpleFilter) + // .filter(simpleFilter) .build(); - List<EmbeddingMatch<TextSegment>> matches = store.search(embeddingSearchRequest).matches(); - + List<EmbeddingMatch<TextSegment>> matches = embeddingStore.search(embeddingSearchRequest).matches(); List<String> results = new ArrayList<>(); - matches.forEach(embeddingMatch -> results.add(embeddingMatch.embedded().text())); return results; } @Override - public void removeByKid(String kid) { - EmbeddingStore<TextSegment> store = storeMap.get(kid); - + public void removeByKid(String kid,String modelName) { + createSchema(kid,modelName); // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilter = new IsEqualTo("kid", kid); - store.removeAll(simpleFilter); + embeddingStore.removeAll(simpleFilter); } @Override - public void removeByDocId(String kid, String docId) { - EmbeddingStore<TextSegment> store = storeMap.get(kid); + public void removeByDocId(String kid, String docId,String modelName) { + createSchema(kid,modelName); // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilterByDocId = new IsEqualTo("docId", docId); - store.removeAll(simpleFilterByDocId); + embeddingStore.removeAll(simpleFilterByDocId); } @Override - public void removeByKidAndFid(String kid, String fid) { - EmbeddingStore<TextSegment> store = storeMap.get(kid); + public void removeByKidAndFid(String kid, String fid,String modelName) { + createSchema(kid,modelName); // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilterByKid = new IsEqualTo("kid", kid); Filter simpleFilterFid = new IsEqualTo("fid", fid); Filter simpleFilterByAnd = Filter.and(simpleFilterFid, simpleFilterByKid); - store.removeAll(simpleFilterByAnd); + embeddingStore.removeAll(simpleFilterByAnd); } /** * 鑾峰彇鍚戦噺妯″瀷 */ - public EmbeddingModel getEmbeddingModel(String modelName,String apiKey,String baseUrl) { - EmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder().build(); + @SneakyThrows + public EmbeddingModel getEmbeddingModel(String modelName, String apiKey, String baseUrl) { + EmbeddingModel embeddingModel; if(TEXT_EMBEDDING_3_SMALL.toString().equals(modelName)) { embeddingModel = OpenAiEmbeddingModel.builder() .apiKey(apiKey) .baseUrl(baseUrl) - .modelName(TEXT_EMBEDDING_3_SMALL) + .modelName(modelName) .build(); // TODO 娣诲姞鏋氫妇 }else if("quentinz/bge-large-zh-v1.5".equals(modelName)) { @@ -173,6 +170,14 @@ .baseUrl(baseUrl) .modelName(modelName) .build(); + }else if("baai/bge-m3".equals(modelName)) { + embeddingModel = OpenAiEmbeddingModel.builder() + .apiKey(apiKey) + .baseUrl(baseUrl) + .modelName(modelName) + .build(); + }else { + throw new ServiceException("鏈壘鍒板搴斿悜閲忓寲妯″瀷!"); } return embeddingModel; } 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; // 鑾峰彇鐢ㄦ埛瀵硅瘽淇℃伅 diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java index 00153c3..d94d320 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java @@ -102,8 +102,6 @@ lqw.eq(bo.getOverlapChar() != null, KnowledgeInfo::getOverlapChar, bo.getOverlapChar()); lqw.eq(bo.getRetrieveLimit() != null, KnowledgeInfo::getRetrieveLimit, bo.getRetrieveLimit()); lqw.eq(bo.getTextBlockSize() != null, KnowledgeInfo::getTextBlockSize, bo.getTextBlockSize()); - lqw.eq(StringUtils.isNotBlank(bo.getVector()), KnowledgeInfo::getVector, bo.getVector()); - lqw.eq(StringUtils.isNotBlank(bo.getVectorModel()), KnowledgeInfo::getVectorModel, bo.getVectorModel()); return lqw; } @@ -161,7 +159,7 @@ } baseMapper.insert(knowledgeInfo); if (knowledgeInfo != null) { - vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId()),bo.getVector()); + vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId()),bo.getVectorModelName()); } }else { baseMapper.updateById(knowledgeInfo); @@ -177,7 +175,7 @@ check(knowledgeInfoList); // 鍒犻櫎鍚戦噺搴撲俊鎭� knowledgeInfoList.forEach(knowledgeInfoVo -> { - vectorStoreService.removeByKid(String.valueOf(knowledgeInfoVo.getId())); + vectorStoreService.removeByKid(String.valueOf(knowledgeInfoVo.getId()),knowledgeInfoVo.getVectorModelName()); }); // 鍒犻櫎闄勪欢鍜岀煡璇嗙墖娈� fragmentMapper.deleteByMap(map); @@ -231,17 +229,18 @@ // 閫氳繃kid鏌ヨ鐭ヨ瘑搴撲俊鎭� KnowledgeInfoVo knowledgeInfoVo = baseMapper.selectVoOne(Wrappers.<KnowledgeInfo>lambdaQuery() - .eq(KnowledgeInfo::getKid, kid)); + .eq(KnowledgeInfo::getId, kid)); // 閫氳繃鍚戦噺妯″瀷鏌ヨ妯″瀷淇℃伅 - ChatModelVo chatModelVo = chatModelService.selectModelByName(knowledgeInfoVo.getVectorModel()); + ChatModelVo chatModelVo = chatModelService.selectModelByName(knowledgeInfoVo.getEmbeddingModelName()); StoreEmbeddingBo storeEmbeddingBo = new StoreEmbeddingBo(); storeEmbeddingBo.setKid(kid); storeEmbeddingBo.setDocId(docId); storeEmbeddingBo.setFids(fids); storeEmbeddingBo.setChunkList(chunkList); - storeEmbeddingBo.setModelName(knowledgeInfoVo.getVectorModel()); + storeEmbeddingBo.setVectorModelName(knowledgeInfoVo.getVectorModelName()); + storeEmbeddingBo.setEmbeddingModelName(knowledgeInfoVo.getEmbeddingModelName()); storeEmbeddingBo.setApiKey(chatModelVo.getApiKey()); storeEmbeddingBo.setBaseUrl(chatModelVo.getApiHost()); vectorStoreService.storeEmbeddings(storeEmbeddingBo); -- Gitblit v1.9.3