From 980df20752f031460301cc1697a22757239a1ac9 Mon Sep 17 00:00:00 2001 From: ageerle <ageerle@163.com> Date: 星期四, 08 五月 2025 16:09:02 +0800 Subject: [PATCH] feat: 支持milvus、qdrant向量库 --- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/VectorStoreService.java | 2 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/knowledge/KnowledgeInfoServiceImpl.java | 4 + ruoyi-modules-api/ruoyi-knowledge-api/pom.xml | 37 +++++++++++------- ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java | 50 ++++++++++++++++++------- 4 files changed, 63 insertions(+), 30 deletions(-) diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml index 8d7d396..f6412e1 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml +++ b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml @@ -47,20 +47,6 @@ <version>1.0.79</version> </dependency> - <!-- milvus java sdk --> -<!-- <dependency>--> -<!-- <groupId>io.milvus</groupId>--> -<!-- <artifactId>milvus-sdk-java</artifactId>--> -<!-- <version>2.3.2</version>--> -<!-- </dependency>--> - -<!-- <dependency>--> -<!-- <groupId>io.weaviate</groupId>--> -<!-- <artifactId>client</artifactId>--> -<!-- <version>4.0.0</version>--> -<!-- </dependency>--> - - <dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j</artifactId> @@ -94,6 +80,29 @@ <artifactId>langchain4j-ollama</artifactId> </dependency> + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-milvus</artifactId> + </dependency> + + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>milvus</artifactId> + <version>1.19.6</version> + </dependency> + + + <dependency> + <groupId>dev.langchain4j</groupId> + <artifactId>langchain4j-qdrant</artifactId> + </dependency> + + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>qdrant</artifactId> + <version>1.19.6</version> + </dependency> + </dependencies> </project> 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 277d0b1..e27c94c 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 @@ -19,7 +19,7 @@ List<String> getQueryVector(QueryVectorBo queryVectorBo); - void createSchema(String kid); + void createSchema(String kid,String modelName); void removeByKidAndFid(String kid, String fid); diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/WeaviateVectorStoreImpl.java b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java similarity index 71% rename from ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/WeaviateVectorStoreImpl.java rename to ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java index 680a1bb..584b273 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/WeaviateVectorStoreImpl.java +++ b/ruoyi-modules-api/ruoyi-knowledge-api/src/main/java/org/ruoyi/service/impl/VectorStoreServiceImpl.java @@ -11,6 +11,8 @@ import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.filter.Filter; import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo; +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; @@ -30,13 +32,13 @@ /** - * Weaviate鍚戦噺搴撶鐞� + * 鍚戦噺搴撶鐞� * @author ageer */ @Service @Slf4j @RequiredArgsConstructor -public class WeaviateVectorStoreImpl implements VectorStoreService { +public class VectorStoreServiceImpl implements VectorStoreService { private EmbeddingStore<TextSegment> embeddingStore; @@ -44,18 +46,38 @@ @Override @PostConstruct - public void createSchema(String kid) { - String protocol = configService.getConfigValue("weaviate", "protocol"); - String host = configService.getConfigValue("weaviate", "host"); - String className = configService.getConfigValue("weaviate", "classname"); - this.embeddingStore = WeaviateEmbeddingStore.builder() - .scheme(protocol) - .host(host) - .objectClass(className+kid) - .scheme(protocol) - .avoidDups(true) - .consistencyLevel("ALL") - .build(); + public void createSchema(String kid,String modelName) { + if(modelName.equals("weaviate")){ + String protocol = configService.getConfigValue("weaviate", "protocol"); + String host = configService.getConfigValue("weaviate", "host"); + String className = configService.getConfigValue("weaviate", "classname"); + this.embeddingStore = WeaviateEmbeddingStore.builder() + .scheme(protocol) + .host(host) + .objectClass(className+kid) + .scheme(protocol) + .avoidDups(true) + .consistencyLevel("ALL") + .build(); + }else if(modelName.equals("milvus")){ + String uri = configService.getConfigValue("milvus", "host"); + String collection = configService.getConfigValue("milvus", "collection"); + String dimension = configService.getConfigValue("milvus", "dimension"); + this.embeddingStore = MilvusEmbeddingStore.builder() + .uri(uri) + .collectionName(collection+kid) + .dimension(Integer.parseInt(dimension)) + .build(); + }else if(modelName.equals("qdrant")){ + String host = configService.getConfigValue("qdrant", "host"); + String port = configService.getConfigValue("qdrant", "port"); + String collectionName = configService.getConfigValue("qdrant", "collectionName"); + this.embeddingStore = QdrantEmbeddingStore.builder() + .host(host) + .port(Integer.parseInt(port)) + .collectionName(collectionName) + .build(); + } } @Override 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 6cf6251..00153c3 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 @@ -160,7 +160,9 @@ knowledgeInfo.setUid(LoginHelper.getLoginUser().getUserId()); } baseMapper.insert(knowledgeInfo); - vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId())); + if (knowledgeInfo != null) { + vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId()),bo.getVector()); + } }else { baseMapper.updateById(knowledgeInfo); } -- Gitblit v1.9.3