Amazon Web Services ブログ

Amazon Bedrock と Amazon FSx for NetApp ONTAP を使用して AWS で RAG ベースの生成 AI アプリケーションを構築する

このブログは 2024 年 9 月 17 日に Kanishk Mahajan (Principal, Solutions Architect) と、NetApp の Michael Shaul 氏と Sasha Korman 氏によって共同執筆された内容を日本語化したものです。原文はこちらを参照してください。

生成 AI アプリケーションは、一般的に Retrieval Augmented Generation (RAG) と呼ばれる手法を使用して構築されます。RAG を使用することで、基礎モデル (FM) はトレーニングで使用されていない追加データへアクセスすることができます。このデータは、生成 AI プロンプトを強化するために使用され、FM を継続的に再トレーニングすることなく、よりコンテキスト固有で正確な応答を提供し、透明性を向上させ、ハルシネーションを最小限に抑えます。

このブログでは、Amazon BedrockAmazon FSx for NetApp ONTAP を使用して、企業固有の非構造化ユーザーファイルデータを簡単、高速、かつ安全な方法で Amazon Bedrock に取り込み、AWS 上の生成 AI アプリケーションに RAG エクスペリエンスを提供するソリューションを紹介します。

今回のソリューションでは、FSx for ONTAP ファイルシステムを非構造化データのソースとして使用し、ユーザーの既存のファイルとフォルダー、および関連するメタデータを Amazon OpenSearch Serverless ベクトルデータベースに継続的に格納します。これにより、OpenSearch Serverless から取得した企業固有のデータを用いて生成 AI のプロンプトを強化し、Amazon Bedrock を活用した RAG シナリオを実現します。

RAG を使用して Q&A チャットボットなどの生成 AI アプリケーションを開発する場合、お客様はデータのセキュリティを維持し、エンドユーザーが許可されていないデータソースから情報を照会できないようにすることも懸念しています。今回のソリューションでは、FSx for ONTAP を使用して、ユーザーが現在のデータセキュリティとアクセスメカニズムを拡張し、Amazon Bedrock からのモデル応答に適用できるようにしています。FSx for ONTAP を関連メタデータのソースとして使用し、具体的には、ファイルとフォルダーに添付されたユーザーのセキュリティアクセスコントロールリスト (ACL) 構成を使用して、そのメタデータを OpenSearch Serverless に格納します。アクセス制御操作とファイルシステム上の新規データと変更されたデータを RAG アプリケーションに通知するファイルイベントを組み合わせることで、 FSx for ONTAP によって Amazon Bedrock が 生成 AI アプリケーションに接続する特定のユーザーに対して、承認されたファイルのみを使用できるようにする方法を示しています。

AWS のサーバーレスなサービスでは、自動スケーリング、高可用性、従量課金モデルが提供されるため、開発者は生成 AI アプリケーションの構築に集中しやすくなります。AWS Lambda を使用したイベント駆動型コンピューティングは、ドキュメントの埋め込みや柔軟な大規模言語モデル (LLM) オーケストレーションなどのコンピューティング集約型のオンデマンドタスクに適しています。また、Amazon API Gateway は、フロントエンドとの連携や LLM のイベント駆動型呼び出しを可能にする API インターフェイスを提供します。今回のソリューションでは、API Gateway と Lambda を使用して、Amazon Bedrock と FSx for ONTAP 上にスケーラブルで自動化された API 駆動型サーバーレスアプリケーションレイヤーを構築する方法も示しています。

ソリューションの概要

このソリューションは、AWS Managed Microsoft AD のドメインに参加したストレージ仮想マシン (SVM) を持つ、FSx for ONTAP マルチ AZ 構成のファイルシステムを使用します。OpenSearch Serverless ベクトル検索コレクションは、スケーラブルで高性能な類似検索機能を提供します。Amazon Elastic Compute Cloud (Amazon EC2) Windows サーバーを FSx for ONTAP ボリュームの SMB/CIFS クライアントとして使用し、ボリューム内の SMB 共有に対してデータ共有と ACL を設定します。このデータと ACL を使用して、Amazon Bedrock を使用した RAG シナリオにおける埋め込みへのアクセス許可をテストします。

今回のソリューションにおける埋め込みコンテナコンポーネントは、EC2 Linux サーバーにデプロイされ、FSx for ONTAP ボリュームを NFS クライアントとしてマウントします。このコンポーネントは、既存のファイルとフォルダーをセキュリティ ACL 設定とともに定期的に OpenSearch Serverless に送信します。FSx for ONTAP ファイルシステム上の NFS 共有から、企業固有のデータ (および関連するメタデータと ACL) を OpenSearch Serverless ベクトル検索コレクションのインデックスに格納します。

加えて、このソリューションでは RAG 実装用に Lambda 関数を使用します。この関数は、埋め込みコンテナコンポーネントによって格納された OpenSearch Serverless インデックスから会社固有のデータと関連メタデータ (ACL を含む) を取得して、生成 AI プロンプトを強化することで、Amazon Bedrock による RAG を可能にします。また、この Lambda 関数は、ユーザーとの会話履歴を Amazon DynamoDB テーブルに保存します。

エンドユーザーは、チャットボットアプリケーションまたは API Gateway インターフェイスから直接、自然言語プロンプトを送信することでソリューションと対話します。チャットボットコンテナは Streamlit を使用して構築され、AWS Application Load Balancer (ALB) が前面に配置されます。ユーザーは ALB を通してチャットボット UI に自然言語プロンプトを送信すると、チャットボットコンテナは API Gateway インターフェイスと対話し、RAG 取得 Lambda 関数を呼び出してユーザーの応答を取得します。ユーザーは、プロンプトリクエストを API Gateway に直接送信して応答を取得することもできます。ドキュメントへの権限ベースのアクセスを実証するために、ユーザーの SID を明示的に取得し、その SID をチャットボットまたは API Gateway リクエストで使用します。RAG 取得用の Lambda 関数は、SID をドキュメント用に構成された Windows ACL と照合します。本番環境での追加の認証手順として、ユーザーを ID プロバイダーに対して認証し、ユーザーをドキュメント用に構成されたアクセス許可と照合することもできます。

次の図は、今回のソリューションのフローを示しています。まず、FSx for ONTAP を使用してデータ共有と ACL を設定し、次にこれらを埋め込みコンテナで定期的にスキャンします。埋め込みコンテナはドキュメントをチャンクに分割し、Amazon Titan Embeddings モデルを使用してこれらのチャンクから埋め込んだベクトルを作成します。次に、OpenSearch Serverless のベクトル検索コレクションにインデックスを設定することで、これらの埋め込んだベクトルを関連するメタデータとともに保存します。次の図は、エンドツーエンドのフローを示しています。

次のアーキテクチャ図は、ソリューションの全体像を示しています。

前提条件

次の前提条件の手順を完了してください。

  1. Amazon Bedrock でモデルにアクセスできることを確認する。このソリューションでは、Amazon Bedrock にて Anthropic Claude v3 Sonnet を使用する。
  2. AWS コマンドラインインターフェイス (AWS CLI) をインストールする。
  3. Docker をインストールする
  4. Terraform をインストールする

ソリューションをデプロイする

このソリューションは、GitHub リポジトリからダウンロードできます。リポジトリをクローンし、Terraform テンプレートを使用すると、すべてのコンポーネントが必要な構成でプロビジョニングされます。

  1. このソリューションのリポジトリをクローンする。
    sudo yum install -y unzip
    git clone https://github.com/aws-samples/genai-bedrock-fsxontap.git
    cd genai-bedrock-fsxontap/terraform
  2. terraform フォルダーから、Terraform を使用してソリューション全体をデプロイする。
    terraform init
    terraform apply -auto-approve

このプロセスは完了するまでに 15~20 分かかることがあります。完了すると、terraform コマンドの出力は次のようになります。

api-invoke-url = "https://9ng1jjn8qi.execute-api.<region>.amazonaws.com/prod"
fsx-management-ip = toset([
"198.19.255.230",])
fsx-secret-id = "arn:aws:secretsmanager:<region>:<account-id>:secret:AmazonBedrock-FSx-NetAPP-ONTAP-a2fZEdIt-0fBcS9"
fsx-svm-smb-dns-name = "BRSVM.BEDROCK-01.COM"
lb-dns-name = "chat-load-balancer-2040177936.<region>.elb.amazonaws.com"

データを読み込み、権限を設定する

ソリューションをテストするには、FSx for ONTAP ボリュームにおいて SMB/CIFS クライアントである EC2 Windows サーバー (ad_host) を使用してサンプルデータを共有しユーザー権限を設定します。これらはのちに、埋め込みコンテナコンポーネントによって OpenSearch Serverless インデックスに格納されます。FSx for ONTAP SVM データボリュームをネットワークドライブとしてマウントし、この共有ネットワークドライブにデータをアップロードして Windows ACL に基づいて権限を設定するには、次の手順を実行します。

    1. Terraform テンプレートの出力から ad_hostインスタンスの DNS を取得します。
    2. AWS コンソールで AWS Systems Manager Fleet Manager に移動し、ad_host インスタンスを見つけて、リモートデスクトップでログインします。その際、ドメイン管理者ユーザー bedrock-01\Admin に対応するパスワードを AWS Secrets Manager から取得します。パスワードは、Terraform テンプレートの出力から Secrets Managerの項目で fsx-secret-id のシークレット ID を使用して見つけます。
    3. FSx for ONTAP データ ボリュームをネットワークドライブとしてマウントするには、[This PC] の下で [Network] を選択 (右クリック) し、[Map Network drive] を選します。
    4. ドライブを選択し、マウントに FSx for ONTAP 共有パス (\\<svm>.<domain >\c$\<volume-name>) を使用します。
    5. Amazon Bedrock ユーザーガイド を共有ネットワークドライブにアップロードし、管理者ユーザーのみにアクセス権限を設定します ( [Advanced] で継承が無効になっていることも確認します)。
    6. FSx for ONTAP ユーザーガイド を共有ドライブにアップロードし、権限が [Everyone] に設定されていることを確認します。
    7. ad_host サーバー上で コマンド プロンプトを開き、次のコマンドを入力して管理者ユーザーの SID を取得します。
      wmic useraccount where name='Admin' get sid

チャットボットを使用して権限をテストする

チャットボットを使用して権限をテストするには、Terraform テンプレートの出力から lb-dns-name の URL を取得し、Web ブラウザからアクセスします。

プロンプトクエリでは、誰でもアクセスできるように設定した FSx for ONTAP ユーザーガイドに関する一般的な質問をします。例えば「FSx for ONTAP ファイルシステムを作成するにはどうすればよいですか」と質問すると、モデルは、AWS マネジメントコンソール、AWS CLI、または FSx API を使用して FSx for ONTAP ファイルシステムを作成するための詳細な手順と出典をチャットウィンドウに返信しました。

次に、管理者アクセスのみが利用できる Amazon Bedrock ユーザーガイドに基づいて質問してみましょう。この例では、「Amazon Bedrock で基盤モデルを使用する方法」を質問したところ、モデルは質問に詳細な回答を提供するには情報が不十分であると返答しました。

チャット UI のユーザー (SID) フィルター検索で管理者 SID を使用し、同じ質問をします。するとモデルは Amazon Bedrock で FM を使用する方法の詳細手順を返信し、応答にはモデルが使用した出典が含まれています。

API Gateway を使用して権限をテストする

API Gateway を使用してモデルを直接クエリすることもできます。Terraform テンプレートの出力から api-invoke-url パラメータを取得します。

curl -v '<api-invoke-url>/bedrock_rag_retreival' -X POST -H 'content-type: application/json' -d '{"session_id": "1","prompt": "What is an FSxN ONTAP filesystem?", "bedrock_model_id": "anthropic.claude-3-sonnet-20240229-v1:0", "model_kwargs": {"temperature": 1.0, "top_p": 1.0, "top_k": 500}, "metadata": "NA", "memory_window": 10}'

次に、FSx for ONTAP ユーザー ガイドに関連するクエリについて、全員からのアクセスで API Gateway を呼び出します。これを行うには、metadata パラメータの値を NA にして、全員からのアクセスを指定します。

curl -v '<api-invoke-url>/bedrock_rag_retreival' -X POST -H 'content-type: application/json' -d '{"session_id": "1","prompt": "what is bedrock?", "bedrock_model_id": "anthropic.claude-3-sonnet-20240229-v1:0", "model_kwargs": {"temperature": 1.0, "top_p": 1.0, "top_k": 500}, "metadata": "S-1-5-21-4037439088-1296877785-2872080499-1112", "memory_window": 10}'

クリーンアップ

繰り返し課金されないようにするには、ソリューションを試した後、アカウントをクリーンアップしてください。terraform フォルダーから、ソリューションの Terraform テンプレートを削除します。

terraform apply --destroy

まとめ

この記事では、Amazon Bedrock と FSx for ONTAP を組み合わせたソリューションを紹介しました。FSx for ONTAP のファイル所有権と ACL を使用して、生成 AI アプリケーションの RAG シナリオで権限ベースのアクセスを提供します。このソリューションを使用すると、Amazon Bedrock で生成 AI アプリケーションを構築し、FSx for ONTAP ファイルシステムから企業固有の非構造化ユーザーファイルデータを使用して Amazon Bedrock の生成 AI プロンプトを強化できます。このソリューションにより、より関連性が高く文脈に即した正確な応答を提供できると同時に、承認されたユーザーのみがそのデータにアクセスできるようになります。さらにこのソリューションでは、FSx for ONTAP と Amazon Bedrock と一緒に AWS のサーバーレスサービスを使用することで、生成 AI アプリケーションの自動スケーリング、イベント駆動型コンピューティング、API インターフェイスを実現する方法、それぞれを示しています。

Amazon Bedrock と FSx for ONTAP の詳細については、次のリソースを参照してください。

翻訳はネットアップ合同会社の Sr. Cloud Solutions Architect for AWS の藤原様、監修は Solutions Architect 吉澤が担当しました。

About the authors

Kanishk Mahajan は、AWS の Principal, Solutions Architect です。AWS の ISV 顧客およびパートナー向けのクラウド変革とソリューション アーキテクチャをリードしています。Kanishk は、コンテナ、クラウド運用、移行とモダナイゼーション、AI/ML、回復力、セキュリティ、コンプライアンスを専門としています。彼は AWS においてこれらの領域の Technical Field Community (TFC) メンバーでもあります。

Michael Shaulは、NetApp の CTO オフィスの Principal Architect です。データ管理システム、アプリケーション、インフラストラクチャ ソリューションの構築に 20 年以上携わっており、クラウドテクノロジー、ビルダー、AI ソリューションに関して独自の深い視点を持っています。

Sasha Korman は、イスラエルとインドにまたがるダイナミックな開発および QA チームの技術リーダーです。プログラマーとして NetApp に入社して 14 年間のキャリアを持つ彼の実践的な経験とリーダーシップは、イノベーション、スケーラビリティ、信頼性を重視しながら複雑なプロジェクトを成功に導く上で極めて重要な役割を果たしてきました。