feat: 支持milvus、qdrant向量库

This commit is contained in:
ageerle
2025-05-08 16:09:02 +08:00
parent aa92d232bb
commit 980df20752
4 changed files with 63 additions and 30 deletions

View File

@@ -47,20 +47,6 @@
<version>1.0.79</version> <version>1.0.79</version>
</dependency> </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> <dependency>
<groupId>dev.langchain4j</groupId> <groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId> <artifactId>langchain4j</artifactId>
@@ -94,6 +80,29 @@
<artifactId>langchain4j-ollama</artifactId> <artifactId>langchain4j-ollama</artifactId>
</dependency> </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> </dependencies>
</project> </project>

View File

@@ -19,7 +19,7 @@ public interface VectorStoreService {
List<String> getQueryVector(QueryVectorBo queryVectorBo); List<String> getQueryVector(QueryVectorBo queryVectorBo);
void createSchema(String kid); void createSchema(String kid,String modelName);
void removeByKidAndFid(String kid, String fid); void removeByKidAndFid(String kid, String fid);

View File

@@ -11,6 +11,8 @@ import dev.langchain4j.store.embedding.EmbeddingSearchRequest;
import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.filter.Filter; import dev.langchain4j.store.embedding.filter.Filter;
import dev.langchain4j.store.embedding.filter.comparison.IsEqualTo; 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 dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -30,13 +32,13 @@ import java.util.Map;
/** /**
* Weaviate向量库管理 * 向量库管理
* @author ageer * @author ageer
*/ */
@Service @Service
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class WeaviateVectorStoreImpl implements VectorStoreService { public class VectorStoreServiceImpl implements VectorStoreService {
private EmbeddingStore<TextSegment> embeddingStore; private EmbeddingStore<TextSegment> embeddingStore;
@@ -44,18 +46,38 @@ public class WeaviateVectorStoreImpl implements VectorStoreService {
@Override @Override
@PostConstruct @PostConstruct
public void createSchema(String kid) { public void createSchema(String kid,String modelName) {
String protocol = configService.getConfigValue("weaviate", "protocol"); if(modelName.equals("weaviate")){
String host = configService.getConfigValue("weaviate", "host"); String protocol = configService.getConfigValue("weaviate", "protocol");
String className = configService.getConfigValue("weaviate", "classname"); String host = configService.getConfigValue("weaviate", "host");
this.embeddingStore = WeaviateEmbeddingStore.builder() String className = configService.getConfigValue("weaviate", "classname");
.scheme(protocol) this.embeddingStore = WeaviateEmbeddingStore.builder()
.host(host) .scheme(protocol)
.objectClass(className+kid) .host(host)
.scheme(protocol) .objectClass(className+kid)
.avoidDups(true) .scheme(protocol)
.consistencyLevel("ALL") .avoidDups(true)
.build(); .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 @Override

View File

@@ -160,7 +160,9 @@ public class KnowledgeInfoServiceImpl implements IKnowledgeInfoService {
knowledgeInfo.setUid(LoginHelper.getLoginUser().getUserId()); knowledgeInfo.setUid(LoginHelper.getLoginUser().getUserId());
} }
baseMapper.insert(knowledgeInfo); baseMapper.insert(knowledgeInfo);
vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId())); if (knowledgeInfo != null) {
vectorStoreService.createSchema(String.valueOf(knowledgeInfo.getId()),bo.getVector());
}
}else { }else {
baseMapper.updateById(knowledgeInfo); baseMapper.updateById(knowledgeInfo);
} }