这部分将指导您设置Qdrant VectorStore
,以存储文档嵌入并执行相似性搜索。
链接:https://www.qdrant.tech/ [Qdrant] 是一个开源的、高性能的向量搜索引擎/数据库。
先决条件
-
Qdrant实例:通过遵循Qdrant文档中的链接:https://qdrant.tech/documentation/guides/installation/[安装说明]来设置一个Qdrant实例。
-
如果需要,为EmbeddingClient生成嵌入式存储由`QdrantVectorStore`存储的API键。
要设置`QdrantVectorStore`,您需要从您的Qdrant实例中获取以下信息:Host
(主机名)、GRPC Port
(GRPC端口)、Collection Name
(集合名称)以及`API Key`(如果需要的话)。
Note
|
建议提前通过 创建 Qdrant 集合,并使用适当的维度和配置。如果集合未创建,QdrantVectorStore 将尝试使用 EmbeddingClient 配置的维度和 Cosine 相似性来创建一个。
|
依赖项
然后添加Qdrant boot启动器依赖到你的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-qdrant-store-spring-boot-starter</artifactId>
</dependency>
或添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-qdrant-store-spring-boot-starter'
}
"向量存储"也需要一个`EmbeddingClient`实例来为文档计算嵌入。你可以选择一个可用的嵌入客户端实现。
例如,要使用OpenAI EmbeddingClient,请在您的项目中添加以下依赖项:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
或添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
要连接到Qdrant并使用`QdrantVectorStore`,您需要提供对实例的访问细节。一个简单的配置可以通过Spring Boot的_application.properties_提供,
spring.ai.vectorstore.qdrant.host=<你的qdrant实例主机>
spring.ai.vectorstore.qdrant.port=<你的qdrant实例的GRPC端口>
spring.ai.vectorstore.qdrant.api-key=<你的api密钥>
spring.ai.vectorstore.qdrant.collection-name=<在Qdrant中使用的集合名称>
# API key if needed, e.g. OpenAI
spring.ai.openai.api.key=<api-key>
Tip
|
查看配置参数列表以了解默认值和配置选项。 |
现在你可以在你的应用程序中自动连接Qdrant向量存储并使用它。
@Autowired VectorStore vectorStore;
// ...
List <Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
// Add the documents to Qdrant
vectorStore.add(List.of(document));
// 检索与查询相似的文档
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
手动配置
你可以选择不使用Spring Boot的自动配置,而是手动配置`QdrantVectorStore`。为此,你需要在你的项目中添加`spring-ai-qdrant`依赖:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-qdrant</artifactId>
</dependency>
或添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-qdrant'
}
在你的应用程序中配置Qdrant,你可以使用以下设置:
@Bean
public QdrantVectorStoreConfig qdrantVectorStoreConfig() {
return QdrantVectorStoreConfig.builder()
.withHost("<QDRANT_HOSTNAME>")
.withPort(<QDRANT_GRPC_PORT>)
.withCollectionName("<QDRANT_COLLECTION_NAME>")
.withApiKey("<QDRANT_API_KEY>")
.build();
}
通过在项目中添加Spring Boot OpenAI启动器来与OpenAI的嵌入式功能集成。这为您提供了嵌入式客户端的实现:
@Bean
public VectorStore vectorStore(QdrantVectorStoreConfig config, EmbeddingClient embeddingClient) {
return new QdrantVectorStore(config, embeddingClient);
}
元数据过滤
你可以利用通用的、可移植的链接:https://docs.spring.io/spring-ai/reference/api/vectordbs.html#_metadata_filters[元数据过滤器]与Qdrant向量存储一起使用。
例如,你可以使用文本表达式语言:
vectorStore.similaritySearch(
SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression("author in ['john', 'jill'] && article_type == 'blog'"));
或者使用`Filter.Expression` DSL进行编程设置:
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression(b.and(
b.in("john", "jill"),
b.eq("article_type", "blog")).build()));
Note
|
这些过滤表达式被转换成等效的Qdrant链接:https://qdrant.tech/documentation/concepts/filtering/[过滤器]。 |
配置属性
你可以在Spring Boot配置中使用以下属性来自定义Qdrant向量存储。
Property | Description | Default value |
---|---|---|
|
Qdrant服务器的主机名。 |
localhost |
|
Qdrant服务器的gRPC端口。 |
6334 |
|
用于Qdrant服务器认证的API密钥。 |
- |
|
在Qdrant中使用的集合名称。 |
- |
|
是否使用TLS(HTTPS)。 |
false |