From 57b2f833f8c4cc8d6ad7dc80778c970744964f2c Mon Sep 17 00:00:00 2001 From: ageer <ageerle@163.com> Date: 星期四, 08 五月 2025 23:56:40 +0800 Subject: [PATCH] feat: 修复向量库初始化失败导致程序启动失败 --- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java | 37 +++++++++++++++++++++---------------- 1 files changed, 21 insertions(+), 16 deletions(-) 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 301095f..294342a 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 @@ -14,7 +14,6 @@ import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore; import dev.langchain4j.store.embedding.qdrant.QdrantEmbeddingStore; import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore; -import jakarta.annotation.PostConstruct; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.ruoyi.common.core.service.ConfigService; @@ -29,8 +28,6 @@ import java.util.List; import java.util.Map; - - /** * 鍚戦噺搴撶鐞� * @author ageer @@ -40,18 +37,19 @@ @RequiredArgsConstructor public class VectorStoreServiceImpl implements VectorStoreService { - private EmbeddingStore<TextSegment> embeddingStore; - private final ConfigService configService; + + Map<String,EmbeddingStore<TextSegment>> storeMap; @Override public void createSchema(String kid,String modelName) { + EmbeddingStore<TextSegment> embeddingStore = WeaviateEmbeddingStore.builder().build(); switch (modelName) { case "weaviate" -> { String protocol = configService.getConfigValue("weaviate", "protocol"); String host = configService.getConfigValue("weaviate", "host"); String className = configService.getConfigValue("weaviate", "classname"); - this.embeddingStore = WeaviateEmbeddingStore.builder() + embeddingStore = WeaviateEmbeddingStore.builder() .scheme(protocol) .host(host) .objectClass(className + kid) @@ -64,7 +62,7 @@ String uri = configService.getConfigValue("milvus", "host"); String collection = configService.getConfigValue("milvus", "collection"); String dimension = configService.getConfigValue("milvus", "dimension"); - this.embeddingStore = MilvusEmbeddingStore.builder() + embeddingStore = MilvusEmbeddingStore.builder() .uri(uri) .collectionName(collection + kid) .dimension(Integer.parseInt(dimension)) @@ -74,17 +72,19 @@ String host = configService.getConfigValue("qdrant", "host"); String port = configService.getConfigValue("qdrant", "port"); String collectionName = configService.getConfigValue("qdrant", "collectionName"); - this.embeddingStore = QdrantEmbeddingStore.builder() + embeddingStore = QdrantEmbeddingStore.builder() .host(host) .port(Integer.parseInt(port)) .collectionName(collectionName) .build(); } } + storeMap.put(kid,embeddingStore); } @Override public void storeEmbeddings(StoreEmbeddingBo storeEmbeddingBo) { + EmbeddingStore<TextSegment> store = storeMap.get(storeEmbeddingBo.getKid()); EmbeddingModel embeddingModel = getEmbeddingModel(storeEmbeddingBo.getModelName(), storeEmbeddingBo.getApiKey(), storeEmbeddingBo.getBaseUrl()); for (int i = 0; i < storeEmbeddingBo.getChunkList().size(); i++) { @@ -96,12 +96,15 @@ Embedding embedding = response.content(); TextSegment segment = TextSegment.from(storeEmbeddingBo.getChunkList().get(i)); segment.metadata().putAll(dataSchema); - embeddingStore.add(embedding,segment); + + store.add(embedding,segment); } } @Override public List<String> getQueryVector(QueryVectorBo queryVectorBo) { + EmbeddingStore<TextSegment> store = storeMap.get(queryVectorBo.getKid()); + EmbeddingModel embeddingModel = getEmbeddingModel(queryVectorBo.getModelName(), queryVectorBo.getApiKey(), queryVectorBo.getBaseUrl()); Filter simpleFilter = new IsEqualTo("kid", queryVectorBo.getKid()); @@ -112,38 +115,40 @@ // 娣诲姞杩囨护鏉′欢 .filter(simpleFilter) .build(); - List<EmbeddingMatch<TextSegment>> matches = embeddingStore.search(embeddingSearchRequest).matches(); + List<EmbeddingMatch<TextSegment>> matches = store.search(embeddingSearchRequest).matches(); List<String> results = new ArrayList<>(); - matches.forEach(embeddingMatch -> { - results.add(embeddingMatch.embedded().text()); - }); + matches.forEach(embeddingMatch -> results.add(embeddingMatch.embedded().text())); return results; } @Override public void removeByKid(String kid) { + EmbeddingStore<TextSegment> store = storeMap.get(kid); + // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilter = new IsEqualTo("kid", kid); - embeddingStore.removeAll(simpleFilter); + store.removeAll(simpleFilter); } @Override public void removeByDocId(String kid, String docId) { + EmbeddingStore<TextSegment> store = storeMap.get(kid); // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilterByDocId = new IsEqualTo("docId", docId); - embeddingStore.removeAll(simpleFilterByDocId); + store.removeAll(simpleFilterByDocId); } @Override public void removeByKidAndFid(String kid, String fid) { + EmbeddingStore<TextSegment> store = storeMap.get(kid); // 鏍规嵁鏉′欢鍒犻櫎鍚戦噺鏁版嵁 Filter simpleFilterByKid = new IsEqualTo("kid", kid); Filter simpleFilterFid = new IsEqualTo("fid", fid); Filter simpleFilterByAnd = Filter.and(simpleFilterFid, simpleFilterByKid); - embeddingStore.removeAll(simpleFilterByAnd); + store.removeAll(simpleFilterByAnd); } /** -- Gitblit v1.9.3