見出し画像

AWS Bedrock ナレッジベースは S3 Vectors で低コスト化可能! 〜ナレッジベース作成から3D空間で質問に答えるまで〜

こんにちはメタバーズのエンジニアです。

今回はAWSで低コストなRAG(Retrieval-Augmented Generation)を実現する方法をご紹介します。Threedive AI とAPI連携して実際に呼び出すところまで試してみます。


先にまとめから

  • AWS Bedrock ナレッジベースを標準設定で使用すると結構月額コストが発生する

  • 2025年後半に一般公開となった S3 Vectors を使うと低コストでベクトルストアを運用できる

  • ナレッジベースの API は独自仕様

従来の課題:ベクトルストアのコスト

これまでナレッジベースを運用する際、ネックとなるのはベクトルストアの月額コストでした。

代表的な選択肢は Amazon OpenSearch Serverless ですが、最低でも数百ドル以上/月がかかってしまいます。

解決策:Amazon S3 Vectors

2025年後半に一般公開となった Amazon S3 Vectors は、この課題を解決する画期的なサービスです。

特徴としては、やはり低コストであることです。S3ストレージベースのため、データ保存コストが大幅に削減できます。保存サイズにもよりますが、呼び出さなければほぼ料金はかかりません。これは何もしなくても料金がかかる OpenSearch Serverless との大きな差です。

ただOpenSearch に比べ、レスポンス速度やクエリの結果件数などスペックに制限があったのですが、それも12月にGAになるタイミングで大幅に機能向上が図られました。

  • インデックスサイズ 最大 5,000 万ベクトル → 最大 20 億ベクトル

  • バケットサイズ 最大 20 兆ベクトル

  • クエリ結果数 最大 30 件 → 最大 100 件 

  • レイテンシ 1 秒未満 → 高頻度クエリで 100ms 以下

情報を検索したり生成AIに質問したりする際には、この変更点に気をつけておく必要があります。

ナレッジベースを構築

以上の情報を踏まえて、Bedrock のダッシュボードから S3 Vectors を利用したナレッジベースを作成します。

AWSのページにサインインし、Amazon Bedrock > ナレッジベース > 作成 と進みます。

データソースには Amazon S3 を選択します。(それ以外だとあとで Amazon S3 Vectors が選べません)

データソースの選択肢

ベクトルストアには Amazon S3 Vectors を選択します。

ベクトルストア選択画面

この2点2だけ注意し、あとは指示に従って進めば、S3 をソースフォルダとして、S3 Vectors をベクトルストアとするナレッジベースの完成です。

外部からの利用方法

作成したナレッジベースは API経由で外部から呼び出すことが可能です。

ただし、注意すべきポイントとして、提供されるAPIセットは OpenAI API 形式には対応していません。それゆえ各ツールからすんなり使えるわけではなく、専用の実装が必要となります。

代表的なAPIは以下の2つです

  • retrieve … RAG結果の取得のみ

  • retrieve_and_generate … 取得と応答生成(設定したLLMによる後処理)

以下の公式ライブラリが存在します。

node.js … @aws-sdk/client-bedrock-agent-runtime ライブラリを使用する

python … bedrock-agent-runtime ライブラリを使用する

Threedive AI で呼び出してみる

Threedive AI は3D空間に配置したAIアバターと会話できるサービスです。このサービスは既にナレッジベース呼び出しに対応していますので、これを使って試してみます。

今回はサンプルとして、Threedive AI のドキュメントページをテキスト化したものをS3に配置、ナレッジベース化しました。

ナレッジベース作成が完了したら、AWS側で以下の情報を取得します。

  • ナレッジベースID

  • Access Key ID

  • Secret Access Key

📝専用のIAM Userを作成するのがおすすめです。
最低限必要な権限は以下のとおりです。

arn:aws:bedrock:*:*:knowledge-base/【ナレッジベースID】に対して
- bedrock:GetKnowledgeBase
- bedrock:Retrieve
- bedrock:RetrieveAndGenerate

モデルに対して
- bedrock:InvokeModel
- bedrock:InvokeModelWithResponseStream

Threedive AIを開き、メニューから 開発者用メニュー > 生成AIプロバイダ設定 を選択します。

Threedive AI メニュー

生成AIプロバイダを編集ダイアログで以下の項目を設定します。

  • 名前 … 任意

  • プロバイダ種別 … Amazon Bedrock (RAG/Knowledge Base)

  • Knowledge Base ID

  • AWS Access Key ID

  • AWS Secret Access Key

生成AIプロバイダ設定画面

次に AIモデル設定を開き、AIモデルを追加します。

Threedive AI メニュー

生成AIプロバイダとして先程作成した設定を選択します。ここでプレビューも出来ます。

AIモデル設定

📝 カスタムの生成AIプロバイダの場合、クレジットは消費しません

ちゃんと Threedive AI の説明が返ってくるのが確認できました!

RAG成功🎉

更に、新規スペースを作成し、モデルを追加します。

モデル配置
モデル編集

スペースに配置できました。

待ち構えてます
スペシャリストでした

いかがだったでしょうか?

決して簡単とは言えないステップではありますが、ランニングコストを抑えたRAGの作成、呼び出しが実現できました。

現在、Threedive AIでは更に RAG を簡単に利用できる機能を開発中です。ご期待ください!

いいなと思ったら応援しよう!