1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Bedrock でナレッジベース-メタデータフィルタの構築メモ

Last updated at Posted at 2025-09-02

AWS Bedrock でナレッジベース-メタデータフィルタを2025年8月当時に構築した際、
詰まった点や後学の知見のために、メモ書きとして作成した記事になります。

  • 注意点
  1. 利用しているAWSインスタンスは自作ではなく、他で検証中利用しているインスタンスの流用です
  2. 内容確認にはzennやQiita等の各種記事や書籍のサンプル、AmazonQの回答を参考している
  3. 実ロジックの実装や環境構築にはCopilotのAgentモードを利用している
    そのため、誤認や最適解でない場合や、最初からAWS環境を構築していれば前提となる知識の場合もあります。

不備にはコメントを頂けると幸いです。

やったこと

  1. AWS S3を用いたナレッジベースの構築→メタベースフィルタの適用
    (複数の文章ファイルから、関係性のあるファイルに限定して文章内容を抽出する)
  2. pythonからboto3を経由した呼出ロジックの実装

知見と詳細

Amazon OpenSearch Serverless と Amazon Aurora の利用差異

image.png

→ 「抽出対象のナレッジを事前に絞り込み」のため、「SQLのWHERE句」との類似を「matadata.jsonの記述」で実行できるとのこと

  • Amazon OpenSearch Serverless : matadata.json ファイルの記述から事前フィルタを実行
  • Amazon Aurora : 以下2種類で事前フィルタが可能
    1. ナレッジベース作成/同期にて、Aurora DB に custommetadata カラムが作成される(matadata.json の内容が保持される)
    2. Aurora and RDS から、 任意カラムを追加することでフィルタ利用が可能(値は同期で連携されない為、自前でupdateが必要)

ナレッジベースのベクトル情報の確認方法

Amazon Aurora でナレッジベースを作成している場合に、クエリエディタから確認可能。(OpenSearch Serverless では内部を確認できないが、おそらく同様に保持している)

  • chunks カラム:文書情報を文字情報として分割して保持
  • embedding カラム:chunks をベクトル化した多次元情報

※ 確認手順

  1. Amazon Bedrock > ナレッジベース から、対象のナレッジベースに対して、以下4情報をメモ
    - Amazon Aurora DB クラスター ARN
    - 認証情報シークレット ARN
    - データベース名
    - テーブル名

  2. Aurora and RDS > データベース から、「Amazon Aurora DB クラスター ARN」に一致する リージョン別クラスターを確認

  3. Aurora and RDS > クエリエディタ から、以下の情報を入力して接続
    - データベースインスタンスまたはクラスター : 2 で確認したクラスタの値を選択
    - データベースユーザー名 : Secrets Manager ARN と接続する
    - Secrets manager ARN : 1 でメモした 認証情報シークレット ARN
    - データベースの名前を入力 : 1 でメモした データベース名
    image.png

  4. select * from <1でmemoしたテーブル名> にて、ナレッジベースのDB情報を取得(カラム追加などもalter table で可)


推論プロファイル

ナレッジベースのテスト の際、「オンデマンド」「推論プロファイル」と存在しており、「推論プロファイル」は操作中のリージョンで利用できないため、他リージョンから流用しているモデルとなる

image.png

Amazon Bedrock > Cross-region inference にて、「推論プロファイルのモデル」が表示されているため、プログラムからの呼出時、「modelArn」で指定する値はこちらを用いることとなる。

image.png


"Sorry, I am unable to assist you with this request." エラーの発生

image.png

フィルタ の指定内容が誤っている場合に発生する
→ プログラム呼出ではメソッド引数の jsonに フィルタ要素の保持が必要なので、エンドユーザの任意入力では頻発が懸念される

{"knowledgeBaseConfiguration" : 
    {"retrievalConfiguration" :
      {"vectorSearchConfiguration" :
        {"filter" :{***} }}}}

retrive と retrive_and_generate

プログラムから「boto3.client(***) 」からの呼出すメソッドについての差異

  • retrive : ナレッジベースの呼出だけを実行する
    • response["retrievalResults"]["score"] にて、評価スコア(質問内容に検索結果が一致しているか)を取得できる
  • retrive_and_generate : ナレッジベース呼出の内容を、改めてモデルで要約する(以下で両方を取得できる)
    • response["output"]["text"] → ナレッジベースの呼出結果
    • response["output"] → 要約結果

ベクトル検索の中身

Aurora の場合、パラメータグループを作成することで、検索の途中経過(実行SQLでスコア値など)を確認できる
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/USER_LogAccess.Concepts.PostgreSQL.Query_Logging.html#USER_LogAccess.Concepts.PostgreSQL.Query_Logging.mitigate-risk


SEMANTICとHYBRID

  • SEMANTIC : ベクトル検索だけを実行する(ユーザプロンプトをベクトル化して検索する)
  • HYBRID : ベクトル検索と入力文字の両方で検索する(ユーザプロンプトが単語/文脈解釈が難しい場合、こちらがよい)

利用を終えた aurora serverless の削除

aurora の場合、ナレッジベース作成で「Aurora and RDS」にDBクラスタ/インスタンスを作成しているため、自動作成されているサービスの削除も必要となる

ナレッジベースの スタック名 で、CloudFormation の対象スタックを削除することで、DBインスタンスなども削除される

image.png


関連資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?