Amazon Bedrock ナレッジベース
このセクションでは、事前設定されたナレッジベースに対して類似性検索を実行するために、Amazon Bedrock ナレッジベース VectorStore を設定する手順について説明します。
Amazon Bedrock 知識ベース は、基盤モデルをデータソースに接続できるフルマネージド RAG(Retrieval-Augmented Generation)機能です。他のベクトルストアとは異なり、Bedrock ナレッジベースはドキュメントの取り込み、チャンク化、埋め込みを内部で処理します。
前提条件
Bedrock へのアクセスが有効になっている AWS アカウント
少なくとも 1 つのデータソースが同期された構成済みの Bedrock ナレッジベース
AWS 認証情報が設定されました (via environment variables, AWS config file, or IAM role)
このベクトルストアは読み取り専用です。ドキュメントは、 |
自動構成
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 ナレッジベースベクトルストアをカスタマイズできます。
| プロパティ | 説明 | デフォルト値 |
|---|---|---|
| クエリ対象の Bedrock ナレッジベースの ID | - |
| Bedrock サービス用の AWS リージョン | SDK デフォルト |
| 返される結果の数 | 5 |
| 最小類似度スコア (0.0 1.0 へ) | 0.0 |
| 検索タイプ: セマンティックまたはハイブリッド | null (KB default) |
| Bedrock 再ランキングモデルの ARN | null (無効) |
検索タイプ
Bedrock ナレッジベースは、2 種類の検索型をサポートしています。
SEMANTIC- ベクトル類似性検索のみ (default)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:0Available reranking models:
Amazon Rerank 1.0 - Available in us-west-2, ap-northeast-1, ca-central-1, eu-central-1
Cohere Rerank 3.5 - Requires AWS Marketplace subscription
メタデータフィルタリング
You can leverage the generic, portable metadata filters with the Bedrock Knowledge Base store.
For example, you can use the text expression language:
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());Supported Filter Operators
| Spring AI | Bedrock | 説明 |
|---|---|---|
EQ | 等しい | 次の値に等しい |
NE | notEquals | 次の値に等しくない |
GT | greaterThan | 次の値より大きい |
GTE | greaterThanOrEquals | 以上 |
LT | lessThan | 次の値より小さい |
LTE | lessThanOrEquals | 次の値以下 |
入力 | 内 | Value in list |
NIN | notIn | Value not in list |
AND | andAll | Logical AND |
OR | orAll | Logical OR |
NOT | (negation) | Logical NOT |
Metadata filtering requires documents in your Knowledge Base to have metadata attributes. For S3 data sources, create |
手動構成
If you prefer to configure the vector store manually, you can do so by creating the beans directly.
Add this dependency to your project:
<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();
}Then use the vector store:
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"));
}ネイティブクライアントへのアクセス
The Bedrock Knowledge Base Vector Store provides access to the underlying native client through the getNativeClient() method:
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
}制限
読み取り専用 : The
add()anddelete()methods throwUnsupportedOperationException. Documents are managed through the Knowledge Base’s data source sync process.HYBRID search : Only available with OpenSearch-based vector stores.
Reranking availability : Model availability varies by AWS region.