翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
RAG と ReAct プロンプトを使用して、高度な生成 AI チャットベースのアシスタントを開発する
作成者: Praveen Kumar Jeyarajan (AWS)、Jundong Qiao (AWS)、Kara Yang (AWS)、Kioua Jackson (AWS)、Noah Hamilton (AWS)、Shuai Cao (AWS)
コードリポジトリ: genai-bedrock-chatbot | 環境:PoC またはパイロット | テクノロジー: 機械学習と AI、データベース DevOps、サーバーレス |
AWS サービス: Amazon Bedrock、Amazon ECS、Amazon Kendra、AWSLambda |
[概要]
一般的な企業では、データの 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 つの可能なワークフローのいずれかにルーティングするための初期インテント分類で満たされます。最も高度なワークフローは、一般的なアドバイザリーガイダンスと複雑な料金分析を組み合わせています。パターンは、エンタープライズ、企業、産業のユースケースに合わせて調整できます。
前提条件と制限
前提条件
AWS コマンドラインインターフェイス (AWS CLI) がインストールされ、設定されている
AWS Cloud Development Kit (AWS CDK) Toolkit 2.114.1 以降がインストールされ、設定されている
Python と の基本知識 AWS CDK
インストール済みGit
Docker
がインストールされました Python 3.11 以降
がインストールされ、設定されている (詳細については、「ツール」セクションを参照してください) を使用してブートストラップされたアクティブなAWSアカウント AWS CDK
Amazon Bedrock サービスで有効になっている Amazon Titan および Anthropic Claude モデルアクセス
を含むAWSセキュリティ認証情報
AWS_ACCESS_KEY_ID
がターミナル環境で正しく設定されている
制約事項
LangChain はストリーミングLLM用の をすべてサポートしているわけではありません。Anthropic Claude モデルはサポートされていますが、AI21Labs のモデルはサポートされていません。
このソリューションは 1 つのAWSアカウントにデプロイされます。
このソリューションは、Amazon Bedrock と Amazon Kendra が利用可能なAWSリージョンでのみデプロイできます。可用性の詳細については、Amazon Bedrock と Amazon 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 と AWS Glue を介して Lambda 関数にデータを提供します。Lambda 関数は Amazon Bedrock に接続し、チャットベースのアシスタントユーザーからのクエリ (質問) に応答します。
オーケストレーション Lambda 関数は、LLMプロンプトリクエストを Amazon Bedrock モデル (Claude 2) に送信します。
Amazon Bedrock は、オーケストレーション Lambda 関数にLLMレスポンスを返します。
オーケストレーション Lambda 関数内のロジックフロー
ユーザーが Streamlit アプリケーションを通じて質問すると、オーケストレーション Lambda 関数を直接呼び出します。次の図は、Lambda 関数が呼び出されたときのロジックフローを示しています。
ステップ 1 – 入力
query
(質問) は 3 つのインテントのいずれかに分類されます。一般的な SageMaker ガイダンスの質問
一般的な SageMaker 料金 (トレーニング/推論) に関する質問
SageMaker および 料金に関する複雑な質問
ステップ 2 – 入力は 3 つのサービスのいずれか
query
を開始します。RAG Retrieval service
。Amazon 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 Cloud インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェルのコマンドを使用してAWSサービスとやり取りするのに役立つオープンソースツールです。
Amazon Elastic Container Service (Amazon ECS) は、クラスター上のコンテナの実行、停止、管理に役立つ、高速でスケーラブルなコンテナ管理サービスです。
AWS Glue は、フルマネージドの抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。このパターンではAWS、Glue クローラと AWS Glue Data Catalog テーブルを使用します。
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 コード ECStests
フォルダ – ユニットテスト用に実行される Python ファイル AWS CDKcode/code_stack.py
– AWSリソースの作成に使用される AWS CDK Python ファイルの構築app.py
– ターゲットAWSアカウントにAWSリソースをデプロイするために使用されるAWSCDKスタック Python ファイルrequirements.txt
– にインストールする必要があるすべての Python 依存関係のリスト AWS CDKrequirements-dev.txt
– ユニットテストスイートを実行するAWSCDKために にインストールする必要があるすべての Python 依存関係のリストcdk.json
— リソースの起動に必要な値を提供する入力ファイル
注: このAWSCDKコードは、L3 (レイヤー 3) コンストラクトと、 AWS が管理するアイデンティティとアクセス管理 (IAM) ポリシーAWSを使用してソリューションをデプロイします。 |
ベストプラクティス
ここに示すコード例は、 proof-of-concept (PoC ) またはパイロットデモ専用です。コードを本番環境に移行する場合は、次のベストプラクティスを使用してください。
Lambda 関数のモニタリングとアラートを設定します。詳細については、Lambda 関数をモニタリングおよびトラブルシューティングするを参照してください。Lambda 関数を使用する際の一般的なベストプラクティスについては、 AWS ドキュメントを参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
スタックがデプロイされるアカウントとAWSリージョンの変数をエクスポートします。 | 環境変数AWSCDKを使用して のAWS認証情報を提供するには、次のコマンドを実行します。
| DevOps エンジニア AWS DevOps |
AWS CLI プロファイルを設定します。 | アカウントのAWSCLIプロファイルを設定するには、AWSドキュメント の指示に従います。 | DevOps エンジニア AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
ローカルマシンにリポジトリを複製します。 | リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。
| DevOps エンジニア AWS DevOps |
Python 仮想環境を設定し、必要な依存関係をインストールします。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。
必要な依存関係を設定するには、次のコマンドを実行します。
| DevOps エンジニア AWS DevOps |
AWS CDK 環境を設定し、AWSCDKコードを合成します。 |
| DevOps エンジニア AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
Claude モデルアクセスをプロビジョニングします。 | AWS アカウントの Anthropic Claude モデルアクセスを有効にするには、「Amazon Bedrock ドキュメント」の指示に従います。 | AWS DevOps |
アカウントにリソースをデプロイします。 | を使用して AWSアカウントにリソースをデプロイするにはAWSCDK、以下を実行します。
デプロイが成功したら、 CloudFormation 出力セクションでURL提供されている を使用して、チャットベースのアシスタントアプリケーションにアクセスできます。 | AWS DevOps、 DevOps エンジニア |
Glue クローラを実行し、Data Catalog AWS テーブルを作成します。 | AWS Glue クローラは、データスキーマを動的に保つために使用されます。このソリューションは、クローラーをオンデマンドで実行することでAWS、Glue Data Catalog テーブルにパーティションを作成および更新します。CSV データセットファイルが S3 AWS バケットにコピーされたら、Glue クローラを実行し、テスト用の Data Catalog テーブルスキーマを作成します。
注: AWSCDKコードは AWS Glue クローラーをオンデマンドで実行するように設定しますが、定期的に実行するようにスケジュールすることもできます。 | DevOps エンジニア AWS DevOps |
ドキュメントのインデックス作成を開始します。 | ファイルが S3 バケットにコピーされたら、Amazon Kendra を使用してクロールし、インデックスを作成します。
注: このAWSCDKコードは、Amazon Kendra インデックス同期をオンデマンドで実行するように設定しますが、スケジュールパラメータ を使用して定期的に実行することもできます。 | AWS DevOps、 DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS リソースを削除します。 | ソリューションをテストしたら、リソースをクリーンアップします。
| 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