此版本仍在开发中,尚不被认为是稳定的。对于最新的快照版本,请使用 Spring AI 1.0.1! |
织物
本节将引导您设置 Weaviate VectorStore 以存储文档嵌入并执行相似性搜索。
Weaviate 是一个开源矢量数据库,允许您存储来自您最喜欢的 ML 模型的数据对象和矢量嵌入,并无缝扩展到数十亿个数据对象。 它提供了存储文档嵌入、内容和元数据以及搜索这些嵌入的工具,包括元数据过滤。
前提条件
-
正在运行的 Weaviate 实例。以下选项可用:
-
Weaviate 云服务(需要创建帐户和 API 密钥)
-
-
如果需要,EmbeddingModel 的 API 密钥用于生成由
WeaviateVectorStore
.
依赖
Spring AI 自动配置、入门模块的工件名称发生了重大变化。 有关更多信息,请参阅升级说明。 |
将 Weaviate Vector Store 依赖项添加到项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store</artifactId>
</dependency>
或 Gradlebuild.gradle
构建文件。
dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store'
}
请参阅依赖项管理部分,将 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>
如果您更喜欢将环境变量用于敏感信息(如 API 密钥),您有多种选择:
选项 1:使用 Spring 表达式语言 (SpEL)
您可以使用自定义环境变量名称并在应用程序配置中引用它们:
# In application.yml
spring:
ai:
vectorstore:
weaviate:
host: ${WEAVIATE_HOST}
scheme: ${WEAVIATE_SCHEME}
api-key: ${WEAVIATE_API_KEY}
openai:
api-key: ${OPENAI_API_KEY}
# In your environment or .env file
export WEAVIATE_HOST=<host_of_your_weaviate_instance>
export WEAVIATE_SCHEME=<http_or_https>
export WEAVIATE_API_KEY=<your_api_key>
export OPENAI_API_KEY=<api-key>
自动配置
Spring AI 为 Weaviate Vector Store 提供 Spring Boot 自动配置。
要启用它,请将以下依赖项添加到项目的 Mavenpom.xml
文件:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-weaviate</artifactId>
</dependency>
或 Gradlebuild.gradle
构建文件。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-weaviate'
}
请参阅依赖项管理部分,将 Spring AI BOM 添加到构建文件中。 |
请查看矢量存储的配置参数列表,了解默认值和配置选项。
请参阅 Artifact Repositories 部分,将 Maven Central 和/或 Snapshot Repositories 添加到构建文件中。 |
此外,您还需要配置一个EmbeddingModel
豆。
有关详细信息,请参阅 EmbeddingModel 部分。
以下是所需 bean 的示例:
@Bean
public EmbeddingModel embeddingModel() {
// Retrieve API key from a secure source or environment variable
String apiKey = System.getenv("OPENAI_API_KEY");
// Can be any other EmbeddingModel implementation
return new OpenAiEmbeddingModel(OpenAiApi.builder().apiKey(apiKey).build());
}
现在,您可以自动连接WeaviateVectorStore
作为应用程序中的矢量存储。
手动配置
您可以手动配置WeaviateVectorStore
使用构建器模式:
@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)
.options(options) // Optional: use custom options
.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();
}
元数据过滤
您也可以在 Weaviate 商店中利用通用的可移植元数据过滤器。
例如,您可以使用文本表达式语言:
vectorStore.similaritySearch(
SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression("country in ['UK', 'NL'] && year >= 2020").build());
或以编程方式使用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());
这些(可移植的)过滤器表达式会自动转换为专有的 Weaviate where 过滤器。 |
例如,这个可移植过滤器表达式:
country in ['UK', 'NL'] && year >= 2020
转换为专有的 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
}]
在 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
这将启动一个可在 localhost:8080 访问的 Weaviate 实例。
WeaviateVectorStore 属性
您可以在 Spring Boot 配置中使用以下属性来自定义 Weaviate 矢量存储。
属性 | 描述 | 默认值 |
---|---|---|
|
Weaviate 服务器的主机 |
本地主机:8080 |
|
连接架构 |
http |
|
用于身份验证的 API 密钥 |
|
|
用于存储文档的类名。 |
SpringAiWeaviate |
|
内容的字段名称 |
内容 |
|
元数据的字段前缀 |
元_ |
|
一致性和速度之间的期望权衡 |
一致级别.ONE |
|
配置可在过滤器中使用的元数据字段。格式:spring.ai.vectorstore.weaviate.filter-field.<field-name>=<field-type> |
对象类名称应以大写字母开头,字段名称应以小写字母开头。 请参阅数据对象概念 |
访问本机客户端
Weaviate Vector Store 实现提供对底层原生 Weaviate 客户端 (WeaviateClient
) 通过getNativeClient()
方法:
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
}
本机客户端允许您访问 Weaviate 特定的功能和作,这些功能和作可能不会通过VectorStore
接口。