RAG と ReAct プロンプトを使用して高度な生成 AI チャットベースのアシスタントを開発する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

RAG と ReAct プロンプトを使用して高度な生成 AI チャットベースのアシスタントを開発する

作成者: Praveen Kumar Jeyarajan (AWS)、Jundong Qiao (AWS)、Kara Yang (AWS)、Kiowa Jackson (AWS)、Noah Hamilton (AWS)、Shuai Cao (AWS)

概要

一般的な企業では、データの 70% がサイロ化されたシステムに閉じ込められています。生成 AI を活用したチャットベースのアシスタントを使用すると、自然言語のやり取りを通じて、これらのデータサイロ間のインサイトや関係を解放できます。生成 AI を最大限に活用するには、出力が信頼性が高く、正確で、利用可能な企業データが含まれている必要があります。成功するチャットベースのアシスタントは、以下によって異なります。

  • 生成 AI モデル (Anthropic Claude 2 など)

  • データソースのベクトル化

  • モデルを促すためのReAct フレームワークなどの高度な推論手法

このパターンは、Amazon Simple Storage Service (Amazon S3) バケット、 Glue、Amazon Relational Database Service (Amazon ) AWS などのデータソースからのデータ取得アプローチを提供しますRDS。取得拡張生成 (RAG) を メソッドで chain-of-thoughtインターリーブすることで、そのデータから値を取得します。その結果、企業の保存されたデータ全体を利用する、チャットベースの複雑なアシスタントの会話がサポートされます。

このパターンでは、Amazon SageMaker マニュアルと料金データテーブルを例として使用して、生成 AI チャットベースのアシスタントの機能を調べます。料金と SageMaker サービスの機能に関する質問に回答することで、顧客がサービスを評価するのに役立つチャットベースのアシスタントを構築します。このソリューションは、フロントエンドアプリケーションを構築するための Streamlit ライブラリと、大規模言語モデル () を搭載したアプリケーションバックエンドを開発するための LangChain フレームワークを使用しますLLM。

チャットベースのアシスタントへの問い合わせは、3 つの可能なワークフローのいずれかにルーティングするための初期インテント分類で満たされます。最も洗練されたワークフローは、一般的なアドバイザリガイダンスと複雑な料金分析を組み合わせたものです。このパターンは、企業、企業、産業のユースケースに合わせて調整できます。

前提条件と制限

前提条件

制約事項

  • LangChain はストリーミングLLMのすべての をサポートしているわけではありません。Anthropic Claude モデルはサポートされていますが、 AI21 Labs のモデルはサポートされていません。

  • このソリューションは 1 つのAWSアカウントにデプロイされます。

  • このソリューションは、Amazon Bedrock と Amazon Kendra が利用可能なAWSリージョンでのみデプロイできます。可用性の詳細については、Amazon BedrockAmazon Kendra のドキュメントを参照してください。

製品バージョン

  • Python バージョン 3.11 以降

  • Streamlit バージョン 1.30.0 以降

  • Streamlit-chat バージョン 0.1.1 以降

  • LangChain バージョン 0.1.12 以降

  • AWS CDK バージョン 2.132.1 以降

アーキテクチャ

ターゲットテクノロジースタック

  • Amazon Athena

  • Amazon Bedrock

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Glue

  • AWS Lambda

  • Amazon S3

  • Amazon Kendra

  • Elastic Load Balancing

ターゲット アーキテクチャ

このAWSCDKコードは、 AWSアカウントでチャットベースのアシスタントアプリケーションをセットアップするために必要なすべてのリソースをデプロイします。次の図に示すチャットベースのアシスタントアプリケーションは、ユーザーからの SageMaker 関連するクエリに応答するように設計されています。ユーザーは Application Load Balancer を介して、Streamlit アプリケーションをホストVPCする Amazon ECSクラスターを含む に接続します。オーケストレーション Lambda 関数はアプリケーションに接続します。S3 バケットデータソースは、Amazon Kendra と Glue を介して Lambda AWS 関数にデータを提供します。Lambda 関数は Amazon Bedrock に接続して、チャットベースのアシスタントユーザーからのクエリ (質問) に応答します。

アーキテクチャ図。
  1. オーケストレーション Lambda 関数は、LLMプロンプトリクエストを Amazon Bedrock モデル (Claude 2) に送信します。

  2. Amazon Bedrock は、オーケストレーション Lambda 関数にLLMレスポンスを返します。

オーケストレーション Lambda 関数内のロジックフロー

ユーザーが Streamlit アプリケーションを通じて質問すると、オーケストレーション Lambda 関数を直接呼び出します。次の図は、Lambda 関数が呼び出されたときのロジックフローを示しています。

アーキテクチャ図。
  • ステップ 1 – 入力 query (質問) は 3 つのインテントのいずれかに分類されます。

    • 一般的な SageMaker ガイダンスの質問

    • 一般的な SageMaker 料金 (トレーニング/推論) に関する質問

    • SageMaker と の料金に関する複雑な質問

  • ステップ 2 – 入力は 3 つのサービスのいずれかqueryを開始します。

    • RAG Retrieval serviceAmazon Kendra ベクトルデータベースから関連するコンテキストを取得し、Amazon Bedrock LLMを介して を呼び出して、取得したコンテキストをレスポンスとして要約します。

    • Database Query service、LLMデータベースメタデータ、および関連するテーブルのサンプル行を使用して、入力をSQLクエリに変換queryする 。Database Query サービスは、Amazon Athena を介して SageMaker 料金データベースに対してSQLクエリを実行し、クエリ結果をレスポンスとして要約します。

    • In-context ReACT Agent service。レスポンスを提供する前に、入力を複数のステップqueryに分割します。エージェントは、推論プロセス中に関連情報を取得するためのツールDatabase Query serviceとして RAG Retrieval serviceと を使用します。推論プロセスとアクションプロセスが完了すると、エージェントはレスポンスとして最終的な回答を生成します。

  • ステップ 3 – オーケストレーション Lambda 関数からのレスポンスは、出力として Streamlit アプリケーションに送信されます。

ツール

AWS サービス

  • Amazon Athena は、標準 を使用して Amazon Simple Storage Service (Amazon S3) でデータを直接分析するのに役立つインタラクティブなクエリサービスですSQL。

  • Amazon Bedrock は、主要な AI スタートアップと Amazon からの高性能な基盤モデル (FMs) を、統合された を通じて使用できるようにするフルマネージドサービスですAPI。

  • AWS Cloud Development Kit (AWS CDK) は、コードでAWSクラウドインフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。

  • AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェルのコマンドを使用して AWSサービスとやり取りするのに役立つオープンソースツールです。

  • Amazon Elastic Container Service (Amazon ECS) は、クラスター上のコンテナの実行、停止、管理に役立つ、高速でスケーラブルなコンテナ管理サービスです。

  • AWS Glue は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。このパターンでは、 AWS Glue クローラと AWS Glue データカタログテーブルを使用します。

  • Amazon Kendra は、自然言語処理と高度な機械学習アルゴリズムを使用して、データから検索に関する質問に対する特定の回答を返すインテリジェントな検索サービスです。

  • AWS Lambda は、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Storage Service (Amazon S3) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。

  • Elastic Load Balancing (ELB) は、受信アプリケーションまたはネットワークトラフィックを複数のターゲットに分散します。例えば、1 つ以上のアベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、IP アドレスにトラフィックを分散できます。

コードリポジトリ

このパターンのコードは、 リポジトリで GitHub genai-bedrock-chatbot使用できます。

コードリポジトリには以下のファイルとフォルダが含まれています。

  • assets フォルダ – アーキテクチャ図とパブリックデータセットの静的アセット

  • code/lambda-container フォルダ – Lambda 関数で実行される Python コード

  • code/streamlit-app フォルダ – Amazon のコンテナイメージとして実行される Python コード ECS

  • tests フォルダ – AWSCDKコンストラクトをユニットテストするために実行される Python ファイル

  • code/code_stack.py – AWSリソースの作成に使用されるAWSCDKコンストラクト Python ファイル

  • app.py – ターゲットAWSアカウントにAWSリソースをデプロイするために使用されるAWSCDKスタック Python ファイル

  • requirements.txt – にインストールする必要があるすべての Python 依存関係のリスト AWS CDK

  • requirements-dev.txt – ユニットテストスイートを実行するAWSCDKために にインストールする必要があるすべての Python 依存関係のリスト

  • cdk.json — リソースの起動に必要な値を提供する入力ファイル

注記

このAWSCDKコードでは、L3 (レイヤー 3) コンストラクトと、 AWSによって管理される Identity and Access Management (IAM) ポリシーAWSを使用してソリューションをデプロイします。

ベストプラクティス

エピック

タスク説明必要なスキル

スタックがデプロイされるアカウントとAWSリージョンの変数をエクスポートします。

環境変数AWSCDKを使用して のAWS認証情報を提供するには、次のコマンドを実行します。

export CDK_DEFAULT_ACCOUNT=<12 Digit AWS Account Number> export CDK_DEFAULT_REGION=<region>
DevOps エンジニア、 AWS DevOps

AWS CLI プロファイルを設定します。

アカウントのAWSCLIプロファイルを設定するには、 AWSドキュメントの指示に従います。

DevOps エンジニア、 AWS DevOps
タスク説明必要なスキル

ローカルマシンにリポジトリを複製します。

リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。

git clone https://github.com/awslabs/genai-bedrock-chatbot.git
DevOps エンジニア、 AWS DevOps

Python 仮想環境を設定し、必要な依存関係をインストールします。

Python 仮想環境をセットアップするには、次のコマンドを実行します。

cd genai-bedrock-chatbot python3 -m venv .venv source .venv/bin/activate

必要な依存関係を設定するには、次のコマンドを実行します。

pip3 install -r requirements.txt
DevOps エンジニア、 AWS DevOps

AWS CDK 環境を設定し、AWSCDKコードを合成します。

  1. AWS アカウントでAWSCDK環境を設定するには、次のコマンドを実行します。

    cdk bootstrap aws://ACCOUNT-NUMBER/REGION
  2. コードを AWS CloudFormation スタック設定に変換するには、 コマンドを実行しますcdk synth

DevOps エンジニア、 AWS DevOps
タスク説明必要なスキル

Claude モデルアクセスをプロビジョニングします。

AWS アカウントの Anthropic Claude モデルアクセスを有効にするには、Amazon Bedrock ドキュメントの指示に従います。

AWS DevOps

アカウントにリソースをデプロイします。

を使用してAWSアカウントにリソースをデプロイするにはAWSCDK、次の手順を実行します。

  1. クローンされたリポジトリのルートの cdk.json ファイルで、loggingパラメータの入力を指定します。値の例は、INFODEBUGWARN、および ですERROR

    これらの値は、Lambda 関数と Streamlit アプリケーションのログレベルのメッセージを定義します。

  2. クローンされたリポジトリのルートにある app.py ファイルには、デプロイに使用されるAWS CloudFormation スタック名が含まれています。デフォルトのスタック名は ですchatbot-stack

  3. リソースをデプロイするには、cdk deploy コマンドを実行します。

    cdk deploy コマンドは L3 コンストラクトを使用して、ドキュメントとCSVデータセットファイルを S3 バケットにコピーするための複数の Lambda 関数を作成します。

  4. コマンドが完了したら、 AWSマネジメントコンソールにサインインし、 CloudFormation コンソールを開き、スタックが正常にデプロイされたことを確認します

デプロイが成功したら、 CloudFormation 「出力」セクションでURL提供されている を使用して、チャットベースのアシスタントアプリケーションにアクセスできます。

AWS DevOps、 DevOps エンジニア

AWS Glue クローラを実行し、データカタログテーブルを作成します。

AWS Glue クローラは、データスキーマを動的に保つために使用されます。このソリューションは、オンデマンドでクローラーを実行してAWS、 Glue データカタログテーブルにパーティションを作成および更新します。CSV データセットファイルが S3 バケットにコピーされたら、 AWS Glue クローラを実行し、テスト用の Data Catalog テーブルスキーマを作成します。

  1. Glue AWS コンソールに移動します。

  2. ナビゲーションペインの [Data Catalog (データカタログ)] で、[Crawlers (クローラー)] を選択します。

  3. サフィックス が付いたクローラを選択しますsagemaker-pricing-crawler

  4. クローラーを実行します。

  5. クローラーが正常に実行されると、 AWSGlue データカタログテーブルが作成されます。

注記

このAWSCDKコードはAWS、 Glue クローラーをオンデマンドで実行するように設定しますが、定期的に実行するようにスケジュールすることもできます。

DevOps エンジニア、 AWS DevOps

ドキュメントのインデックス作成を開始します。

ファイルが S3 バケットにコピーされたら、Amazon Kendra を使用してファイルをクロールし、インデックスを作成します。

  1. Amazon Kendra コンソールに移動します。

  2. サフィックス が付いたインデックスを選択しますchatbot-index

  3. ナビゲーションペインで、データソースを選択し、サフィックス が付いたデータソースコネクタを選択しますchatbot-index

  4. 今すぐ同期を選択して、インデックス作成プロセスを開始します。

注記

このAWSCDKコードは、Amazon Kendra インデックス同期をオンデマンドで実行するように設定しますが、Schedule パラメータを使用して定期的に実行することもできます。

AWS DevOps、 DevOps エンジニア
タスク説明必要なスキル

AWS リソースを削除します。

ソリューションをテストしたら、リソースをクリーンアップします。

  1. ソリューションによってデプロイされたAWSリソースを削除するには、 コマンドを実行しますcdk destroy

  2. 2 つの S3 バケットからすべてのオブジェクトを削除してから、バケットを削除します。

    詳細については、バケットを削除するを参照してください。

DevOps エンジニア、 AWS DevOps

トラブルシューティング

問題ソリューション

AWS CDK はエラーを返します。

AWS CDK 問題のヘルプについては、「一般的なAWSCDK問題のトラブルシューティング」を参照してください。

関連リソース

追加情報

AWS CDK コマンド

を使用する場合はAWSCDK、次の便利なコマンドに注意してください。

  • アプリ内のすべてのスタックを一覧表示

    cdk ls
  • 合成されたAWS CloudFormation テンプレートを出力します。

    cdk synth
  • スタックをデフォルトのAWSアカウントとリージョンにデプロイします。

    cdk deploy
  • デプロイされたスタックを現在の状態と比較

    cdk diff
  • AWS CDK ドキュメントを開きます

    cdk docs
  • CloudFormation スタックを削除し、AWSデプロイされたリソースを削除します。

    cdk destroy