| 此版本仍在开发中,尚未被视为稳定版本。最新的快照版本请使用 Spring AI 1.0.0-SNAPSHOT! | 
Weaviate
本节将引导您设置 Weaviate VectorStore 以存储文档嵌入并执行相似性搜索。
Weaviate 是一个开源矢量数据库,允许您存储来自您最喜欢的 ML 模型的数据对象和矢量嵌入,并无缝扩展到数十亿个数据对象。 它提供了用于存储文档嵌入、内容和元数据以及搜索这些嵌入(包括元数据筛选)的工具。
先决条件
- 
一个正在运行的 Weaviate 实例。以下选项可用: - 
Weaviate Cloud Service(需要创建帐户和 API 密钥) 
 
- 
- 
如果需要,EmbeddingModel 的 API 密钥,用于生成由 WeaviateVectorStore.
依赖
将 Weaviate Vector Store 依赖项添加到您的项目中:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-weaviate-store</artifactId>
</dependency>或发送到您的 Gradlebuild.gradlebuild 文件。
dependencies {
    implementation 'org.springframework.ai:spring-ai-weaviate-store'
}| 请参阅 Dependency Management 部分,将 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>环境变量 /
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>也可以是这些的混合。
| 如果您选择创建 shell 脚本以方便将来的工作,请确保在启动应用程序之前通过“源”文件运行它,即 source <your_script_name>.sh. | 
自动配置
Spring AI 为 Weaviate Vector Store 提供了 Spring Boot 自动配置。
要启用它,请将以下依赖项添加到项目的 Maven 中pom.xml文件:
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-weaviate-store-spring-boot-starter</artifactId>
</dependency>或发送到您的 Gradlebuild.gradlebuild 文件。
dependencies {
    implementation 'org.springframework.ai:spring-ai-weaviate-store-spring-boot-starter'
}| 请参阅 Dependency Management 部分,将 Spring AI BOM 添加到您的构建文件中。 | 
请查看 vector store 的配置参数列表,了解默认值和配置选项。
| 请参阅 Repositories 部分,将 Maven Central 和/或 Snapshot Repositories 添加到您的构建文件中。 | 
此外,您还需要配置一个EmbeddingModel豆。请参阅 EmbeddingModel 部分以了解更多信息。
以下是所需 bean 的示例:
@Bean
public EmbeddingModel embeddingModel() {
    // Can be any other Embeddingmodel implementation.
    return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}现在,您可以自动连接WeaviateVectorStore作为应用程序中的向量存储。
手动配置
除了使用 Spring Boot 自动配置,您还可以手动配置WeaviateVectorStore使用 Builder 模式:
@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 store 中使用通用的可移植元数据过滤器。
例如,您可以使用文本表达式语言:
vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("The World")
        .topK(TOP_K)
        .similarityThreshold(SIMILARITY_THRESHOLD)
        .filterExpression("country in ['UK', 'NL'] && year >= 2020").build());或者以编程方式使用Filter.ExpressionDSL:
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 公司 | 
| 
 | 一致性和速度之间的理想权衡 | ConsistentLevel.ONE | 
| 
 | 配置可在筛选器中使用的元数据字段。格式:spring.ai.vectorstore.weaviate.filter-field.<field-name>=<field-type> | 
访问 Native Client
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接口。