主题
Amazon Bedrock 知识库
本节引导你设置 Amazon Bedrock 知识库 VectorStore,以针对一个预先配置好的知识库执行相似度搜索。
Amazon Bedrock 知识库 是一个全托管的 RAG(检索增强生成)能力,让你能把基础模型连接到你的数据源。与其他向量库不同,Bedrock 知识库在内部处理文档摄取、分块和嵌入。
前置条件
- 一个已启用 Bedrock 访问的 AWS 账户
- 一个已配置、且至少有一个数据源完成同步的 Bedrock 知识库
- 已配置的 AWS 凭据(通过环境变量、AWS 配置文件或 IAM 角色)
NOTE
该向量库是只读的。文档通过知识库的数据源同步流程管理,而非通过 add() 或 delete() 方法。
自动配置
Spring AI 为 Bedrock 知识库向量库提供 Spring Boot 自动配置。 要启用它,请将以下依赖添加到你的项目的 Maven pom.xml 文件:
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-bedrock-knowledgebase</artifactId>
</dependency>或添加到你的 Gradle build.gradle 构建文件:
groovy
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-bedrock-knowledgebase'
}TIP
参见 依赖管理 一节,把 Spring AI BOM 添加到你的构建文件。
NOTE
与其他向量库不同,Bedrock 知识库不需要 EmbeddingModel bean。知识库会在数据源同步期间在内部处理嵌入。
要连接到你的知识库,通过 Spring Boot 的 application.properties 提供知识库 ID:
properties
spring.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id=YOUR_KNOWLEDGE_BASE_ID
spring.ai.vectorstore.bedrock-knowledge-base.region=us-east-1或通过环境变量:
bash
export SPRING_AI_VECTORSTORE_BEDROCK_KNOWLEDGE_BASE_KNOWLEDGE_BASE_ID=YOUR_KNOWLEDGE_BASE_ID现在你可以在应用中自动装配该向量库:
java
@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.ai.vectorstore.bedrock-knowledge-base.knowledge-base-id |
| 要查询的 Bedrock 知识库 ID |
| - |
spring.ai.vectorstore.bedrock-knowledge-base.region |
| Bedrock 服务的 AWS 区域 |
| SDK 默认 |
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 或 HYBRID |
| null(KB 默认) |
spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arn |
| Bedrock 重排序模型的 ARN |
| null(禁用) |
搜索类型
Bedrock 知识库支持两种搜索类型:
SEMANTIC- 仅向量相似度搜索(默认)HYBRID- 将语义搜索与关键词搜索相结合
NOTE
HYBRID 搜索仅对基于 OpenSearch 的向量库可用。S3 Vectors、Aurora PostgreSQL 及其他向量库类型只支持 SEMANTIC 搜索。
properties
spring.ai.vectorstore.bedrock-knowledge-base.search-type=HYBRID重排序
你可以通过启用一个 Bedrock 重排序模型来提升搜索相关性:
properties
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 知识库向量库上利用通用、可移植的元数据过滤器。
例如,你可以使用文本表达式语言:
java
vectorStore.similaritySearch(
SearchRequest.builder()
.query("travel policy")
.topK(5)
.similarityThreshold(0.5)
.filterExpression("department == 'HR' && year >= 2024")
.build());或以编程方式使用 Filter.Expression DSL:
java
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 AI |
|---|
| Bedrock |
| 描述 |
| EQ |
| equals |
| 等于 |
| NE |
| notEquals |
| 不等于 |
| GT |
| greaterThan |
| 大于 |
| GTE |
| greaterThanOrEquals |
| 大于等于 |
| LT |
| lessThan |
| 小于 |
| LTE |
| lessThanOrEquals |
| 小于等于 |
| IN |
| in |
| 值在列表中 |
| NIN |
| notIn |
| 值不在列表中 |
| AND |
| andAll |
| 逻辑与 |
| OR |
| orAll |
| 逻辑或 |
| NOT |
| (取反) |
| 逻辑非 |
NOTE
元数据过滤要求你知识库中的文档带有元数据属性。对于 S3 数据源,请在文档旁创建 .metadata.json 文件。
手动配置
如果你更喜欢手动配置向量库,可以直接创建这些 bean 来做。
把此依赖添加到你的项目:
xml
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bedrock-knowledgebase-store</artifactId>
</dependency>TIP
参见 依赖管理 一节,把 Spring AI BOM 添加到你的构建文件。
示例代码
java
@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();
}然后使用该向量库:
java
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() 方法提供对底层原生客户端的访问:
java
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 搜索:仅对基于 OpenSearch 的向量库可用。
- 重排序可用性:模型可用性因 AWS 区域而异。
受支持的数据源
Bedrock 知识库支持多种数据源类型。源位置会包含在文档元数据中:
| 数据源 |
|---|
| 元数据字段 |
| 示例 |
| S3 |
source |
s3://bucket/path/document.pdf |
| Confluence |
source |
https://confluence.example.com/page/123 |
| SharePoint |
source |
https://sharepoint.example.com/doc/456 |
| Salesforce |
source |
https://salesforce.example.com/record/789 |
| Web Crawler |
source |
https://example.com/page |
| 自定义 |
source |
| 自定义文档 ID |