diff --git a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml index 8d7d3963..f6412e1b 100644 --- a/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml +++ b/ruoyi-modules-api/ruoyi-knowledge-api/pom.xml @@ -47,20 +47,6 @@ 1.0.79 - - - - - - - - - - - - - - dev.langchain4j langchain4j @@ -94,6 +80,29 @@ langchain4j-ollama + + dev.langchain4j + langchain4j-milvus + + + + org.testcontainers + milvus + 1.19.6 + + + + + dev.langchain4j + langchain4j-qdrant + + + + org.testcontainers + qdrant + 1.19.6 + + 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 277d0b11..e27c94cc 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 @@ public interface VectorStoreService { List 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 680a1bb6..584b273a 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.EmbeddingSearchRequest; 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 @@ import java.util.Map; /** - * Weaviate向量库管理 + * 向量库管理 * @author ageer */ @Service @Slf4j @RequiredArgsConstructor -public class WeaviateVectorStoreImpl implements VectorStoreService { +public class VectorStoreServiceImpl implements VectorStoreService { private EmbeddingStore embeddingStore; @@ -44,18 +46,38 @@ public class WeaviateVectorStoreImpl implements VectorStoreService { @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 6cf62517..00153c39 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 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService { 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); }