はじめに
本記事ではAurora(PostgreSQL)をナレッジベースのベクトルストアとして使用する方法についてご紹介します。
Knowledge Bases for Amazon BedrockでPostgreを採用するケース
Knowledge Bases(以下ナレッジベース)では、以下のベクトルストアが選択可能です。
- Amazon OpenSearch Serverless
- Amazon Aurora
- Pinecone
- Redis Enterprise Cloud
- MongoDB Atlas
デフォルトではAmazon OpenSearch Serverlessが選択されますが、コスト面を考慮してAmazon AuroraやPineconeなどの他の選択肢を検討する場合もあります。
以下は、2024年9月9日時点(バージニア北部リージョン)のAmazon OpenSearch Serverlessの料金表です。
リソースタイプ | 料金 |
---|---|
OpenSearch Compute Unit (OCU) – インデックス作成 | USD 0.24 1 OCU 1 時間あたり |
OpenSearch Compute Unit (OCU) – 検索とクエリ | USD 0.24 1 OCU 1 時間あたり |
マネージドストレージ | USD 0.024 1 ヶ月あたりの GB あたり |
Amazon Aurora (PostgreSQL) のコスト
Amazon Aurora(PostgreSQL)の場合、最小構成ではOpenSearchよりもコストが抑えられる可能性があります。
Aurora PostgreSQLの料金例は以下の通りです(2024年9月14日時点、バージニア北部リージョン)。
コンポーネント | Aurora Standard | Aurora I/O 最適化 |
---|---|---|
ストレージ料金 | USD 0.10/毎月の GB あたり | USD 0.225/毎月の GB あたり |
I/O 料金 | USD 0.20/100万リクエスト | 利用料に含まれる |
Data API コスト
リクエスト数 (月間) | 価格 (100万リクエスト毎) |
---|---|
最初の 10 億件のリクエスト | USD 0.35 |
10 億件を超えるリクエスト | USD 0.20 |
ただし、これは最小構成時の例であり、利用状況に応じてコストは変動します。
場合によっては、PineconeやRedisなど他のベクトルデータベースのほうがコスト効率が良い場合もあるため、用途に応じた比較が必要です。
それでは、Auroraを作成し、ナレッジベースに設定していきます。
Aurora(PostgreSQL)の作成
まずはAuroraのPostgreSQLを作成します。(普通のAurora or Serverless v2 どちらも選択可能)
ここでRDS Data APIを有効化することを忘れないでください。
Aurora DBクラスターの作成が完了したら、PostgreSQLの中に入ってpgvector拡張機能をインストールします。
CREATE EXTENSION IF NOT EXISTS vector;
ナレッジベース用のテーブルを作成します。
CREATE SCHEMA test_schema;
Bedrock がデータベースのクエリに使用できるロールを作成します。
パスワードは文字列のため、シングルクォーテーションで囲う必要があるので注意です。
CREATE ROLE bedrock_user WITH PASSWORD '任意のパスワード' LOGIN
スキーマに対する権限を付与します。
GRANT ALL ON SCHEMA test_schema to bedrock_user;
以下のカラムを持つテーブルを作成します。
もしS3に配置したファイルにメタデータを付与していた場合は、そのメタデータのカラムを持ったカラムも作成します。(ここではtest_dataを追加しています)
vectorの値に関してはこの後、作成するナレッジベースに合わせる必要があります。
CREATE TABLE test_schema.bedrock_kb (id uuid PRIMARY KEY, embedding vector(1024), chunks text, metadata json, test_data text);
コサイン演算子を使用してインデックスを作成します。
CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops);
またはpgvector 0.6.0
以降であれば、以下コマンドでインデックスを作成します。
CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops) WITH (ef_construction=256);
ナレッジベース作成
Bedrockのナレッジベースから、作成したPostgreSQLの内容を入力してぽちぽち作成するだけ。
同期する
ナレッジベースが作成できたら、データソースを選択して同期を開始します。
同期が完了したら完成です。
※ナレッジベースの同期は止められないので注意
おわり
Amazon Aurora (PostgreSQL) は、OpenSearchに比べてコストを抑える可能性がありますが、用途や構成に依存します。ベクトルデータベースの選択は、使用シナリオと機能要件を考慮した上で判断することが重要です。詳細な料金や最新情報については、公式ドキュメントをご参照ください。
おまけ
当たり前ですが、Auroraを止めているとレスポンスは取得できません。