Qdrant

本节将引导您设置 Qdrant VectorStore 以存储文档嵌入并执行相似性搜索。

Qdrant 是一个开源的高性能向量搜索引擎/数据库。

先决条件

  • Qdrant 实例:按照 Qdrant 文档中的 安装说明 设置 Qdrant 实例。

  • 如果需要,为 EmbeddingClient 获取 API 密钥,以生成由 QdrantVectorStore 存储的嵌入。

要设置 QdrantVectorStore,您需要从您的 Qdrant 实例中获取以下信息:主机GRPC 端口集合名称API 密钥(如果需要)。

建议提前 创建 具有适当维度和配置的 Qdrant 集合。如果未创建集合,则 QdrantVectorStore 将尝试使用配置的 EmbeddingClient 的维度和 Cosine 相似度创建一个。

依赖关系

然后将 Qdrant boot starter 依赖项添加到您的项目中:

<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 实例来计算文档的嵌入。您可以选择其中一个可用的 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'
}
请参阅 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。请参阅 存储库 部分,将里程碑和/或快照存储库添加到您的构建文件中。

要连接到 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 密钥,例如 OpenAI
spring.ai.openai.api.key=<api-key>
检查 配置参数 列表,了解默认值和配置选项。

现在您可以在应用程序中自动装配 Qdrant Vector Store 并使用它

@Autowired 向量存储器 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")));

// 将文档添加到 Qdrant
vectorStore.add(List.of(文档));

// 检索与查询相似的文档
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));

手动配置

您可以手动配置 QdrantVectorStore 而不是使用 Spring Boot 自动配置。为此,您需要将 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);
}

元数据过滤

您可以利用 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()));
这些过滤表达式会转换为相应的 Qdrant 过滤器
User needs assistance in translating HTML fragments from English to Chinese, ensuring that the translated HTML retains correct formatting.Here is the translated HTML fragment in Chinese while retaining the correct formatting:

配置属性

您可以在Spring Boot配置中使用以下属性来自定义Qdrant向量存储。

属性 描述 默认值

spring.ai.vectorstore.qdrant.host

Qdrant服务器的主机。

localhost

spring.ai.vectorstore.qdrant.port

Qdrant服务器的gRPC端口。

6334

spring.ai.vectorstore.qdrant.api-key

用于与Qdrant服务器进行身份验证的API密钥。

-

spring.ai.vectorstore.qdrant.collection-name

在Qdrant中使用的集合名称。

-

spring.ai.vectorstore.qdrant.use-tls

是否使用TLS(HTTPS)。

false