Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Amazon Bedrock Knowledge Bases のベクトルDBに Aurora Serverless v2 を利用する

こんにちは。大塚です。

今回は、Amazon Bedrock Knowledge Basesを使い、ベクトルDBとしてAmazon Aurora PostgreSQLの利用を試したいと思います。
昨年の12月にはBedrock Knowledge BasesのベクトルDBとしてAurora PostgreSQLをクイック作成できるようになり、セットアップ手順が大幅に簡素化されました。
このクイック作成機能も活用してセットアップをしてみます。

aws.amazon.com

1. ベクトルストアとして Aurora PostgreSQL をセットアップする

事前準備

今回はRAG用の外部データソースとしてS3を利用します。
後ほど、LLMの回答にS3に置かれた資料が参照されているかを確認します。

Knowledge Basesの作成

AWSマネジメントコンソール上で、Bedrockのページへ行き、GUI操作だけで簡単にKnowledge Basesを作成できます。

「Knowledge Base with vector store」をクリックすると、Knowledge Bases作成画面に遷移します。

「ステップ2 データソースを設定」では、事前準備で作成したS3のURIを指定します。
そして「ステップ3 埋め込みモデルを選択し、ベクトルDBを設定する」が本題です。
ベクトルDBの選択肢に「Amazon Aurora PostgresSQL Serverless」という新しい項目が増えているのでこちらを選択しましょう!
※ベクトルDBの選択肢はリージョンによって異なりますが、この記事では東京リージョンで試しています。

あとは「次へ」を押下し作成内容を確認して完了です。
GUI操作だけで済むので直感的で簡単ですね!

RDSのコンソールから作成されたデータベースを確認できます。

DBテーブルは下記のように作成されていました。

Bedrock_Knowledge_Base_Cluster=> \d bedrock_knowledge_base
        Table "bedrock_integration.bedrock_knowledge_base"
  Column   |        Type         | Collation | Nullable | Default
-----------+---------------------+-----------+----------+---------
 id        | uuid                |           | not null |
 embedding | public.vector(1536) |           |          |
 chunks    | text                |           |          |
 metadata  | jsonb               |           |          |
Indexes:
    "bedrock_knowledge_base_pkey" PRIMARY KEY, btree (id)
    "bedrock_knowledge_base_embedding_idx" hnsw (embedding public.vector_l2_ops)

Knowledge Basesのテスト

作成したKnowledge Basesを選択すると「ナレッジベースをテスト」という画面があります。
ここでLLMに質問をして想定した回答が返ってくるかテストします。
今回は「アジャイル開発のメリットはなんですか?」という質問をしてみました。
想定通りに事前準備でS3に配置しておいた資料を参照した回答が返ってきたのでうまく動いていそうです。


2. OpenSearch Severless と比較する

ベクトルDBとして利用される代表サービスとしてOpenSearch Serverlessがあります。
ここでAurora Severless v2を利用する場合との差分を整理しておきます。

機能

ベクトルDBとしてAurora PostgreSQLを利用する場合、検索タイプはセマンティック検索のみサポートされています。

一方、OpenSearch Serverlessを利用する場合は、ハイブリッド検索とセマンティック検索を選択できます。

  • セマンティック検索: 単なるキーワード一致ではなく意味的に関連する情報を検索する
  • ハイブリッド検索: キーワードによる検索とセマンティック検索を組み合わせて検索する

検索の機能性としては、OpenSearch Serverlessの方がすぐれていますね。
キーワードによる検索も組み込みたい場合はOpenSearch Severlessを選択しましょう。

コスト

OpenSearch Serverlessのコンピューティング料金は、利用していないときでも時間単位の課金が発生します。
米国東部(バージニア北部)だと1ユニットあたり0.24USD/hです。
ドキュメントによると少なくとも2ユニットについて課金されると記載されているので、0.24USD/h * 720h * 2 = 345USD/月程度かかります。

一方でAurora Severless v2では、0.12USDと安価で、0ユニットへのスケーリングにも対応しています。
そのため、利用していないときのコストを抑えることができます。

aws.amazon.com

先ほどクイック作成したAurora PostgreSQLインスタンス設定を確認すると、想定通り0ユニットへのスケーリングに対応していました。

CloudWatchでユニット使用率(ACU)を見ると、利用していないときに0ユニットへスケーリングされていることを確認できました。

3. 検索速度を確認する

最後に、ドキュメント数を増やした場合の検索速度やACUを確認してみます。
データソースには、BBC News Summary | Kaggleを使用し、約9,000件のデータをS3に配置しました。

「1. Bedrock Knowledge BasesのベクトルDBとしてAurora PostgreSQLをセットアップする」と同様にLLMへ質問してみました。
結果はドキュメント数が少なかったときと同様に数十ミリ秒で回答が返ってきました。
今回利用したデータセット程度であれば検索速度も特に問題なさそうです。

ACUを確認するとドキュメント投入時のACUが30%程度(16(最大スケール時のユニット数) * 0.3 = 5ユニット)、LLMによる回答生成時のACUが15%程度(16 * 0.15 = 2.5ユニット)でした。

ベクトルDBのReadLatencyは0.01秒に収まっていたのでストレスなく使えそうです。

4. まとめ

今回は、Bedrock Knowledge BasesでベクトルDBにAurora Serverless v2の利用を試しました。
クイック作成機能もあり、数クリックのGUI操作だけで簡単にベクトルDBを用意できました。
利用していないときのコストを抑えたいという要求も手間なく実現できそうです。

最後に

Bedrock Knowledge Basesを削除するだけでは、ベクトルDBなどのクイック作成した他のリソースは削除されません。
不要であれば手動で削除することを忘れないようにしましょう。

Acroquest Technologyでは、キャリア採用を行っています。

  • Azure OpenAI/Amazon Bedrock等を使った生成AIソリューションの開発
  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • マイクロサービス、DevOps、最新のOSSクラウドサービスを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

www.wantedly.com