最新快照版本请使用Spring AI 1.1.0spring-doc.cadn.net.cn

织布

本节将引导你如何设置Weaviate矢量商店,以存储文档嵌入并进行相似性搜索。spring-doc.cadn.net.cn

Weaviate是一个开源的矢量数据库,允许你存储来自喜欢的机器学习模型的数据对象和矢量嵌入,并无缝扩展到数十亿个数据对象。 它提供存储文档嵌入、内容和元数据的工具,并用于搜索这些嵌入,包括元数据过滤。spring-doc.cadn.net.cn

前提条件

依赖

春季AI自动配置、起始模块的工件名称发生了重大变化。 更多信息请参阅升级说明spring-doc.cadn.net.cn

将 Weaviate 向量存储依赖添加到你的项目中:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-weaviate-store'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

配置

连接Weaviate并使用WeaviateVectorStore你需要为你的实例提供访问权限。 配置可通过 Spring Boot 的 application.properties 提供:spring-doc.cadn.net.cn

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 密钥,你有多种选择:spring-doc.cadn.net.cn

选项1:使用 Spring 表达式语言(SpEL)

你可以使用自定义环境变量名,并在应用配置中引用它们:spring-doc.cadn.net.cn

# 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>

选项2:程序性访问环境变量

或者,你也可以访问 Java 代码中的环境变量:spring-doc.cadn.net.cn

String weaviateApiKey = System.getenv("WEAVIATE_API_KEY");
String openAiApiKey = System.getenv("OPENAI_API_KEY");
如果你选择创建一个 shell 脚本来管理环境变量,务必在启动应用程序前通过“源代码”文件来运行它,即资料来源<your_script_name>.sh.

自动配置

Spring AI 为 Weaviate 向量商店提供了 Spring Boot 自动配置。 要启用它,请在项目的 Maven 中添加以下依赖pom.xml文件:spring-doc.cadn.net.cn

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

或者去你的Gradlebuild.gradle构建文件。spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-vector-store-weaviate'
}
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。

请查看矢量存储的配置参数列表,了解默认值和配置选项。spring-doc.cadn.net.cn

请参阅“遗物仓库”部分,将Maven Central和/或快照仓库添加到你的构建文件中。

此外,你还需要一个配置嵌入模型豆。更多信息请参阅嵌入模型部分。spring-doc.cadn.net.cn

以下是所需豆子的示例:spring-doc.cadn.net.cn

@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作为你的应用中的矢量存储。spring-doc.cadn.net.cn

手动配置

你可以手动配置WeaviateVectorStore使用建造者模式:spring-doc.cadn.net.cn

@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();
}

元数据过滤

你也可以利用 Weaviate 商店的通用、可移植元数据过滤器spring-doc.cadn.net.cn

例如,你可以使用以下文本表达式语言:spring-doc.cadn.net.cn

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

或者程序化地使用滤波。表达DSL:spring-doc.cadn.net.cn

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,筛选器。

例如,这个可移植的Filter表达式:spring-doc.cadn.net.cn

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

转换为专有的Weaviate GraphQL过滤格式:spring-doc.cadn.net.cn

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 中运行:spring-doc.cadn.net.cn

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

这会启动一个 Weaviate 实例,访问地址为 localhost:8080spring-doc.cadn.net.cn

WeaviateVectorStore 属性

你可以在 Spring Boot 配置中使用以下属性来自定义 Weaviate 矢量存储。spring-doc.cadn.net.cn

属性 描述 默认值

spring.ai.vectorstore.weaviate.hostspring-doc.cadn.net.cn

Weaviate服务器的主机spring-doc.cadn.net.cn

本地主持人:8080spring-doc.cadn.net.cn

spring.ai.vectorstore.weaviate.schemespring-doc.cadn.net.cn

连接模式spring-doc.cadn.net.cn

httpspring-doc.cadn.net.cn

spring.ai.vectorstore.weaviate.api-keyspring-doc.cadn.net.cn

用于认证的API密钥spring-doc.cadn.net.cn

spring.ai.vectorstore.weaviate.object-classspring-doc.cadn.net.cn

存储文档的类名spring-doc.cadn.net.cn

Spring织物spring-doc.cadn.net.cn

spring.ai.vectorstore.weaviate.consistency-levelspring-doc.cadn.net.cn

一致性与速度之间的理想权衡spring-doc.cadn.net.cn

一致性等级.ONEspring-doc.cadn.net.cn

spring.ai.vectorstore.weaviate.filter-fieldspring-doc.cadn.net.cn

配置可用于过滤器的元数据字段。格式: spring.ai.vectorstore.weaviate.filter-field.<field-name>=<field-type>spring-doc.cadn.net.cn

访问本地客户端

Weaviate 向量存储实现提供了对底层原生 Weaviate 客户端的访问(Weaviate客户端)通过getNativeClient()方法:spring-doc.cadn.net.cn

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接口。spring-doc.cadn.net.cn