View a markdown version of this page

マネージドナレッジベースのクエリを設定およびカスタマイズする - Amazon Bedrock

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

マネージドナレッジベースのクエリを設定およびカスタマイズする

取得を設定およびカスタマイズして、結果の関連性をさらに向上させることができます。例えば、ドキュメントのメタデータフィールド/属性にフィルターを適用して、最近更新されたドキュメント (最終更新日が新しいドキュメント) を利用できます。

注記

以下の設定はすべて、非構造化データソースにのみ適用されます。

コンソールまたは API でのこれらの設定の詳細については、以下の該当するトピックを選択してください。

ナレッジベースをクエリすると、Amazon Bedrock はデフォルトで最大 5 件の結果を返します。各結果はソースのチャンクに対応しています。

注記

このパラメータにより、返す結果の最大数が設定されるため、レスポンスの結果の実際の数は指定された numberOfResults 値よりも少なくなる可能性があります。チャンキング戦略に階層チャンキングを設定している場合、numberOfResults パラメータはナレッジベースが取得する子チャンクの数にマッピングされます。同じ親チャンクを共有する子チャンクは、最終レスポンスで親チャンクに置き換えられるため、返される結果の数がリクエストされた量より少なくなる可能性があります。

返される結果の最大数を変更するには、使用する手段のタブを選択し、手順に従ってください。

Console

ナレッジベースのクエリを実行してデータを取得する」のコンソールの手順に従ってください。[設定] ペインで、[ソースチャンク] セクションを展開し、返すソースチャンクの最大数を入力します。

API

Retrieve または RetrieveAndGenerate リクエストを行うときに、retrievalConfiguration フィールドを含め、KnowledgeBaseRetrievalConfiguration オブジェクトを指定してください。このフィールドの位置を確認するには、API リファレンスで Retrieve リクエストと RetrieveAndGenerate リクエストの本文を参照してください。

次の JSON オブジェクトは、検索結果の最大数を設定するために、KnowledgeBaseRetrievalConfiguration オブジェクトに最低限必要なフィールドを示しています。

"retrievalConfiguration": { "vectorSearchConfiguration": { "numberOfResults": number } }

返される検索結果の最大数 (許容値の範囲については、KnowledgeBaseRetrievalConfigurationnumberOfResults フィールドを参照) を numberOfResults フィールドに指定してください。

ドキュメントのフィールド/属性にフィルターを適用して、レスポンスの関連性をさらに高めることができます。データソースには、フィルタリングするドキュメントメタデータ属性/フィールドを含めることができ、埋め込みに含めるフィールドを指定できます。

マネージドナレッジベースの考慮事項

マネージドナレッジベースでメタデータフィルタリングを使用する場合:

  • startsWith および stringContainsメタデータフィルターはサポートされていません。代わりに、equalsgreaterThanlessThanin、または notIn演算子を使用します。

  • 範囲演算子 (greaterThangreaterThanOrEqualslessThan、および lessThanOrEquals) は、数値または日時値のいずれかを受け入れます。日時をフィルタリングするには、値を ISO-8601 オフセット日時形式の文字列として指定します。完全なオフセット形式を使用します。例: 2026-03-02T19:02:18Z。範囲演算子は、マネージドナレッジベースでのみ日時文字列値をサポートします。

  • カスタムナレッジベースの場合、プレフィックスが のメタデータフィールドx-amz-bedrockは サービスによって予約されます。フルマネージドナレッジベースの場合、予約済みメタデータフィールドはアンダースコアプレフィックス (、 など_data_source_id) _source_uriを使用します。どちらのナレッジベースタイプでも、予約済みメタデータフィールドを上書きすることはできません。

例えば、「epoch_modification_time」は、ドキュメントが最後に更新された 1970 年 1 月 1 日 (UTC) からの秒数で表されます。「epoch_modification_time」にフィルターを適用して、その値が特定の数より大きい最新のデータだけを取得できます。そうして取得した最新のドキュメントをクエリで使用できます。

ナレッジベースのクエリ時にフィルターを使用するには、ナレッジベースが次の要件を満たしていることを確認してください。

  • データソースコネクタを設定する場合、ほとんどのコネクタはドキュメントの主要なメタデータフィールドをクローリングします。Amazon S3 バケットをデータソースとして使用する場合は、バケットに関連付けられているファイルまたはドキュメントの fileName.extension.metadata.json が少なくとも 1 つ含まれている必要があります。メタデータファイルの設定の詳細については、「接続設定」の「ドキュメントメタデータフィールド」を参照してください。

  • ナレッジベースのベクトルインデックスが Amazon OpenSearch Serverless ベクトルストアにある場合は、ベクトルインデックスが faiss エンジンで設定されていることを確認してください。ベクトルインデックスが nmslib エンジンで設定されている場合は、次のいずれかを行う必要があります。

  • ナレッジベースにより、S3 ベクトルバケットでベクトルインデックスが使用されている場合、startsWith および stringContainsフィルターを使用することはできません。

  • Amazon Aurora データベースクラスター内の既存のベクトルインデックスにメタデータを追加する場合は、カスタムメタデータ列のフィールド名を指定して、すべてのメタデータを 1 つの列に保存することをお勧めします。データインジェスト中、この列はデータソースからメタデータファイル内のすべての情報を入力するために使用されます。このフィールドを指定することにした場合は、この列にインデックスを作成する必要があります。

    • コンソールで新しいナレッジベースを作成し、Amazon Bedrock を使用して Amazon Aurora データベースを設定すると、自動的に 1 つの列が作成され、メタデータファイルからの情報が入力されます。

    • ベクトルストアに別のベクトルインデックスを作成することを選択した場合、メタデータファイルからの情報を保存するカスタムメタデータフィールド名を指定する必要があります。このフィールド名を指定しない場合は、ファイル内のメタデータ属性ごとに列を作成し、データ型 (テキスト、数値、またはブール値) を指定する必要があります。例えば、属性 genre がデータソースに存在する場合は、genre という名前の列を追加し、text をデータ型として指定します。インジェスト中、これらの別個の列には対応する属性値が入力されます。

データソースに PDF ドキュメントがあり、ベクトルストアに Amazon OpenSearch Serverless または Amazon Aurora を使用している場合: Amazon Bedrock ナレッジベースはドキュメントページ番号を生成し、x-amz-bedrock-kb-document-page-number と呼ばれるメタデータフィールド/属性に保存します。ドキュメントのチャンキングを選択しない場合、メタデータフィールドに保存されているページ番号はサポートされない点に注意してください。

クエリ時に結果をフィルタリングするには、次のフィルタリング演算子を使用できます。

フィルタリング演算子
オペレーター コンソール API フィルター名 サポートされている属性データ型 フィルタリング結果
Equals (等しい) = equals 文字列、数値、ブール値 属性が指定した値と一致する
Not equals (等しくない) != notEquals 文字列、数値、ブール値 属性が指定した値と一致しない
Greater than (より大きい) > greaterThan 数値 属性が指定した値より大きい
Greater than or equals (以上) >= greaterThanOrEquals 数値 属性が指定した値以上
Less than (より小さい) < lessThan 数値 属性が指定した値より小さい
Less than or equals (以下) <= lessThanOrEquals 数値 属性が指定した値以下
In (中にある) : in 文字列リスト 属性が指定したリスト内にある (現時点では、Amazon OpenSearch Serverless および Neptune Analytics GraphRAG ベクトルストアで最適にサポートされています)
Not in (中にない) !: notIn 文字列リスト 属性が指定したリスト内にない (現時点では、Amazon OpenSearch Serverless および Neptune Analytics GraphRAG ベクトルストアで最適にサポートされています)
を含む文字列 利用不可 stringContains string 属性は文字列にする必要があります。属性名はキーと一致しており、その値は、部分文字列として指定した値を含む文字列、または部分文字列として指定した値を含むメンバーを含むリストです (現時点では、Amazon OpenSearch Serverless ベクトルストアで最適にサポートされています。Neptune Analytics GraphRAG ベクトルストアでは文字列バリアントがサポートされますが、このフィルターのリストバリアントはサポートされません)。
を含むリスト 利用不可 listContains string 属性は文字列リストにする必要があります。属性名はキーと一致しており、その値はメンバーの 1 つとして指定した値を含むリストです (現時点では、Amazon OpenSearch Serverless ベクトルストアで最適にサポートされています)。

フィルタリング演算子を組み合わせる場合は、次の論理演算子を使用できます。

論理演算子
演算子 コンソール API フィルターフィールド名 フィルタリング結果
And and andAll 結果がグループ内のすべてのフィルタリング式を満たす
Or or orAll 結果がグループ内のフィルタリング式の少なくとも 1 つを満たす

メタデータを使用して結果をフィルタリングする方法については、使用する手段のタブを選択し、手順に従ってください。

Console

ナレッジベースのクエリを実行してデータを取得する」のコンソールの手順に従ってください。[設定] ペインを開くと、[フィルター] セクションが表示されます。次の手順では、さまざまなユースケースについて説明します。

  • フィルターを追加するには、メタデータ属性、フィルタリング演算子、値をボックスに入力し、フィルタリング式を作成します。式の各部を空白で区切ってください。Enter キーを押すと、フィルターが追加されます。

    使用できるフィルタリング演算子のリストについては、上記の「フィルタリング演算子」の表を参照してください。また、メタデータ属性の後に空白を追加すると、フィルタリング演算子のリストが表示されます。

    注記

    文字列は引用符で囲む必要があります。

    例えば、ソースドキュメントからの結果をフィルタリングして、genre メタデータ属性の値が "entertainment" であるものを取得するには、フィルターとして genre = "entertainment" を追加します。

    フィルターを 1 つ追加します。
  • 別のフィルターを追加するには、別のフィルタリング式をボックスに入力し、Enter キーを押します。グループには最大 5 つのフィルターを追加できます。

    別のフィルターを追加します。
  • デフォルトでは、指定したすべてのフィルタリング式を満たすクエリ結果が返されます。フィルタリング式の少なくとも 1 つを満たす結果を返すには、2 つのフィルタリングオペレーションの間にある [AND] ドロップダウンメニューを選択し、[OR] を選択します。

    フィルター間で論理演算子を変更します。
  • 異なる論理演算子を組み合わせるには、[+ グループを追加] を選択してフィルターグループを追加します。新しいグループにフィルタリング式を入力します。最大 5 個のフィルターグループを追加できます。

    フィルターグループを追加して、さまざまな論理演算子を組み合わせます。
  • すべてのフィルタリンググループ間で使用される論理演算子を変更するには、2 つのフィルターグループの間にある [AND] ドロップダウンメニューを選択し、[OR] を選択します。

    フィルターグループ間で論理演算子を変更します。
  • フィルターを編集するには、フィルターを選択し、フィルタリングオペレーションを変更して [適用] を選択します。

    フィルターを編集します。
  • フィルターグループを削除するには、グループの横にあるごみ箱アイコン ( Trash can icon representing a delete action. ) を選択します。フィルターを削除するには、フィルターの横にある削除アイコン ( Close or cancel icon represented by an "X" symbol. ) を選択します。

    フィルターまたはフィルターグループを削除します。

次の図は、フィルターの設定例を示しています。2018 以降に執筆された "entertainment" ジャンルのドキュメントを全部と、ジャンルが "cooking" または "sports" で作成者が "C" で始まるドキュメントを返します。

フィルターの設定例。
API

Retrieve または RetrieveAndGenerate リクエストを行うときに、retrievalConfiguration フィールドを含め、KnowledgeBaseRetrievalConfiguration オブジェクトを指定してください。このフィールドの位置を確認するには、API リファレンスで Retrieve リクエストと RetrieveAndGenerate リクエストの本文を参照してください。

次の JSON オブジェクトは、さまざまなユースケースに応じたフィルターを設定するために、KnowledgeBaseRetrievalConfiguration オブジェクトに最低限必要なフィールドを示しています。

  1. フィルタリング演算子を 1 つ使用します (上記の「フィルタリング演算子」の表を参照)。

    "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] } } } }
  2. 論理演算子 (上記の「論理演算子」の表を参照) を使用して、最大 5 つまで組み合わせます。

    "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ] } } }
  3. 論理演算子を使用して最大 5 つのフィルタリング演算子を 1 つのフィルターグループに結合し、2 番目の論理演算子を使用してそのフィルターグループを別のフィルタリング演算子と結合します。

    "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ], "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] } ] } } }
  4. 最大 5 つのフィルターグループを別の論理演算子に組み込むことで結合します。作成できる埋め込みのレベルは 1 つです。

    "retrievalConfiguration": { "vectorSearchConfiguration": { "filter": { "andAll | orAll": [ "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ], "andAll | orAll": [ "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, "<filter-type>": { "key": "string", "value": "string" | number | boolean | ["string", "string", ...] }, ... ] ] } } }

次の表では、使用できるフィルタータイプを説明しています。

フィールド サポートされているデータ型 フィルタリング結果
equals 文字列、数値、ブール値 属性が指定した値と一致する
notEquals 文字列、数値、ブール値 属性が指定した値と一致しない
greaterThan 数値 属性が指定した値より大きい
greaterThanOrEquals 数値 属性が指定した値以上
lessThan 数値 属性が指定した値より小さい
lessThanOrEquals 数値 属性が指定した値以下
in 文字列のリスト 属性が指定したリストに内にある
notIn 文字列のリスト 属性が指定したリスト内にない
startsWith string 属性が指定した文字列で始まる (Amazon OpenSearch Serverless ベクトルストアでのみサポート)

フィルタータイプを組み合わせるには、次のいずれかの論理演算子を使用できます。

フィールド マッピング対象 フィルタリング結果
andAll 最大 5 つのフィルタータイプのリスト 結果がグループ内のすべてのフィルタリング式を満たす
orAll 最大 5 つのフィルタータイプのリスト 結果がグループ内のフィルタリング式の少なくとも 1 つを満たす

例については、「Send a query and include filters (Retrieve)」および「Send a query and include filters (RetrieveAndGenerate)」を参照してください。

ユースケースと責任ある AI ポリシーに応じて、ナレッジベースに保護対策を実装できます。さまざまなユースケースに合わせた複数のガードレールを作成し、複数のリクエストやレスポンスの条件に適用することで、一貫したユーザーエクスペリエンスを提供し、ナレッジベース全体で安全性の統制を標準化できます。望ましくないトピックを禁じる拒否トピックや、モデルの入力とレスポンスで有害なコンテンツをブロックするコンテンツフィルターを設定できます。詳細については、「Amazon Bedrock ガードレールを使用して有害なコンテンツを検出してフィルタリングする」を参照してください。

注記

現時点では、Claude 3 Sonnet と Haiku では、ナレッジベースのコンテキストグラウンディングでガードレールを使用することはできません。

一般的なプロンプトエンジニアリングのガイドラインについては、「プロンプトエンジニアリングの概念」を参照してください。

任意の方法のタブを選択し、その手順に従います。

Console

ナレッジベースのクエリを実行してデータを取得する」のコンソールの手順に従ってください。テストウィンドウで、[回答を生成] をオンにします。次に、[設定] ペインで、[ガードレール] セクションを展開します。

  1. [ガードレール] セクションで、ガードレールの [名前][バージョン] を選択します。選択したガードレールとバージョンの詳細を確認するには、[表示] を選択します。

    または、[ガードレール] リンクを選択して、新規作成することもできます。

  2. 編集が終了したら、[変更の保存] を選択します。保存せずに終了するには、[変更を破棄] を選択します。

API

RetrieveAndGenerate リクエストを行う際に、そのリクエストでガードレールを使用するには、generationConfiguration 内に guardrailConfiguration フィールドを含めます。このフィールドの位置を確認するには、API リファレンスで RetrieveAndGenerate リクエストの本文を参照してください。

次の JSON オブジェクトは、guardrailConfiguration を設定するために、GenerationConfiguration に最低限必要なフィールドを示しています。

"generationConfiguration": { "guardrailConfiguration": { "guardrailId": "string", "guardrailVersion": "string" } }

選択したガードレールの guardrailIdguardrailVersion を指定してください。

リランカーモデルを使用して、ナレッジベースクエリの結果を再ランク付けできます。「ナレッジベースのクエリを実行してデータを取得する」のコンソールの手順に従ってください。[設定] ペインを開いたら、[再ランキング] セクションを展開します。リランカーモデルを選択し、必要に応じてアクセス許可を更新して、追加のオプションを変更します。プロンプトを入力し、[実行] を選択して、再ランク付け後に結果をテストします。