|
此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3! |
Amazon Bedrock 知识库
本节将引导您设置 Amazon Bedrock 知识库 VectorStore,以便针对预配置的知识库执行相似性搜索。
Amazon Bedrock 知识库是一项完全托管的 RAG(检索增强生成)功能,允许您将基础模型连接到您的数据源。与其他向量存储不同,Bedrock 知识库在内部处理文档摄入、分块和嵌入。
前置条件
-
已启用 Bedrock 访问权限的 AWS 账户
-
已配置的 Bedrock 知识库,且至少同步了一个数据源
-
已配置 AWS 凭证(通过环境变量、AWS 配置文件或 IAM 角色)
|
此向量存储为只读模式。文档通过知识库的数据源同步流程进行管理,而非通过 |
Auto-configuration
Spring AI 为 Bedrock 知识库向量存储提供 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 知识库不需要 |
要连接到您的知识库,请通过 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 知识库向量存储。
| <property> </property> | <description> </description> | 默认值 |
|---|---|---|
|
要查询的 Bedrock 知识库 ID |
- |
|
Bedrock 服务的 AWS 区域 |
SDK 默认 |
|
返回的结果数量 |
5 |
|
最小相似度得分(0.0 到 1.0) |
0.0 |
|
搜索类型:语义或混合 |
空(默认 KB) |
|
Bedrock 重排序模型的 ARN |
空(已禁用) |
搜索类型
Bedrock 知识库支持两种搜索类型:
-
SEMANTIC- 仅向量相似度搜索(默认) -
HYBRID- 将语义搜索与关键词搜索相结合
|
混合搜索仅适用于基于 OpenSearch 的向量存储。S3 Vectors、Aurora PostgreSQL 和其他类型的向量存储仅支持语义搜索。 |
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());
手动配置
如果您更喜欢手动配置向量存储,可以通过直接创建 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。文档通过知识库的数据源同步过程进行管理。 -
混合搜索: 仅支持基于 OpenSearch 的向量存储。
-
重新排序可用性: 模型可用性因 AWS 区域而异。
支持的数据源
Bedrock 知识库支持多种数据源类型。源位置包含在文档元数据中:
| 数据源 | 元数据字段 | 例举 |
|---|---|---|
S3 |
|
|
Confluence |
|
|
SharePoint |
|
|
Salesforce |
|
|
网络爬虫 |
|
|
自定义 |
|
自定义文档 ID |