此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3spring-doc.cadn.net.cn

Amazon Bedrock 知识库

本节将引导您设置 Amazon Bedrock 知识库 VectorStore,以便针对预配置的知识库执行相似性搜索。spring-doc.cadn.net.cn

Amazon Bedrock 知识库是一项完全托管的 RAG(检索增强生成)功能,允许您将基础模型连接到您的数据源。与其他向量存储不同,Bedrock 知识库在内部处理文档摄入、分块和嵌入。spring-doc.cadn.net.cn

前置条件

  1. 已启用 Bedrock 访问权限的 AWS 账户spring-doc.cadn.net.cn

  2. 已配置的 Bedrock 知识库,且至少同步了一个数据源spring-doc.cadn.net.cn

  3. 已配置 AWS 凭证(通过环境变量、AWS 配置文件或 IAM 角色)spring-doc.cadn.net.cn

此向量存储为只读模式。文档通过知识库的数据源同步流程进行管理,而非通过 add()delete() 方法。spring-doc.cadn.net.cn

Auto-configuration

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

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

或添加到您的 Gradle build.gradle 构建文件中:spring-doc.cadn.net.cn

dependencies {
    implementation 'org.springframework.ai:spring-ai-starter-vector-store-bedrock-knowledgebase'
}
请参阅依赖管理部分,将Spring AI BOM添加到您的构建文件中。

与其他向量存储不同,Bedrock 知识库不需要 EmbeddingModel Bean。知识库在数据源同步期间内部处理嵌入。spring-doc.cadn.net.cn

要连接到您的知识库,请通过 Spring Boot 的 application.properties 提供知识库 ID:spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id=YOUR_KNOWLEDGE_BASE_ID
spring.ai.vectorstore.bedrock-knowledge-base.region=us-east-1

或通过环境变量:spring-doc.cadn.net.cn

export SPRING_AI_VECTORSTORE_BEDROCK_KNOWLEDGE_BASE_KNOWLEDGE_BASE_ID=YOUR_KNOWLEDGE_BASE_ID

现在您可以在应用程序中自动装配向量存储:spring-doc.cadn.net.cn

@Autowired VectorStore vectorStore;

// ...

// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("What is the return policy?")
        .topK(5)
        .build());

配置属性

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

<property> </property> <description> </description> 默认值

spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-idspring-doc.cadn.net.cn

要查询的 Bedrock 知识库 IDspring-doc.cadn.net.cn

-spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.regionspring-doc.cadn.net.cn

Bedrock 服务的 AWS 区域spring-doc.cadn.net.cn

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

spring.ai.vectorstore.bedrock-knowledge-base.top-kspring-doc.cadn.net.cn

返回的结果数量spring-doc.cadn.net.cn

5spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.similarity-thresholdspring-doc.cadn.net.cn

最小相似度得分(0.0 到 1.0)spring-doc.cadn.net.cn

0.0spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.search-typespring-doc.cadn.net.cn

搜索类型:语义或混合spring-doc.cadn.net.cn

空(默认 KB)spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arnspring-doc.cadn.net.cn

Bedrock 重排序模型的 ARNspring-doc.cadn.net.cn

空(已禁用)spring-doc.cadn.net.cn

搜索类型

Bedrock 知识库支持两种搜索类型:spring-doc.cadn.net.cn

混合搜索仅适用于基于 OpenSearch 的向量存储。S3 Vectors、Aurora PostgreSQL 和其他类型的向量存储仅支持语义搜索。spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.search-type=HYBRID

重排序

您可以通过启用 Bedrock 重排序模型来提升搜索相关性:spring-doc.cadn.net.cn

spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arn=arn:aws:bedrock:us-west-2::foundation-model/amazon.rerank-v1:0

可用的重排序模型:spring-doc.cadn.net.cn

元数据过滤

您可以利用 Bedrock 知识库存储中通用且可移植的元数据过滤器spring-doc.cadn.net.cn

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

vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("travel policy")
        .topK(5)
        .similarityThreshold(0.5)
        .filterExpression("department == 'HR' && year >= 2024")
        .build());

或以编程方式使用 Filter.Expression DSL:spring-doc.cadn.net.cn

FilterExpressionBuilder b = new FilterExpressionBuilder();

vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("travel policy")
        .topK(5)
        .filterExpression(b.and(
            b.eq("department", "HR"),
            b.gte("year", 2024)).build())
        .build());

手动配置

如果您更喜欢手动配置向量存储,可以通过直接创建 bean 来实现。spring-doc.cadn.net.cn

将此依赖项添加到您的项目中:spring-doc.cadn.net.cn

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bedrock-knowledgebase-store</artifactId>
</dependency>
请参阅依赖管理部分,将Spring AI BOM添加到您的构建文件中。

示例代码

@Bean
public BedrockAgentRuntimeClient bedrockAgentRuntimeClient() {
    return BedrockAgentRuntimeClient.builder()
        .region(Region.US_EAST_1)
        .build();
}

@Bean
public VectorStore vectorStore(BedrockAgentRuntimeClient client) {
    return BedrockKnowledgeBaseVectorStore.builder(client, "YOUR_KNOWLEDGE_BASE_ID")
        .topK(10)
        .similarityThreshold(0.5)
        .searchType(SearchType.SEMANTIC)
        .build();
}

然后使用向量存储:spring-doc.cadn.net.cn

List<Document> results = vectorStore.similaritySearch(
    SearchRequest.builder()
        .query("What are the company holidays?")
        .topK(3)
        .build());

for (Document doc : results) {
    System.out.println("Content: " + doc.getText());
    System.out.println("Score: " + doc.getScore());
    System.out.println("Source: " + doc.getMetadata().get("source"));
}

访问原生客户端

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

BedrockKnowledgeBaseVectorStore vectorStore = context.getBean(BedrockKnowledgeBaseVectorStore.class);
Optional<BedrockAgentRuntimeClient> nativeClient = vectorStore.getNativeClient();

if (nativeClient.isPresent()) {
    BedrockAgentRuntimeClient client = nativeClient.get();
    // Use the native client for Bedrock-specific operations
}

限制