AWS Bedrock の ナレッジベースを試してみた(利用開始編)
AWS Bedrock のナレッジベースについて
AWS Bedrock はAWS の生成系AIのサービスですが、昨年開催されたAWS re:Invent 2023 にてナレッジベースの機能が追加されました。
ナレッジベースは検索拡張生成(RAG)のマネージドサービスとなります。
検索拡張生成(RAG)について
本来、生成AIは利用している基盤モデルが学習しているデータを利用して回答を生成しますが、自社独自データ等、基盤モデルでは学習し得ないデータを利用したいケースがあると思います。
その際に利用する技術が検索拡張生成(RAG)です。
RAGの仕組みとしては、事前に独自データを準備したうえで、基盤モデルに問い合わせる前に質問に関連するデータを検索、検索結果を含めて基盤モデルに問い合わせることで、基盤モデルが学習していない内容を含めた回答を得られる様になります。
ナレッジベースを利用しない場合のRAG実装について
ナレッジベースを利用していない場合には以下を独自実装する必要があります。
データソース
S3等
ベクトル検索エンジン(もしくはセマンティック検索エンジン)
ベクトル検索エンジン:OpenSearch 等
セマンティック検索エンジン:Amazon Kendra 等
検索/基盤モデル問い合わせ用アプリ
プロンプトからベクトル検索に対する検索
検索結果を含めた形でLLMへ問い合わせ
Lambda等で独自実装
上記の様に検索エンジンや検索用アプリを独自で実装しなければならず、少なからず手間が生じます。
今回ナレッジベースがリリースされたことにより実装の手間があったRAGの実装が簡単に行える様になりました。
ナレッジベースの構成
ナレッジベースは以下の機能を提供しています。
機能と概要
データソース
S3を利用する形で提供
ベクトル検索エンジン
Amazon OpenSearch Serverlessを利用作成する機能を提供
作成済ベクトル検索エンジンを利用することも可
ベクトル検索機能 - Retrieve API
入力プロンプトをベクトル検索し、ベクトルエンジンに問い合わせる機能をAPIで提供。
ベクトル検索+問い合わせ機能 - RetrieveAndGenerate API
ベクトル検索とベクトル検索結果をプロンプトに加えて基盤モデルに問い合わせる機能
ナレッジベースの料金/リージョンについて
ナレッジベース自体の料金は無料となります。
ただし、ナレッジベースを利用時に必要な以下のリソース料金はかかります。
S3料金(データソース料金)
ベクトル検索エンジン用リソース料金(Amazon OpenSearch Serverless料金等)
ベクトル検索時の基盤モデル利用料金
後述しますが、ベクトル検索時には基盤モデルが利用されています
2024/03/12現在、ナレッジベースは以下のリージョンで利用可能です。
米国東部 (バージニア北部)
米国西部 (オレゴン)
ナレッジベースの利用方法について
Bedrock画面からナレッジベースをクリック
ナレッジベースはBedrock画面から利用可能です。
Bedrock → ナレッジベース をクリックし、ナレッジベースを作成をクリックします。
ナレッジベースの詳細を入力
ナレッジベースの詳細をクリックすると以下の入力が求められます。
ナレッジベースの詳細
任意の値を入力
ナレッジベースの詳細
オプション入力項目。説明を記載
IAM許可
新規作成、既存のロール利用を選択が可能
タグ
ナレッジベースで利用するIAMRoleについてですが、「新規作成」で自動生成されるIAM Roleの権限は以下の内容となっていました。
データソースとするS3に対する GetObject 権限
ベクトル検索エンジンに対するアクセス権限
OpenSearch Serverless利用時は作成コレクションに対するaoss:APIAccessAll権限
検索時に利用する基盤モデルに対するInvokeModel権限
データソース設定
データソース設定には以下の設定値が必要です。
データソース名
任意の値を設定
S3 URI
データソース設置のS3を指定
(オプション)暗号用KMSキー
S3に設置したデータをカスタマー管理KMSキーを利用している場合に利用
(オプション)一時データストレージ用の KMS キー
ナレッジベース利用時には一時ファイルが作成されるため、その際に任意のKMSキーを利用して暗号化する場合に利用
(オプション)チャンキング戦略
チャンキングはデータソースに関するデータ分割に関するオプションです
本設定により回答精度の関するチューニングが行えます
ただし、本設定はナレッジベース作成後の変更は行えません
チャンキング設定では以下が選択可能です。設定に迷う場合には最初はデフォルトを利用するのがよさそうです。
デフォルト
ソースデータを最大 300 トークンが含まれる形で自動的にチャンクに分割。
固定サイズのチャンキング
チャンク内の最大トークン数とチャンク間のオーバーラップの割合を指定することで任意の分割方法が指定可能です
チャンキングなし
チャンキングしない設定です
データソース側で事前に適切なサイズでファイル分割をしている場合に有用です
埋め込みモデル・ベクトルストア設定
ナレッジベースでは埋め込みモデルを利用して、プロンプトをベクトル変換して、ベクトルストアに問い合わせを実施しています。
埋め込みモデルは以下の3種類から選択可能です。
Titan Embeddings G1 - Text v1.2
Embed English v3
Embed Multilingual v3
続いてベクトル検索エンジンの選択です。
ベクトル検索エンジンについては新規作成と作成済ベクトルストアの選択が可能です。
新規作成の場合にはAmazon OpenSearch Serverlessが作成されます。
作成時にはオプションで冗長化オプションとKMSキーの指定が可能です。
作成済ベクトルストアの場合には以下が選択可能です。
Amazon OpenSearch Serverless 用ベクトルエンジン
Amazon Aurora
Pinecone
Redis Enterprise Cloud
尚、上記に関してはリソースを準備するだけではなく、事前にベクトルデータベースを作成する必要があります。
各ベクトルエンジン毎にARNやインデックス名、メタデータフィールドマッピング等を指定します。
確認画面/作成
最後に確認画面を経て作成が完了します。
ここで、ベクトルストアを新規作成した場合にはAmazon OpenSearch Serverlessのコレクション作成が裏で進行し、コレクションが出来次第、作成が完了します。
尚、Amazon OpenSearch Serverlessのコレクションはナレッジベースとは独立した形で作成されるので、Amazon OpenSearch Serverless画面から確認が可能です。また、削除も可能となるので、ナレッジベースはあるが、Amazon OpenSearch Serverlessはない状態も作ることが可能なので、ご注意ください。
逆にナレッジベースを削除時に連動してOpenSearch Serverlessが削除されません。
そのため、ナレッジベース削除時にOpenSearch Serverlessの削除忘れにもご注意ください。(ナレッジベースはないが、OpenSearch Serverlessの料金がかかり続けるという状態になります)
最後に
今回に記事ではBedrockのナレッジベースの説明および開始方法を説明しました。
次の記事ではナレッジベースの利用方法に関して説明いたします。