跳到主要内容
版本:2.0.1

Amazon Bedrock Knowledge Base

QWen 3.8 中英对照 Amazon Bedrock Knowledge Base

本部分将引导您配置 Amazon Bedrock Knowledge Base VectorStore,以针对预先配置的 Knowledge Base 执行相似性搜索。

Amazon Bedrock Knowledge Bases 是一项完全托管的 RAG(Retrieval-Augmented Generation)能力,允许您将基础模型连接到您的数据源。与其他向量存储不同,Bedrock Knowledge Base 在内部处理文档摄取、分块和嵌入。

前提条件​

  1. 已启用 Bedrock 访问权限的 AWS 账户

  2. 已配置且至少同步了一个数据源的 Bedrock Knowledge Base

  3. 已配置的 AWS 凭证(通过环境变量、AWS 配置文件或 IAM 角色)

备注

此向量存储为只读。文档通过知识库的数据源同步流程进行管理,而非通过 add() 或 delete() 方法。

自动配置​

Spring AI 为 Bedrock Knowledge Base Vector Store 提供了 Spring Boot 自动配置功能。若要启用此功能,请在项目的 Maven pom.xml 文件中添加以下依赖项:

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

或添加到你的 Gradle build.gradle 构建文件中:

dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-bedrock-knowledgebase'
}
提示

请参考 依赖管理 部分,将 Spring AI BOM 添加到您的构建文件中。

备注

与其他向量存储不同,Bedrock 知识库(Bedrock Knowledge Base)不需要 EmbeddingModel Bean。知识库会在数据源同步过程中在内部处理嵌入(embeddings)。

要通过 Spring Boot 的 application.properties 提供知识库 ID 以连接到你的知识库:

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

或通过环境变量:

export SPRING_AI_VECTORSTORE_BEDROCK_KNOWLEDGE_BASE_KNOWLEDGE_BASE_ID=YOUR_KNOWLEDGE_BASE_ID

现在,你可以在应用程序中自动装配向量数据库:

@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 Knowledge Base 向量存储。

属性描述默认值
spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id要查询的 Bedrock Knowledge Base 的 ID-
spring.ai.vectorstore.bedrock-knowledge-base.regionBedrock 服务的 AWS regionSDK 默认值
spring.ai.vectorstore.bedrock-knowledge-base.top-k返回的结果数量5
spring.ai.vectorstore.bedrock-knowledge-base.similarity-threshold最低相似度分数 (0.0 到 1.0)0.0
spring.ai.vectorstore.bedrock-knowledge-base.search-type搜索类型: SEMANTIC 或 HYBRIDnull (KB 默认值)
spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arnBedrock 重排序模型的 ARNnull (禁用)

搜索类型​

Bedrock Knowledge Base 支持两种搜索类型:

  • SEMANTIC - 仅进行向量相似度搜索(默认值)

  • HYBRID - 结合语义搜索与关键词搜索

备注

混合搜索(HYBRID search)仅在基于 OpenSearch 的向量数据库中可用。S3 Vectors、Aurora PostgreSQL 以及其他向量数据库类型仅支持语义搜索(SEMANTIC search)。

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

重排序​

你可以启用 Bedrock 重排序模型来提升搜索相关性:

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

可用的重排序模型:

  • Amazon Rerank 1.0 - 在 us-west-2、ap-northeast-1、ca-central-1、eu-central-1 可用

  • Cohere Rerank 3.5 - 需要 AWS Marketplace 订阅

元数据过滤​

你可以利用通用、可移植的 元数据过滤器 来配合 Bedrock 知识库存储使用。

例如,你可以使用文本表达式语言:

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

或通过使用 Filter.Expression DSL 以编程方式实现:

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

支持的筛选运算符​

Spring AIBedrock描述
EQequals等于
NEnotEquals不等于
GTgreaterThan大于
GTEgreaterThanOrEquals大于或等于
LTlessThan小于
LTElessThanOrEquals小于或等于
INin值在列表中
NINnotIn值不在列表中
ANDandAll逻辑 AND
ORorAll逻辑 OR
NOT(negation)逻辑 NOT
备注

元数据过滤要求知识库中的文档具备元数据属性。对于 S3 数据源,请在文档旁边创建 .metadata.json 文件。

手动配置​

如果您更喜欢手动配置向量存储(vector store),可以通过直接创建 Bean 来实现。

将此依赖项添加到您的项目中:

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

然后使用向量存储:

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() 方法提供对底层原生客户端的访问:

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
}

限制​

  • 只读:add() 和 delete() 方法会抛出 UnsupportedOperationException。文档通过知识库的数据源同步过程进行管理。

  • 混合搜索(HYBRID search):仅适用于基于 OpenSearch 的向量存储。

  • 重排序(Reranking)可用性:模型可用性因 AWS 区域而异。

支持的数据源​

Bedrock Knowledge Base 支持多种数据源类型。源位置包含在文档元数据中:

数据源元数据字段示例
S3sources3://bucket/path/document.pdf
Confluencesource[confluence.example.com/page/123](https://confluence.example.com/page/123)
SharePointsource[sharepoint.example.com/doc/456](https://sharepoint.example.com/doc/456)
Salesforcesource[salesforce.example.com/record/789](https://salesforce.example.com/record/789)
Web Crawlersource[example.com/page](https://example.com/page)
自定义source自定义文档 ID