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);
}