Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化されたチャットベースのアシスタントを開発する - AWS 規範ガイダンス

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

Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化されたチャットベースのアシスタントを開発する

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

コードリポジトリ: genai-bedrock-agent-chatbot

環境:PoC またはパイロット

テクノロジー: 機械学習と AI、サーバーレス

AWS サービス: Amazon Bedrock、AWS CDK、AWS Lambda

[概要]

多くの組織は、包括的な回答を提供するためにさまざまなデータソースをオーケストレーションできるチャットベースのアシスタントを作成する際に課題に直面しています。このパターンは、ドキュメントとデータベースの両方からのクエリに簡単に回答できるチャットベースのアシスタントを開発するためのソリューションを示しています。

Amazon Bedrock 以降、このフルマネージド生成人工知能 (AI) サービスは、さまざまな高度な基盤モデル (FMsを提供します。これにより、プライバシーとセキュリティに重点を置いた生成 AI アプリケーションの効率的な作成が容易になります。ドキュメントの取得では、検索拡張生成 (RAG) が重要な機能です。ナレッジベースを使用して、外部ソースからのコンテキストに関連する情報で FM プロンプトを強化します。Amazon OpenSearch Serverless インデックスは、Amazon Bedrock のナレッジベースの背後にあるベクトルデータベースとして機能します。この統合は、不正確さを最小限に抑え、レスポンスが事実上のドキュメントに確実に固定されるように、慎重なプロンプトエンジニアリングによって強化されています。データベースクエリの場合、Amazon Bedrock の FMs はテキストクエリを構造化された SQL クエリに変換し、特定のパラメータを組み込みます。これにより、AWS Glue データベース によって管理されるデータベースからデータを正確に取得できます。これらのクエリには Amazon Athena が使用されます。

より複雑なクエリを処理するには、包括的な回答を得るには、ドキュメントとデータベースの両方から取得した情報が必要です。Agents for Amazon Bedrock は生成 AI 機能で、複雑なタスクを理解し、オーケストレーションのためにより単純なタスクに分割できる自律型エージェントを構築できます。Amazon Bedrock の自律型エージェントによって容易になる、簡略化されたタスクから取得されたインサイトの組み合わせにより、情報の合成が強化され、より徹底的で網羅的な回答が得られます。このパターンは、Amazon Bedrock および関連する生成 AI サービスおよび自動ソリューション内の機能を使用してチャットベースのアシスタントを構築する方法を示しています。

前提条件と制限

前提条件 

制限

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

  • このソリューションは、Amazon Bedrock と Amazon OpenSearch Serverless がサポートされている AWS リージョンでのみデプロイできます。詳細については、Amazon Bedrock と Amazon OpenSearch Serverless のドキュメントを参照してください。

製品バージョン

  • Llama-index バージョン 0.10.6 以降

  • Sqlalchemy バージョン 2.0.23 以降

  • Opensearch-py バージョン 2.4.2 以降

  • Requests_aws4auth バージョン 1.2.3 以降

  • AWS SDK for Python (Boto3) バージョン 1.34.57 以降

アーキテクチャ

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

AWS Cloud Development Kit (AWS CDK) は、コードでクラウドインフラストラクチャを定義し、AWS を通じてプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです CloudFormation。このパターンで使用される AWS CDK スタックは、次の AWS リソースをデプロイします。 

  • AWS Key Management Service (AWS KMS)

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Glue データベースコンポーネントの AWS Glue データカタログ

  • AWS Lambda

  • AWS Identity and Access Management (IAM)

  • Amazon OpenSearch Serverless

  • Amazon Elastic Container Registry (Amazon ECR) 

  • Amazon Elastic Container Service (Amazon ECS)

  • AWS Fargate

  • Amazon Virtual Private Cloud (Amazon VPC)

  • Application Load Balancer

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

Amazon Bedrock ナレッジベースとエージェントを使用したアーキテクチャ図

この図は、複数の AWS サービスを使用した、単一の AWS リージョン内の包括的な AWS クラウドネイティブセットアップを示しています。チャットベースのアシスタントの主なインターフェイスは、Amazon ECS クラスターでホストされている Streamlit アプリケーションです。Application Load Balancer はアクセシビリティを管理します。このインターフェイスを介して行われたクエリは、Lambda Invocation 関数をアクティブ化し、Amazon Bedrock のエージェントとインターフェイスします。このエージェントは、Amazon Bedrock のナレッジベースを参照するか、Lambda Agent executor 関数を呼び出して、ユーザーの問い合わせに応答します。この関数は、事前定義された API スキーマに従って、エージェントに関連付けられた一連のアクションをトリガーします。Amazon Bedrock のナレッジベースは、ベクトルデータベース基盤として OpenSearch Serverless インデックスを使用します。さらに、このAgent executor関数は、Amazon Athena を介して AWS Glue データベースに対して実行される SQL クエリを生成します。

ツール

AWS サービス

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

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

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

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

  • Amazon Elastic Container Service (Amazon ECS)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。

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

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

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

  • Amazon OpenSearch Serverless は、Amazon OpenSearch Service のオンデマンドサーバーレス設定です。このパターンでは、 OpenSearch サーバーレスインデックスは Amazon Bedrock のナレッジベースのベクトルデータベースとして機能します。

  • Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。

その他のツール

  • Streamlit は、データアプリケーションを作成するためのオープンソースの Python フレームワークです。

コードリポジトリ

このパターンのコードはリポジトリにあります GitHub genai-bedrock-agent-chatbot。コードリポジトリには以下のファイルとフォルダが含まれています。

  • assets folder – アーキテクチャ図やパブリックデータセットなどの静的アセット。

  • code/lambdas/action-lambda folder – Amazon Bedrock エージェントのアクションとして機能する Lambda 関数の Python コード。

  • code/lambdas/create-index-lambda folder – Serverless インデックスを作成する Lambda 関数の OpenSearch Python コード。

  • code/lambdas/invoke-lambda フォルダ – Streamlit アプリケーションから直接呼び出される Amazon Bedrock エージェントを呼び出す Lambda 関数の Python コード。

  • code/lambdas/update-lambda フォルダ – AWS リソースが AWS CDK を介してデプロイされた後にリソースを更新または削除する Lambda 関数の Python コード。

  • code/layers/boto3_layer フォルダ – すべての Lambda 関数間で共有される Boto3 レイヤーを作成する AWS CDK スタック。

  • code/layers/opensearch_layer フォルダ – インデックスを作成するためのすべての依存関係をインストールする OpenSearch サーバーレスレイヤーを作成する AWS CDK スタック。

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

  • code/code_stack.py – AWS CDK は、AWS リソースを作成する Python ファイルを作成します。

  • app.py – ターゲット AWS アカウントに AWS リソースをデプロイする AWS CDK スタック Python ファイル。

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

  • cdk.json – リソースの作成に必要な値を提供する入力ファイル。また、context/configフィールドでは、それに応じてソリューションをカスタマイズできます。カスタマイズの詳細については、「追加情報」セクションを参照してください。

ベストプラクティス

エピック

タスク説明必要なスキル

アカウントとリージョンの変数をエクスポートします。

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

export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number> export CDK_DEFAULT_REGION=<Region>
AWS DevOps、 DevOps エンジニア

AWS CLI の名前付きプロファイルを設定します。

アカウントの AWS CLI 名前付きプロファイルを設定するには、「設定と認証情報ファイルの設定」の手順に従います。

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

リポジトリをローカルワークステーションにクローンします。

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

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

Python 仮想環境をセットアップします。

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

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

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

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

AWS CDK 環境を設定します。

コードを AWS CloudFormation テンプレートに変換するには、 コマンドを実行しますcdk synth

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

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

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

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

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

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

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

    cdk deploy コマンドは、レイヤー 3 コンストラクトを使用して、ドキュメントと CSV データセットファイルを S3 バケットにコピーするための複数の Lambda 関数を作成します。また、Amazon Bedrock エージェント、ナレッジベース、および Amazon Bedrock エージェント用の Action group Lambda 関数もデプロイします。

  4. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/cloudformation/ で CloudFormation コンソールを開きます。

  5. スタックが正常にデプロイされたことを確認します。手順については、「AWS CloudFormation コンソールでのスタックの確認」を参照してください。

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

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

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

ソリューションをテストした後、リソースをクリーンアップするには、 コマンドを実行しますcdk destroy

AWS DevOps、 DevOps エンジニア

関連リソース

AWS ドキュメント

その他の AWS リソース

その他のリソース

追加情報

チャットベースのアシスタントを独自のデータでカスタマイズする

カスタムデータを統合してソリューションをデプロイするには、以下の構造化されたガイドラインに従ってください。これらのステップは、シームレスで効率的な統合プロセスを実現するように設計されており、カスタムデータを使用してソリューションを効果的にデプロイできます。

ナレッジベースのデータ統合の場合

データ準備

  1. assets/knowledgebase_data_source/ ディレクトリを見つけます。

  2. データセットをこのフォルダに配置します。

設定の調整

  1. cdk.json ファイルを開きます。

  2. context/configure/paths/knowledgebase_file_name フィールドに移動し、それに応じて更新します。

  3. bedrock_instructions/knowledgebase_instruction フィールドに移動し、新しいデータセットのニュアンスとコンテキストを正確に反映するように更新します。

構造データ統合の場合

データ組織

  1. assets/data_query_data_source/ ディレクトリ内に、 などのサブディレクトリを作成しますtabular_data

  2. 構造化データセット (CSV、JSON、ORC、Parquet などの許容形式) をこの新しく作成されたサブフォルダに配置します。

  3. 既存のデータベースに接続する場合は、 create_sql_engine()の 関数を更新code/lambda/action-lambda/build_query_engine.pyしてデータベースに接続します。

設定とコードの更新

  1. cdk.json ファイルで、新しいデータパスに合わせて context/configure/paths/athena_table_data_prefixフィールドを更新します。

  2. データセットに対応する新しい text-to-SQL の例をcode/lambda/action-lambda/dynamic_examples.csv組み込んで修正します。

  3. 構造化データセットの属性をミラーcode/lambda/action-lambda/prompt_templates.pyリングするように修正します。

  4. cdk.json ファイルで、 context/configure/bedrock_instructions/action_group_descriptionフィールドを更新して Lambda Action group 関数の目的と機能を説明します。

  5. assets/agent_api_schema/artifacts_schema.json ファイルで、Action groupLambda 関数の新しい機能について説明します。

一般的な更新

cdk.json ファイルで、 context/configure/bedrock_instructions/agent_instructionセクションに、新しく統合されたデータを考慮して、Amazon Bedrock エージェントの意図した機能と設計目的を包括的に説明します。