翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化されたチャットベースのアシスタントを開発する
作成者: Jundong Qiao (AWS)、Kara Yang (AWS)、Kioua Jackson (AWS)、Noah Hamilton (AWS)、Praveen Kumar Jeyarajan (AWS)、Shuai Cao (AWS)
概要
多くの組織は、包括的な回答を提供するために多様なデータソースをオーケストレーションできるチャットベースのアシスタントを作成する際に課題に直面しています。このパターンは、ドキュメントとデータベースの両方からのクエリに簡単に回答できるチャットベースのアシスタントを開発するためのソリューションを示しています。
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 エラスティックコンテナサービス (Amazon ECS)
AWS Fargate
Amazon Virtual Private Cloud (Amazon VPC)
ターゲット アーキテクチャ

この図は、複数の AWS サービスを使用した、単一の AWS リージョン内の包括的な AWS クラウドネイティブセットアップを示しています。チャットベースのアシスタントの主なインターフェイスは、Amazon ECS クラスターでホストされている StreamlitInvocation
Lambda 関数をアクティブ化し、Amazon Bedrock のエージェントとインターフェイスします。このエージェントは、Amazon Bedrock のナレッジベースを参照するかAgent executor
、Lambda 関数を呼び出して、ユーザーの問い合わせに応答します。この関数は、事前定義された 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 Serverless インデックスは Amazon Bedrock のナレッジベースのベクトルデータベースとして機能します。
Amazon Simple Storage Service (Amazon S3) は、どのようなデータ量であっても、データを保存、保護、取得することを支援するクラウドベースのオブジェクトストレージサービスです。
その他のツール
Streamlit
は、データアプリケーションを作成するためのオープンソースの Python フレームワークです。
コードリポジトリ
このパターンのコードは、GitHub の genai-bedrock-agent-chatbot
assets
フォルダ – アーキテクチャ図やパブリックデータセットなどの静的アセット。code/lambdas/action-lambda
フォルダ – Amazon Bedrock エージェントのアクションとして機能する Lambda 関数の Python コード。code/lambdas/create-index-lambda
folder – OpenSearch Serverless インデックスを作成する Lambda 関数の Python コード。code/lambdas/invoke-lambda
フォルダ – Streamlit アプリケーションから直接呼び出される Amazon Bedrock エージェントを呼び出す Lambda 関数の Python コード。code/lambdas/update-lambda
フォルダ – AWS CDK を介して AWS リソースがデプロイされた後にリソースを更新または削除する Lambda 関数の Python コード。code/layers/boto3_layer
フォルダ – すべての Lambda 関数で共有される Boto3 レイヤーを作成する AWS CDK スタック。code/layers/opensearch_layer
フォルダ – インデックスを作成するためのすべての依存関係をインストールする OpenSearch Serverless レイヤーを作成する 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
フィールドでは、それに応じてソリューションをカスタマイズできます。カスタマイズの詳細については、「追加情報」セクションを参照してください。
ベストプラクティス
ここに記載されているコード例は、proof-of-concept (PoC) またはパイロットのみを目的としています。コードを本番環境に移行する場合は、次のベストプラクティスを使用してください。
Lambda 関数のモニタリングとアラートを設定します。詳細については、「Lambda 関数をモニタリングおよびトラブルシューティングする」を参照してください。ベストプラクティスについては、AWS Lambda 関数を使用するためのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
アカウントとリージョンの変数をエクスポートします。 | 環境変数を使用して AWS CDK の AWS 認証情報を指定するには、次のコマンドを実行します。
| AWS DevOps、DevOps エンジニア |
AWS CLI の名前付きプロファイルを設定します。 | アカウントの AWS CLI 名前付きプロファイルを設定するには、「設定ファイルと認証情報ファイルの設定」の手順に従います。 | AWS DevOps、DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
リポジトリをローカルワークステーションにクローンします。 | リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。
| DevOps エンジニア、AWS DevOps |
Python 仮想環境をセットアップします。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。
必要な依存関係を設定するには、次のコマンドを実行します。
| DevOps エンジニア、AWS DevOps |
AWS CDK 環境を設定します。 | コードを AWS CloudFormation テンプレートに変換するには、コマンド を実行します | AWS DevOps、DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
アカウントにリソースをデプロイします。 | AWS CDK を使用して AWS アカウントにリソースをデプロイするには、次の手順を実行します。
デプロイが成功したら、CloudFormation コンソールの出力タブで提供されている URL を使用して、チャットベースのアシスタントアプリケーションにアクセスできます。 | DevOps エンジニア、AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS リソースを削除します。 | ソリューションをテストした後、リソースをクリーンアップするには、コマンド を実行します | AWS DevOps、DevOps エンジニア |
関連リソース
AWS ドキュメント
Amazon Bedrock リソース:
AWS CDK リソース:
その他の AWS リソース
その他のリソース
追加情報
チャットベースのアシスタントを独自のデータでカスタマイズする
ソリューションをデプロイするためにカスタムデータを統合するには、以下の構造化ガイドラインに従ってください。これらのステップは、シームレスで効率的な統合プロセスを実現するように設計されており、カスタムデータを使用してソリューションを効果的にデプロイできます。
ナレッジベースのデータ統合の場合
データ準備
assets/knowledgebase_data_source/
ディレクトリを見つけます。データセットをこのフォルダに配置します。
設定の調整
cdk.json
ファイルを開きます。context/configure/paths/knowledgebase_file_name
フィールドに移動し、それに応じて更新します。bedrock_instructions/knowledgebase_instruction
フィールドに移動し、新しいデータセットのニュアンスとコンテキストを正確に反映するように更新します。
構造データ統合の場合
データ組織
assets/data_query_data_source/
ディレクトリ内に、 などのサブディレクトリを作成しますtabular_data
。構造化データセット (CSV、JSON、ORC、Parquet などの許容される形式) をこの新しく作成されたサブフォルダに配置します。
既存のデータベースに接続する場合は、 の 関数を更新
create_sql_engine()
code/lambda/action-lambda/build_query_engine.py
してデータベースに接続します。
設定とコードの更新
cdk.json
ファイルで、新しいデータパスに合わせてcontext/configure/paths/athena_table_data_prefix
フィールドを更新します。データセットに対応する新しい text-to-SQL の例
code/lambda/action-lambda/dynamic_examples.csv
を組み込んで を変更します。を改訂
code/lambda/action-lambda/prompt_templates.py
して、構造化データセットの属性をミラーリングします。cdk.json
ファイルで、context/configure/bedrock_instructions/action_group_description
フィールドを更新して LambdaAction group
関数の目的と機能について説明します。assets/agent_api_schema/artifacts_schema.json
ファイルで、Action group
Lambda 関数の新しい機能について説明します。
一般的な更新
cdk.json
ファイルで、 context/configure/bedrock_instructions/agent_instruction
セクションに、新しく統合されたデータを考慮して、Amazon Bedrock エージェントの意図した機能と設計目的の包括的な説明を入力します。