Amazon Bedrock ナレッジベース

このセクションでは、事前設定されたナレッジベースに対して類似性検索を実行するために、Amazon Bedrock ナレッジベース VectorStore を設定する手順について説明します。

Amazon Bedrock 知識ベース は、基盤モデルをデータソースに接続できるフルマネージド RAG(Retrieval-Augmented Generation)機能です。他のベクトルストアとは異なり、Bedrock ナレッジベースはドキュメントの取り込み、チャンク化、埋め込みを内部で処理します。

前提条件

  1. Bedrock へのアクセスが有効になっている AWS アカウント

  2. 少なくとも 1 つのデータソースが同期された構成済みの Bedrock ナレッジベース

  3. AWS 認証情報が設定されました (via environment variables, AWS config file, or IAM role)

このベクトルストアは読み取り専用です。ドキュメントは、add() または delete() 方式ではなく、ナレッジベースのデータソース同期プロセスを通じて管理されます。

自動構成

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 の部品表をビルドファイルに追加してください。

他のベクトルストアとは異なり、Bedrock ナレッジベースは EmbeddingModel Bean を必要としません。ナレッジベースは、データソースの同期中に埋め込み処理を内部的に行います。

ナレッジベースに接続するには、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 ナレッジベースベクトルストアをカスタマイズできます。

プロパティ 説明 デフォルト値

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

検索タイプ: セマンティックまたはハイブリッド

null (KB default)

spring.ai.vectorstore.bedrock-knowledge-base.reranking-model-arn

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:0

利用可能な再ランキングモデル:

  • Amazon が 1.0 を再ランク付け - us-west-2、ap-northeast-1、ca-central-1、eu-central-1 で利用可能

  • Cohere は 3.5 に再ランク付けされます - AWS Marketplace のサブスクリプションが必要です

メタデータフィルタリング

You can leverage the generic, portable metadata filters with the Bedrock Knowledge Base store.

例: テキスト表現言語を使用できます。

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 説明

EQ

等しい

次の値に等しい

NE

notEquals

次の値に等しくない

GT

greaterThan

次の値より大きい

GTE

以上

以上

LT

lessThan

次の値より小さい

LTE

以下

次の値以下

入力

内

リスト内の値

NIN

notIn

リストにない値

AND

andAll

論理 AND

OR

orAll

論理 OR

NOT

(否定)

論理否定

メタデータフィルタリングを行うには、ナレッジベース内のドキュメントにメタデータ属性が必要です。S3 データソースの場合は、ドキュメントと同じ場所に .metadata.json ファイルを作成してください。

手動構成

ベクトルストアを手動で設定したい場合は、Bean を直接作成することで設定できます。

プロジェクトに以下の依存関係を追加してください。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-bedrock-knowledgebase-store</artifactId>
</dependency>
依存関係管理のセクションを参照して、Spring AI の部品表をビルドファイルに追加してください。

サンプルコード

@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 : Only available with OpenSearch-based vector stores.

  • Reranking availability : Model availability varies by AWS region.

Supported Data Sources

Bedrock Knowledge Base supports multiple data source types. The source location is included in document metadata:

データソース Metadata Field サンプル

S3

source

s3://bucket/path/document.pdf

Confluence

source

confluence.example.com/page/123 (英語)

SharePoint

source

sharepoint.example.com/doc/456 (英語)

Salesforce

source

salesforce.example.com/record/789 (英語)

Web Crawler

source

example.com/page (英語)

カスタム

source

Custom document ID