Weaviate

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

什么是 Weaviate?

Weaviate 是一个开源的向量数据库。 它允许您存储您最喜欢的 ML 模型中的数据对象和向量嵌入,并无缝扩展到数十亿个数据对象。 它提供了用于存储文档嵌入、内容和元数据以及搜索这些嵌入(包括元数据筛选)的工具。spring-doc.cn

先决条件

  1. EmbeddingModel实例来计算文档嵌入。有几个选项可用:spring-doc.cn

    • Transformers Embedding- 计算本地环境中的嵌入。按照 ONNX Transformers Embedding 说明进行操作。spring-doc.cn

    • OpenAI Embedding- 使用 OpenAI 嵌入端点。您需要在 OpenAI Signup 上创建一个帐户,并在 API Keys 中生成 api-key 令牌。spring-doc.cn

    • 您还可以使用 或 .Azure OpenAI EmbeddingPostgresML Embedding Modelspring-doc.cn

  2. Weaviate cluster.您可以在 Docker 容器中本地设置集群或创建 Weaviate 云服务。对于后者,您需要创建一个 Weaviate 账户,设置一个集群,并从控制面板详细信息中获取您的访问 API 密钥。spring-doc.cn

启动时,如果尚未预置,则会创建所需的对象架构。WeaviateVectorStoreSpringAiWeaviatespring-doc.cn

自动配置

然后将 WeaviateVectorStore 启动启动依赖项添加到您的项目中:spring-doc.cn

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

或您的 Gradle 构建文件。build.gradlespring-doc.cn

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

矢量存储实现可以为您初始化必要的架构,但您必须通过在相应的构造函数中指定布尔值或在文件中进行设置来选择加入。initializeSchema…​initialize-schema=trueapplication.propertiesspring-doc.cn

这是一个突破性的变化!在早期版本的 Spring AI 中,默认情况下会进行此架构初始化。

Vector Store 还需要一个实例来计算文档的嵌入。 您可以选择一个可用的 EmbeddingModel ImplementationsEmbeddingModelspring-doc.cn

例如,要使用 OpenAI EmbeddingModel,请将以下依赖项添加到您的项目中:spring-doc.cn

<dependency>
	<groupId>org.springframework.ai</groupId>
	<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>

或您的 Gradle 构建文件。build.gradlespring-doc.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'
}
请参阅 Dependency Management 部分,将 Spring AI BOM 添加到您的构建文件中。 请参阅 Repositories 部分,将 Milestone 和/或 Snapshot Repositories 添加到您的构建文件中。

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

spring.ai.vectorstore.weaviate.host=<host of your Weaviate instance>
spring.ai.vectorstore.weaviate.api-key=<your api key>
spring.ai.vectorstore.weaviate.scheme=http

# API key if needed, e.g. OpenAI
spring.ai.openai.api.key=<api-key>
检查配置参数列表以了解默认值和配置选项。

现在,您可以在应用程序中自动连接 Weaviate Vector Store 并使用它spring-doc.cn

@Autowired VectorStore 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")));

// Add the documents
vectorStore.add(documents);

// Retrieve documents similar to a query
List<Document> results = this.vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));

配置属性

您可以在 Spring Boot 配置中使用以下属性来自定义 weaviate 向量存储。spring-doc.cn

财产 描述 默认值

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

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

主机:8080spring-doc.cn

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

连接架构。spring-doc.cn

httpspring-doc.cn

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

用于 Weaviate 服务器身份验证的 API 密钥。spring-doc.cn

-spring-doc.cn

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

“SpringAiWeaviate”spring-doc.cn

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

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

ConsistentLevel.ONEspring-doc.cn

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

spring.ai.vectorstore.weaviate.filter-field.<field-name>=<field-type>spring-doc.cn

-spring-doc.cn

spring.ai.vectorstore.weaviate.headersspring-doc.cn

-spring-doc.cn

spring.ai.vectorstore.weaviate.initialize-schemaspring-doc.cn

是否初始化所需的 schemaspring-doc.cn

falsespring-doc.cn

元数据筛选

您还可以将通用的可移植元数据筛选器与 WeaviateVectorStore 结合使用。spring-doc.cn

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

vectorStore.similaritySearch(
   SearchRequest
      .query("The World")
      .withTopK(TOP_K)
      .withSimilarityThreshold(SIMILARITY_THRESHOLD)
      .withFilterExpression("country in ['UK', 'NL'] && year >= 2020"));

或者以编程方式使用表达式 DSL:spring-doc.cn

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(
   SearchRequest
      .query("The World")
      .withTopK(TOP_K)
      .withSimilarityThreshold(SIMILARITY_THRESHOLD)
      .withFilterExpression(b.and(
         b.in("country", "UK", "NL"),
         b.gte("year", 2020)).build()));

可移植的过滤器表达式会自动转换为专有的 Weaviate where 过滤器。 例如,以下可移植筛选条件表达式:spring-doc.cn

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

转换为 Weaviate GraphQL,其中 filter 表达式spring-doc.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
      }]

手动配置

您可以手动配置 . 为此,您需要将依赖项添加到您的项目中:WeaviateVectorStorespring-ai-weaviate-storespring-doc.cn

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

或您的 Gradle 构建文件。build.gradlespring-doc.cn

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

要在应用程序中配置 Weaviate,您可以创建一个 WeaviateClient:spring-doc.cn

@Bean
public WeaviateClient weaviateClient() {
   try {
      return WeaviateAuthClient.apiKey(
            new Config(<YOUR SCHEME>, <YOUR HOST>, <YOUR HEADERS>),
            <YOUR API KEY>);
   }
   catch (AuthException e) {
      throw new IllegalArgumentException("WeaviateClient could not be created.", e);
   }
}

通过将 Spring Boot OpenAI Starters添加到您的项目,与 OpenAI 的嵌入集成。 这为您提供了 Embeddings 客户端的实现:spring-doc.cn

@Bean
public WeaviateVectorStore vectorStore(EmbeddingModel embeddingModel, WeaviateClient weaviateClient) {

   WeaviateVectorStoreConfig.Builder configBuilder = WeaviateVectorStore.WeaviateVectorStoreConfig.builder()
      .withObjectClass(<YOUR OBJECT CLASS>)
      .withConsistencyLevel(<YOUR CONSISTENCY LEVEL>);

   return new WeaviateVectorStore(configBuilder.build(), embeddingModel, weaviateClient);
}

在 docker 容器中运行 Weaviate 集群

在 docker 容器中启动 Weaviate:spring-doc.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

localhost:8080/v1 处使用 scheme=http、host=localhost:8080 和 apiKey=“” 启动 Weaviate 集群。然后按照使用说明进行操作。spring-doc.cn