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

沙发底座

本节将引导你如何设置CouchbaseSearchVectorStore用于存储文档嵌入并使用 Couchbase 进行相似性搜索。spring-doc.cadn.net.cn

Couchbase 是一个分布式的 JSON 文档数据库,具备关系型数据库管理系统所需的所有功能。它允许用户通过基于向量的存储和检索查询信息。spring-doc.cadn.net.cn

前提条件

一个正在运行的Couchbase实例。以下选项可供选择: 沙发底座 * Docker * Capella - Couchbase 即服务 * 本地安装 Couchbase * Couchbase Kubernetes Operatorspring-doc.cadn.net.cn

自动配置

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

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

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

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

dependencies {
    implementation 'org.springframework.ai:spring-ai-couchbase-store-spring-boot-starter'
}
Couchbase 向量搜索仅在起始版本 7.6 和 Java SDK 版本 3.6.0 中提供。”
请参考依赖管理部分,将Spring AI的物料清单添加到你的构建文件中。
请参阅“遗物仓库”部分,将里程碑和/或快照仓库添加到你的构建文件中。

向量存储实现可以帮你初始化配置好的桶、范围、集合和搜索索引,默认选项,但你必须通过指定初始化模式在相应构造函数中算值。spring-doc.cadn.net.cn

这是个突破性的变革!在早期版本的 Spring AI 中,这种模式初始化是默认的。

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

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

现在你可以自动接线CouchbaseSearchVectorStore作为你的应用中的矢量存储。spring-doc.cadn.net.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 to Qdrant
vectorStore.add(documents);

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

配置属性

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

spring.ai.openai.api-key=<key>
spring.couchbase.connection-string=<conn_string>
spring.couchbase.username=<username>
spring.couchbase.password=<password>

如果你更喜欢用环境变量处理敏感信息,比如密码或 API 密钥,你有多种选择:spring-doc.cadn.net.cn

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

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

# In application.yml
spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
  couchbase:
    connection-string: ${COUCHBASE_CONN_STRING}
    username: ${COUCHBASE_USER}
    password: ${COUCHBASE_PASSWORD}
# In your environment or .env file
export OPENAI_API_KEY=<api-key>
export COUCHBASE_CONN_STRING=<couchbase connection string like couchbase://localhost>
export COUCHBASE_USER=<couchbase username>
export COUCHBASE_PASSWORD=<couchbase password>

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

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

String apiKey = System.getenv("OPENAI_API_KEY");

这种方法让你在命名环境变量时更加灵活,同时将敏感信息排除在应用配置文件之外。spring-doc.cadn.net.cn

如果你选择为方便未来工作而创建shell脚本,务必在启动应用程序前通过“源源”文件来运行它,即资料来源<your_script_name>.sh.

Spring Boot 为 Couchbase 集群自动配置功能会创建一个 bean 实例,供CouchbaseSearchVectorStore.spring-doc.cadn.net.cn

Spring Boot 属性Spring.Couchbase。*用于配置 Couchbase 集群实例:spring-doc.cadn.net.cn

属性 描述 默认值

Spring.couchbase.connection-stringspring-doc.cadn.net.cn

Couchbase 连接字符串spring-doc.cadn.net.cn

couchbase://localhostspring-doc.cadn.net.cn

spring.couchbase.password(Spring)的spring-doc.cadn.net.cn

用来认证Couchbase的密码。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.couchbase.usernamespring-doc.cadn.net.cn

用户名用于Couchbase认证。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.couchbase.env.io.minEndpointsspring-doc.cadn.net.cn

每个节点的套接字数最低。spring-doc.cadn.net.cn

1spring-doc.cadn.net.cn

spring.couchbase.env.io.maxEndpointsspring-doc.cadn.net.cn

每个节点的最大套接字数。spring-doc.cadn.net.cn

12spring-doc.cadn.net.cn

spring.couchbase.env.io.idleHttpConnectionTimeoutspring-doc.cadn.net.cn

HTTP 连接可能处于空闲状态,直到关闭并从池中移除。spring-doc.cadn.net.cn

1spring-doc.cadn.net.cn

spring.couchbase.env.ssl.enabledspring-doc.cadn.net.cn

是否启用SSL支持。除非另有说明,否则若提供“捆绑包”,则自动启用。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.couchbase.env.ssl.bundlespring-doc.cadn.net.cn

SSL 捆绑包名称。spring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.connectspring-doc.cadn.net.cn

桶连接超时。spring-doc.cadn.net.cn

10分spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.disconnectspring-doc.cadn.net.cn

桶断开连接超时。spring-doc.cadn.net.cn

10分spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.key值spring-doc.cadn.net.cn

对特定键值作的超时。spring-doc.cadn.net.cn

2500毫秒spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.key值spring-doc.cadn.net.cn

对特定关键字值的作进行超时,且具有耐久性级别。spring-doc.cadn.net.cn

10分spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.key值耐用spring-doc.cadn.net.cn

对特定关键字值的作进行超时,且具有耐久性级别。spring-doc.cadn.net.cn

10分spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.queryspring-doc.cadn.net.cn

SQL++ 查询作超时。spring-doc.cadn.net.cn

75年代spring-doc.cadn.net.cn

春.couchbase.env.timeouts.viewspring-doc.cadn.net.cn

常规和地理空间视图作超时。spring-doc.cadn.net.cn

75年代spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.search.spring-doc.cadn.net.cn

搜索服务暂停。spring-doc.cadn.net.cn

75年代spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.analyticsspring-doc.cadn.net.cn

分析服务暂停。spring-doc.cadn.net.cn

75年代spring-doc.cadn.net.cn

spring.couchbase.env.timeouts.management.spring-doc.cadn.net.cn

管理运营暂停。spring-doc.cadn.net.cn

75年代spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.*前缀用于配置CouchbaseSearchVectorStore.spring-doc.cadn.net.cn

属性 描述 默认值

spring.ai.vectorstore.couchbase.index-namespring-doc.cadn.net.cn

用于存储向量的索引名称。spring-doc.cadn.net.cn

Spring-ai-文档索引spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.bucket-namespring-doc.cadn.net.cn

这是Couchbase桶的名称,是示波器的母体。spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.scope-namespring-doc.cadn.net.cn

Couchbase 示波器的名称,是该系列的母体。搜索查询将在作用域上下文中执行。spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.collection-namespring-doc.cadn.net.cn

库奇基地收藏的名称用于存放文件。spring-doc.cadn.net.cn

默认值spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.dimensionsspring-doc.cadn.net.cn

向量中的维数。spring-doc.cadn.net.cn

1536spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.similarityspring-doc.cadn.net.cn

相似度函数需要使用。spring-doc.cadn.net.cn

dot_productspring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.optimizationspring-doc.cadn.net.cn

相似度函数需要使用。spring-doc.cadn.net.cn

召回spring-doc.cadn.net.cn

spring.ai.vectorstore.couchbase.initialize-schemaspring-doc.cadn.net.cn

是否初始化所需的模式spring-doc.cadn.net.cn

falsespring-doc.cadn.net.cn

以下相似度函数可用:spring-doc.cadn.net.cn

可用的索引优化如下:spring-doc.cadn.net.cn

关于每个方法的更多细节请参见Couchbase关于向量搜索的文档。spring-doc.cadn.net.cn

元数据过滤

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

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

vectorStore.similaritySearch(
    SearchRequest.defaults()
    .query("The World")
    .topK(TOP_K)
    .filterExpression("author in ['john', 'jill'] && article_type == 'blog'"));

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

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(SearchRequest.defaults()
    .query("The World")
    .topK(TOP_K)
    .filterExpression(b.and(
        b.in("author","john", "jill"),
        b.eq("article_type", "blog")).build()));
这些滤波表达式被转换为等效的 Couchbase SQL++ Filter。

手动配置

你可以手动配置 Couchbase 向量存储,而不是使用 Spring Boot 的自动配置。为此你需要添加Spring-ai-Couchbase-store致你的项目:spring-doc.cadn.net.cn

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

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

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

创建一个Couchbase豆。 阅读 Couchbase 文档,获取关于自定义集群实例配置的更深入信息。spring-doc.cadn.net.cn

@Bean
public Cluster cluster() {
    return Cluster.connect("couchbase://localhost", "username", "password");
}

然后创建CouchbaseSearchVectorStore使用构建图纸的豆子:spring-doc.cadn.net.cn

@Bean
public VectorStore couchbaseSearchVectorStore(Cluster cluster,
                                              EmbeddingModel embeddingModel,
                                              Boolean initializeSchema) {
    return CouchbaseSearchVectorStore
            .builder(cluster, embeddingModel)
            .bucketName("test")
            .scopeName("test")
            .collectionName("test")
            .initializeSchema(initializeSchema)
            .build();
}

// This can be any EmbeddingModel implementation.
@Bean
public EmbeddingModel embeddingModel() {
    return new OpenAiEmbeddingModel(OpenAiApi.builder().apiKey(this.openaiKey).build());
}

局限性

必须激活以下Couchbase服务:Data、Query、Index、Search。虽然数据和搜索可能足够,但查询和索引是支持完整元数据过滤机制的必要条件。