

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

# Amazon Bedrock エージェントとナレッジベースを使用して、完全に自動化したチャットベースのアシスタントを開発する
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases"></a>

*Amazon Web Services、Jundong Qiao、Shuai Cao、Noah Hamilton、Kioua Jackson、Praveen Kumar Jeyarajan、Kara Yang*

## 概要
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-summary"></a>

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

このフルマネージド生成 AI サービスは、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) をはじめとして、さまざまな高度な基盤モデル (FM) を提供しています。これにより、プライバシーとセキュリティに重点を置いた生成 AI アプリケーションを簡単に効率よく作成できます。ドキュメントの取得において、[検索拡張生成 (RAG)](https://docs.aws.amazon.com/sagemaker/latest/dg/jumpstart-foundation-models-customize-rag.html) は重要な機能です。[ナレッジベース](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)を使用して、外部ソースからのコンテキストに関連する情報で FM プロンプトを補強します。[Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) インデックスは、Amazon Bedrock ナレッジベースの背後にあるベクトルデータベースとして機能します。この統合は、不正確さを最小限に抑え、応答が事実関係のドキュメントに確実に基づくようにするための慎重なプロンプトエンジニアリングによって強化されます。データベースクエリの場合、Amazon Bedrock の FM により、テキストクエリが構造化された SQL クエリに変換され、特定のパラメータが組み込まれます。これにより、データベースによって管理される[AWS Glue データベース](https://docs.aws.amazon.com/glue/latest/dg/define-database.html)からデータを正確に取得できます。これらのクエリには [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) が使用されます。

より複雑なクエリを処理し、包括的な回答を得るには、ドキュメントとデータベースの両方から取得された情報が必要です。[Amazon Bedrock エージェント](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) は、複雑なタスクを理解し、オーケストレーションのためによりシンプルなタスクに分割できる自律型エージェントを構築するのに役立つ生成 AI 機能です。簡素化されたタスクから取得されるインサイトが Amazon Bedrock の自律型エージェントによって結び付けられることにより、情報の合成が強化され、より詳細で包括的な回答が得られます。このパターンでは、Amazon Bedrock および関連する生成 AI サービスと自動ソリューション内の機能を使用してチャットベースのアシスタントを構築する方法を説明します。

## 前提条件と制限
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント
+ Docker が[インストールされていること](https://docs.docker.com/engine/install/)
+ AWS Cloud Development Kit (AWS CDK)、 `us-east-1` または に[インストール](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_tools)および[ブートストラップ](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_bootstrap) `us-west-2` AWS リージョン
+ AWS CDK Toolkit バージョン 2.114.1 以降、[インストール](https://docs.aws.amazon.com/cdk/v2/guide/cli.html)済み
+ AWS Command Line Interface (AWS CLI)、[インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)および[設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)済み
+ Python バージョン 3.11 以降が[インストールされていること](https://www.python.org/downloads/)
+ Amazon Bedrock で、Claude 2、Claude 2.1、Claude Instant、Titan Embeddings G1 – Text への[アクセスを有効にすること](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)

**制限事項**
+ このソリューションは 1 つの にデプロイされます AWS アカウント。
+ このソリューションは、Amazon Bedrock と Amazon OpenSearch Serverless がサポートされている AWS リージョン でのみデプロイできます。詳細は、[Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/bedrock-regions.html) ドキュメントおよび [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html#serverless-regions) ドキュメントを参照してください。

**製品バージョン**
+ Llama-index バージョン 0.10.6 以降
+ Sqlalchemy バージョン 2.0.23 以降
+ Opensearch-py バージョン 2.4.2 以降
+ Requests\$1aws4auth バージョン 1.2.3 以降
+ AWS SDK for Python (Boto3) バージョン 1.34.57 以降

## アーキテクチャ
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-architecture"></a>

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

[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/v2/guide/home.html) は、コードでクラウドインフラストラクチャを定義し、それをプロビジョニングするためのオープンソースのソフトウェア開発フレームワークです AWS CloudFormation。このパターンで使用される AWS CDK スタックは、次の AWS リソースをデプロイします。 
+ AWS Key Management Service (AWS KMS)
+ Amazon Simple Storage Service (Amazon S3)
+ AWS Glue Data Catalog 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](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 

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

![\[Amazon Bedrock ナレッジベースとエージェントを使用したアーキテクチャ図\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/15372718-3a5d-4918-9cfa-422c455f288d/images/ff19152e-0bb6-4758-a6dd-4f6140e55113.png)


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

## ツール
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-tools"></a>

**AWS のサービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。
+ [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/what-is-bedrock.html) は、主要な AI スタートアップ企業や Amazon が提供する高パフォーマンスな基盤モデル (FM) を、統合 API を通じて利用できるようにするフルマネージド型サービスです。
+ [AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html) は、 AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。
+ 「[Amazon Elastic Container Service (Amazon ECS)](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。
+ 受信したアプリケーションまたはネットワークトラフィックを複数のターゲットに分散するには、[Elastic Load Balancing](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/what-is-load-balancing.html) を使用します。例えば、1 つまたは複数のアベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、コンテナ、および IP アドレスにトラフィックを分散できます。
+ [AWS Glue](https://docs.aws.amazon.com/glue/) は、フルマネージド型の抽出、変換、ロード (ETL) サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。このパターンでは、 クローラと AWS Glue AWS Glue Data Catalog テーブルを使用します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon OpenSearch Serverless](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-overview.html) は、Amazon OpenSearch Service 用のオンデマンドサーバーレス設定です。このパターンでは、OpenSearch Serverless インデックスは Amazon Bedrock ナレッジベースのベクトルデータベースとして機能します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**その他のツール**
+ [Streamlit](https://docs.streamlit.io/) は、データアプリケーションを作成するためのオープンソースの Python フレームワークです。

**コードリポジトリ**

このパターンのコードは、GitHub の [genai-bedrock-agent-chatbot](https://github.com/awslabs/genai-bedrock-agent-chatbot/) リポジトリで入手できます。コードリポジトリには以下のファイルとフォルダが含まれています。
+ `assets` フォルダ – アーキテクチャ図やパブリックデータセットなどの静的アセット。
+ `code/lambdas/action-lambda` フォルダ – Amazon Bedrock エージェントのアクションとして機能する Lambda 関数の Python コード。
+ `code/lambdas/create-index-lambda` フォルダ – OpenSearch Serverless インデックスを作成する Lambda 関数の Python コード。
+ `code/lambdas/invoke-lambda` フォルダ – Amazon Bedrock エージェントを呼び出す Lambda 関数の Python コード。Streamlit アプリケーションから直接呼び出されます。
+ `code/lambdas/update-lambda` フォルダ – を介してリソースがデプロイされた後に AWS リソースを更新または削除する Lambda 関数の Python コード AWS CDK。
+ `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 リソースを作成する AWS CDK コンストラクト Python ファイル。
+ `app.py` – ターゲット AWS アカウントに AWS リソースをデプロイする AWS CDK スタック Python ファイル。
+ `requirements.txt` – にインストールする必要があるすべての Python 依存関係のリスト AWS CDK。
+ `cdk.json` — リソースの作成に必要な値を提供する入力ファイル。また、`context/config` フィールドでは、状況に応じてソリューションをカスタマイズできます。カスタマイズの詳細は、「[追加情報](#develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional)」セクションを参照してください。

## ベストプラクティス
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-best-practices"></a>
+ ここに示すコード例は、PoC (概念実証) またはパイロットのみを目的としています。コードを本番環境に移行する場合は、次のベストプラクティスに従ってください。
  + [Amazon S3 アクセスログ](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html)を有効にする
  + [VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)を有効にする
+ Lambda 関数のモニタリングとアラートを設定します。詳細については、「[Lambda 関数をモニタリングおよびトラブルシューティングする](https://docs.aws.amazon.com/lambda/latest/dg/lambda-monitoring.html)」を参照してください。ベストプラクティスについては、「 [AWS Lambda 関数を使用するためのベストプラクティス](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)」を参照してください。

## エピック
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-epics"></a>

### ローカルワークステーションで AWS 認証情報を設定する
<a name="set-up-aws-credentials-on-your-local-workstation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウントとリージョンの変数をエクスポートする。 | 環境変数 AWS CDK を使用して の AWS 認証情報を提供するには、次のコマンドを実行します。<pre>export CDK_DEFAULT_ACCOUNT=<12-digit AWS account number><br />export CDK_DEFAULT_REGION=<Region></pre> | AWS DevOps、DevOps エンジニア | 
|  AWS CLI 名前付きプロファイルを設定します。 | アカウント AWS CLI の名前付きプロファイルを設定するには、[「設定と認証情報ファイルの設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」の手順に従います。 | AWS DevOps、DevOps エンジニア | 

### 環境をセットアップします。
<a name="set-up-your-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ローカルワークステーションにリポジトリのクローンを作成する。 | リポジトリのクローンを作成するには、ターミナルで次のコマンドを実行します。<pre>git clone https://github.com/awslabs/genai-bedrock-agent-chatbot.git</pre> | DevOps エンジニア、AWS DevOps | 
| Python 仮想環境をセットアップする。 | Python 仮想環境をセットアップするには、次のコマンドを実行します。<pre>cd genai-bedrock-agent-chatbot<br />python3 -m venv .venv<br />source .venv/bin/activate</pre>必要な依存関係をセットアップするには、次のコマンドを実行します。<pre>pip3 install -r requirements.txt</pre> | DevOps エンジニア、AWS DevOps | 
|  AWS CDK 環境をセットアップします。 | コードを AWS CloudFormation テンプレートに変換するには、 コマンドを実行します`cdk synth`。 | AWS DevOps、DevOps エンジニア | 

### アプリケーションを設定してデプロイする
<a name="configure-and-deploy-the-application"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| アカウントにリソースをデプロイします。 |  AWS アカウント を使用して にリソースをデプロイするには AWS CDK、以下を実行します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases.html)デプロイが正常に完了したら、CloudFormation コンソールの**出力**タブにある URL を使用して、チャットベースのアシスタントアプリケーションにアクセスできます。 | DevOps エンジニア、AWS DevOps | 

### ソリューション内のすべての AWS リソースをクリーンアップする
<a name="clean-up-all-aws-resources-in-the-solution"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  AWS リソースを削除します。 | ソリューションをテストした後、リソースをクリーンアップするには、`cdk destroy` コマンドを実行します。 | AWS DevOps、DevOps エンジニア | 

## 関連リソース
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-resources"></a>

**AWS ドキュメント**
+ Tag Amazon Bedrock リソース:
  + [モデルアクセス](https://docs.aws.amazon.com/bedrock/latest/userguide/model-access.html)
  + [基盤モデルの推論パラメータ](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters.html)
  + [Amazon Bedrock のエージェント](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html)
  + [Amazon Bedrock ナレッジベース](https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html)
+ [Python で Lambda 関数を構築する](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html)
+ AWS CDK リソース:
  + [の使用を開始する AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html)
  + [一般的な AWS CDK 問題のトラブルシューティング](https://docs.aws.amazon.com/cdk/v2/guide/troubleshooting.html)
  + [Python AWS CDK での の使用](https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-python.html)
+ [での生成 AI Application Builder AWS](https://docs.aws.amazon.com/solutions/latest/generative-ai-application-builder-on-aws/solution-overview.html)

**その他の AWS リソース**
+ [Amazon OpenSearch Serverless 用ベクトルエンジン](https://aws.amazon.com/opensearch-service/serverless-vector-engine/)

**その他のリソース**
+ [LlamaIndex ドキュメント](https://docs.llamaindex.ai/en/stable/)
+ [Streamlit ドキュメント](https://docs.streamlit.io/)

## 追加情報
<a name="develop-a-fully-automated-chat-based-assistant-by-using-amazon-bedrock-agents-and-knowledge-bases-additional"></a>

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

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

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

**データ準備**

1. `assets/knowledgebase_data_source/` ディレクトリの場所を確認します。

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

**設定の調整**

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

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

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

*構造化データ統合の場合*

**データの整理**

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

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

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

**設定とコードの更新**

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

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

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

1. `cdk.json` ファイルで、`Action group` Lambda 関数の目的と機能の説明を記述するように `context/configure/bedrock_instructions/action_group_description` フィールドを更新します。

1. `assets/agent_api_schema/artifacts_schema.json` ファイルに、`Action group` Lambda 関数の新しい機能の説明を記述します。

*一般的な更新*

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