【生成AI】Amazon Aurora をベクトルデータベースとして RAG システムを構築してみた
この記事はNHN テコラス Advent Calendar 2024 の 4日目の記事です。
はじめに
こんにちは、フクナガです。
AWS で RAG 環境を構築する際、様々なサービスをベクトルデータベースとして活用可能です。
今回は、「Amazon Aurora」をベクトルデータベースとして活用する方法やメリットをご紹介していきます。
構築時に結構ハマったポイントも多いので、この記事を見た方がスムーズな構築ができるようになるととてもうれしいです!
構築するアーキテクチャ
今回構築するアーキテクチャを図示します。
今回の構成は、Amazon Bedrock のナレッジベースという機能を利用して構築していきます。
なぜ、Amazon Aurora なのか
読んでいただいている方の中には、「なぜわざわざ Amazon Aurora を採用するのか」と思っている方も多いかもしれません。
私が現状で考えている、Amazon Bedrock のナレッジベースとして Amazon Aurora をベクトルデータベースに採用するメリットをご紹介しておきたいと思います。
1. コストの柔軟なコントロール
ベクトルデータベースとして利用できるもので、他に選択肢に上がるのが「Amazon Kendra」「Amazon OpenSearch Serverless」だと思います。
これらは非常に優れたサービスではあるのですが、料金面でコントロールが難しい側面があります。
※この辺りは別記事で詳細にご紹介できればと思っております。
Amazon Aurora は、インスタンスサイズと稼働時間、ストレージサイズ、I/Oに基づいた課金となっています。
この中でも、インスタンスサイズや稼働時間を上手にコントロールすることでかなりのコストカットが実現できます。
例)業務時間以外は稼働停止、小規模利用を見越して低スペックなインスタンスサイズを選定など
コスト面がどうしても気になるよ、という方はしっかりと検証を実施したうえで、Amazon Aurora を利用する選択をするのはありだと思います。
細かな料金体系についてはのちの章でご説明します。
2. 既存リソースの流用が可能
後続で手順をご紹介しますが、ざっくりいうと「既存で利用している Amazon Aurora を流用することができる」場合があります。
もちろん、既存ワークロードへの影響は検討しなければなりませんが、 RAG システム専用で新たな環境を構築したくない場合には、大きなメリットになりうるかもしれません。
※繰り返しになりますが、複数ワークロードでの併用はパフォーマンス面での慎重な検討が必要です。
Amazon Bedrock のナレッジベースとは
本記事では、Amazon Aurora を使った RAG システムを構築するのに、
ナレッジベースという機能を利用します。
ナレッジベースでは、下記のデータソースを利用することが可能です。
Amazon S3 の場合は、S3 にドキュメントを格納し、マネージメントコンソールを数クリックするのみで RAG システムが作れてしまうため、非常に簡単に構築ができます。
対応しているドキュメントの形式については、下記を参照してください。
参考:Amazon Bedrock ナレッジベースデータの前提条件
Amazon Aurora を利用する際のコストについて
Amazon Aurora は利用しているインスタンスの稼働時間に比例した従量課金とストレージ料金、I/O に対する課金があります。
比較対象として上がりそうな「Amazon OpenSearch Serverless」の最低単位(1OCU)のメモリが 6GiB でしたので、それを下回らない「db.t4g.large」(2vCPU、8GiB)を前提に試算してみます。
種別 | 料金 |
---|---|
インスタンス(db.t4g.large) | 0.146 USD / 1 時間 |
ストレージ | 0.10 USD / 1 GB・1か月 |
I/O 料金 | 0.20 USD / 100万リクエスト |
ストレージ、I/O 料金については利用されるケースによると思いますので、いったんインスタンスのみ月額ランニングコストを試算してみます。
月額:105.12 USD(日本円で約1.6万円)
※日本円は、2024年11月時点のレートで計算しております。
格納するデータ量によっても大きくコストが変わるので、ユースケースは慎重に検討する必要がありますね。
注意点
Amazon Aurora を利用する場合、付随してネットワークリソース(VPCやゲートウェイなど)や踏み台サーバーなど様々なリソースが必要になります。
そういったリソースがすでにある環境をお使いの場合はトータルのコストが安価になる可能性がございますが、「Amazon Auroraが一番安い選択肢だ」と考えず、とりうる選択肢の一つとご認識ください。
Amazon Aurora で RAG を実装する
こちらの手順を参考に実装していきます!
Amazon Bedrock のナレッジベースとしての Aurora PostgreSQL の使用
1. 検証用の環境を構築する(EC2、Aurora)
AWS公式ドキュメントに従い、下記の構成を作成します。
本記事のメイントピックとは離れますので、説明は割愛します。
出典:Aurora PostgreSQL DB クラスターの作成と接続
踏み台 EC2 サーバーから Amazon Aurora のライターインスタンスに接続ができたら、次の作業に進みます。
※CloudFormationで環境を構築する方向け
ご紹介したドキュメントでは CloudFormation での構築手順も紹介されています。
ただし、2024年11月15日時点で利用する場合にはいくつか注意点がありますので、体験記としてまとめておきます。
(私がハマった個所、という読み替えでもよいです)
- アベイラビリティゾーンは、使おうが使うまいが2つ指定する必要がある
- 構築されるEC2は、後続の手順を実行可能なOSではないため手動構築手順通りに構築する必要がある
ちなみに、構築されるEC2はAutoScalingグループから起動しているので、削除する際はそちらの希望台数/最低台数を0にする必要があります。 - 「Manage DB master user password with AWS Secrets Manager」というパラメータがあると認識すること
自分が指定したパスワードでログインできない事象が発生したのですが、このパラメーターを認識していないことによる凡ミスが原因でした。
どちらが正解というより、「どちらにしたかを認識していること」が大事です - Amazon Aurora のマイナーバージョンアップが必要
指定された条件が「14.9 以降のバージョン」と記載されているのに対し、「14.7」バージョンが起動されます。(盲点でした)
落ち着いてアップグレードしてあげましょう。
2. ナレッジベースとして利用するためのスキーマやテーブルを構築する
実施することとしては、pgvectorのインストール、スキーマの作成、テーブルの作成、ロールの作成(対象スキーマへの許可を付与)、インデックスの作成(任意)となります。
Amazon Auroraへ接続後に下記コマンドを順に実施してください。
(1) pgvectorのセットアップ
CREATE EXTENSION IF NOT EXISTS vector;
下記コマンドでインストールされているバージョンを確認する。
SELECT extversion FROM pg_extension WHERE extname='vector';
(2) スキーマと対応するロールの作成
※下記コマンドの「’password’」の部分は任意の値を入力すること
CREATE SCHEMA bedrock_integration; CREATE ROLE bedrock_user WITH PASSWORD 'password' LOGIN; GRANT ALL ON SCHEMA bedrock_integration to bedrock_user;
(3) テーブルとインデックスの作成
CREATE TABLE bedrock_integration.bedrock_kb (id uuid PRIMARY KEY, embedding vector(1024), chunks text, metadata json); CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops); CREATE INDEX ON bedrock_integration.bedrock_kb USING hnsw (embedding vector_cosine_ops) WITH (ef_construction=256);
参考:Amazon Bedrock のナレッジベースとしての Aurora PostgreSQL の使用
このようにスキーマやテーブルが構築されていれば、この手順は完了です。
※キャプチャ画像は一部マスクしております
3. Amazon Aurora の認証を AWS Secrets Manager での認証に変更する
これまた構築していて引っかかったのですが、ナレッジベースで Amazon Aurora に接続するには AWS Secrets Manager で認証情報を管理している必要があります。
私は、ユーザー/パスワードを個別で設定していたので、それを AWS Secrets Manager に変更していきたいと思います。
他用途で使っている Amazon Aurora を流用する場合は要注意ですね!
認証情報管理の変更は、Amazon Aurora の変更メニューから実施することが可能です。
暗号化キーは任意のものを作成し、指定してください(ここでもハマりました)
ステータスが利用可能となったので、接続を試してみます。
※AWS Secrets Managerについてわからない方はこちらをご参照ください。
AWS Secrets Manager から取得したパスワードでの接続ができました。
4. Amazon Aurora クラスターの「RDS Data API」を有効化する
これも、作業していてハマったポイントです。
HTTP Endpointでの接続をするために、有効化している必要があるようですね。難しい。
対象の Amazon Aurora インスタンスを選択し、「接続とセキュリティ」メニューの最下部「RDS Data API」のところから「RDS Data APIの有効化」を押下し、有効化します。
さあ、準備が整いましたので、ナレッジベースを作っていこうと思います!!
5. ナレッジベースを作成する
(1) Amazon Bedrock コンソールへ遷移し、「ナレッジベース」を押下
(2) 「ナレッジベースを作成」を押下
(3) 下記を入力、選択し、「次へ」を押下する
ナレッジベース名:任意の値
データソースを選択:Amazon S3
(4) 下記を入力、選択し、「次へ」を押下する
データソース名:任意の値
S3 URI:RAGのデータソースにしたいファイルもしくはパスを入力する
※「S3を参照」から実施するのが、最も確実です
改めて、データソースとして利用できるファイルの種類を確認しておきましょう!
Amazon Bedrock ナレッジベースデータの前提条件
(5) 下記を入力、選択し、「次へ」を押下する
埋め込みモデル:今回は「Titan Text Embeddings v2」を選択
ベクトルストアの作成方法:「作成したベクトルストアを選択」
ベクトルストアを選択します:Amazon Aurora
Amazon Aurora DB クラスター ARN:Amazon Aurora クラスターの ARN を入力します
データベース名:作成したデータベース名を入力
テーブル名:bedrock_integration.bedrock_kb
シークレット ARN:認証情報を保有している AWS Secrets Manager の ARN を入力します
シークレット用のカスタマーマネージド KMSキー:シークレットを暗号化した場合にKMSキーを入力します
ベクトルフィールド名:embedding
テキストフィールド名:chunks
Bedrock マネージドメタデータフィールド:metadata
プライマリキー:id
(6) 記載内容を確認後、「ナレッジベースを作成」を押下
6. データソースの同期
同期が完了したら、やっとRAGを試すことができます!
7. テストを実施
(1) モデルを選択
今回は、Claude 3.5 Sonnet を選びました!
モデルについての詳細はこちらをご参照ください!!
【生成AI】Claude 3.5 SonnetがAmazon Bedrockで利用可能になりました!
(2) プロンプトを入力し、出力を確認する
今回の検証では、データソースとして弊社の「AWS 生成AI活用支援」のWebページをHTMLとしてアップロードしています。
弊社の生成AI活用が何をしてくれるのか、しっかり答えてくれていますね!
まとめ
今回の記事では、Amazon Aurora をベクトルデータベースとして RAG システムを構築する手順やメリットをご紹介しました。
生成 AI を活用するうえで、自身のユースケースに合ったシステムを構築するために、どういった手段があるのかを知ることが非常に大切です。
この分野はアップデートがかなり激しいので、またアップデートがあったらブログを書こうかなと思います!
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterインフラエンジニア歴5年のフクナガです。2024 Japan AWS Top Engineers / Google Cloud Partner Top Engineer 2025 に選出されました! 生成 AI 多めで発信していますが、CI/CDやIaCへの関心も高いです。休日はベースを弾いてます。
Recommends
こちらもおすすめ
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16