跳到主要内容

Weaviate

DeepSeek V3 中英对照 Weaviate

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

Weaviate 是一个开源的向量数据库,允许您存储数据对象和来自您喜欢的机器学习模型的向量嵌入,并无缝扩展到数十亿个数据对象。它提供了存储文档嵌入、内容和元数据的工具,并支持通过这些嵌入进行搜索,包括元数据过滤。

先决条件

  • 一个正在运行的 Weaviate 实例。以下选项可用:

  • 如果需要,用于 EmbeddingModel 的 API 密钥,以生成由 WeaviateVectorStore 存储的嵌入。

依赖项

将 Weaviate 向量存储依赖项添加到你的项目中:

<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store</artifactId>
</dependency>
xml

或添加到你的 Gradle build.gradle 构建文件中。

dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store'
}
groovy
提示

请参考依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。

配置

要连接到 Weaviate 并使用 WeaviateVectorStore,您需要提供实例的访问详细信息。可以通过 Spring Boot 的 application.properties 提供一个简单的配置,

spring.ai.vectorstore.weaviate.host=<host_of_your_weaviate_instance>
spring.ai.vectorstore.weaviate.scheme=<http_or_https>
spring.ai.vectorstore.weaviate.api-key=<your_api_key>
# API key if needed, e.g. OpenAI
spring.ai.openai.api-key=<api-key>
properties

环境变量,

export SPRING_AI_VECTORSTORE_WEAVIATE_HOST=<host_of_your_weaviate_instance>
export SPRING_AI_VECTORSTORE_WEAVIATE_SCHEME=<http_or_https>
export SPRING_AI_VECTORSTORE_WEAVIATE_API_KEY=<your_api_key>
# API key if needed, e.g. OpenAI
export SPRING_AI_OPENAI_API_KEY=<api-key>
bash

或者可以是这些的混合。

备注

如果你选择创建一个 shell 脚本以便于未来的工作,请确保在启动应用程序之前通过“sourcing”文件来运行它,即 source <your_script_name>.sh

自动配置

Spring AI 为 Weaviate 向量存储提供了 Spring Boot 自动配置。要启用它,请将以下依赖项添加到项目的 Maven pom.xml 文件中:

<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store-spring-boot-starter</artifactId>
</dependency>
xml

或添加到你的 Gradle build.gradle 构建文件中。

dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store-spring-boot-starter'
}
groovy

:::提示
请参考依赖管理部分,将 Spring AI BOM 添加到您的构建文件中。
:::

请查看向量存储的配置参数列表,以了解默认值和配置选项。

:::提示
请参阅 Repositories 部分,将 Maven Central 和/或 Snapshot 仓库添加到您的构建文件中。
:::

此外,您还需要一个配置好的 EmbeddingModel bean。有关更多信息,请参阅 EmbeddingModel 部分。

以下是所需的 bean 示例:

@Bean
public EmbeddingModel embeddingModel() {
// Can be any other Embeddingmodel implementation.
return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
java

现在你可以在应用程序中自动装配 WeaviateVectorStore 作为向量存储。

手动配置

你可以使用构建器模式手动配置 WeaviateVectorStore,而不是使用 Spring Boot 的自动配置:

@Bean
public WeaviateClient weaviateClient() {
return new WeaviateClient(new Config("http", "localhost:8080"));
}

@Bean
public VectorStore vectorStore(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) {
return WeaviateVectorStore.builder(weaviateClient, embeddingModel)
.objectClass("CustomClass") // Optional: defaults to "SpringAiWeaviate"
.consistencyLevel(ConsistentLevel.QUORUM) // Optional: defaults to ConsistentLevel.ONE
.filterMetadataFields(List.of( // Optional: fields that can be used in filters
MetadataField.text("country"),
MetadataField.number("year")))
.build();
}
java

元数据过滤

你也可以在 Weaviate 存储中使用通用的、可移植的元数据过滤器

例如,你可以使用文本表达式语言:

vectorStore.similaritySearch(
SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression("country in ['UK', 'NL'] && year >= 2020").build());
java

或通过 Filter.Expression DSL 以编程方式实现:

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression(b.and(
b.in("country", "UK", "NL"),
b.gte("year", 2020)).build()).build());
java
备注

这些(可移植的)过滤表达式会自动转换为 Weaviate 专有的 where filters

例如,这个便携式过滤器表达式:

country in ['UK', 'NL'] && year >= 2020
sql

被转换为专有的 Weaviate GraphQL 过滤器格式:

operator: And
operands:
[{
operator: Or
operands:
[{
path: ["meta_country"]
operator: Equal
valueText: "UK"
},
{
path: ["meta_country"]
operator: Equal
valueText: "NL"
}]
},
{
path: ["meta_year"]
operator: GreaterThanEqual
valueNumber: 2020
}]
graphql

在 Docker 中运行 Weaviate

要快速开始使用本地 Weaviate 实例,你可以在 Docker 中运行它:

docker run -it --rm --name weaviate \
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
-e QUERY_DEFAULTS_LIMIT=25 \
-e DEFAULT_VECTORIZER_MODULE=none \
-e CLUSTER_HOSTNAME=node1 \
-p 8080:8080 \
semitechnologies/weaviate:1.22.4
bash

这将启动一个可在 localhost:8080 访问的 Weaviate 实例。

WeaviateVectorStore 属性

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

属性描述默认值
spring.ai.vectorstore.weaviate.hostWeaviate 服务器的主机地址localhost:8080
spring.ai.vectorstore.weaviate.scheme连接协议http
spring.ai.vectorstore.weaviate.api-key用于身份验证的 API 密钥
spring.ai.vectorstore.weaviate.object-class用于存储文档的类名SpringAiWeaviate
spring.ai.vectorstore.weaviate.consistency-level一致性与速度之间的期望权衡ConsistentLevel.ONE
spring.ai.vectorstore.weaviate.filter-field配置可用于过滤的元数据字段。格式:spring.ai.vectorstore.weaviate.filter-field.<字段名称>=<字段类型>

访问 Native Client

Weaviate Vector Store 实现通过 getNativeClient() 方法提供了对底层原生 Weaviate 客户端(WeaviateClient)的访问:

WeaviateVectorStore vectorStore = context.getBean(WeaviateVectorStore.class);
Optional<WeaviateClient> nativeClient = vectorStore.getNativeClient();

if (nativeClient.isPresent()) {
WeaviateClient client = nativeClient.get();
// Use the native client for Weaviate-specific operations
}
java

原生客户端让你能够访问那些可能没有通过 VectorStore 接口暴露的 Weaviate 特定功能和操作。