導入
前提条件
ターゲット技術スタック
導入
便利な CDK コマンド
コード構造
独自のデータを使用してチャットボットをカスタマイズする
この GenAI ChatBot アプリケーションは、KnowledgeBase、Agent、および追加の AWS サーバーレス GenAI ソリューションを含む Amazon Bedrock で構築されました。提供されるソリューションは、EC2 インスタンスと EC2 インスタンスの価格設定の理解を利用するチャットボットを紹介します。このチャットボットは、自然言語を Amazon Athena クエリに変換し、複雑なデータセットを処理して利用する Amazon Bedrock の機能を示すものとして機能します。 LLamaIndex などのオープン ソース ツールは、データの処理と取得のためのシステムの機能を強化するために利用されます。このソリューションでは、複数の AWS リソースの統合も重視されています。これらのリソースは、ストレージ用の Amazon S3、検索拡張生成 (RAG) を容易にする Amazon Bedrock KnowledgeBase、データソース全体で複数ステップのタスクを実行する Amazon Bedrock エージェント、データを準備する AWS Glue、効率的なクエリを実行する Amazon Athena、Amazon Lambda で構成されます。コンテナを管理し、Amazon ECS がコンテナを監視します。これらのリソースを組み合わせて利用することで、チャットボットがデータベースやドキュメントからコンテンツを効率的に取得して管理できるようになり、高度なチャットボット アプリケーションの開発における Amazon Bedrock の機能が実証されます。
ドッカー
AWS CDK Toolkit 2.114.1+、インストール済み、インストール済み、設定済み。詳細については、AWS CDK ドキュメントの「AWS CDK の使用開始」を参照してください。
Python 3.11+、インストールおよび構成済み。詳細については、Python ドキュメントの「初心者ガイド/ダウンロード」を参照してください。
アクティブな AWS アカウント
us-east-1 または us-west-2 で AWS CDK を使用してブートストラップされた AWS アカウント。 Bedrock サービスで Claude モデルと Titan Embedding モデルへのアクセスを有効にします。
アマゾンの岩盤
Amazon OpenSearch サーバーレス
アマゾンECS
AWS グルー
AWSラムダ
アマゾンS3
アマゾンアテナ
エラスティック・ロード・バランサー
アプリをローカルで実行するには、まず次の内容を含む .env ファイルを「code/streamlit-app」フォルダーに追加します。
ACCOUNT_ID = <あなたのアカウント ID>AWS_REGION = <あなたのリージョン>LAMBDA_FUNCTION_NAME = invokeAgentLambda # 応答のために streamlit によって呼び出されるラムダ関数の選択の名前を設定します。現在エージェントを呼び出しています。
cdk.json
ファイルは、CDK ツールキットにアプリの実行方法を指示します。
このプロジェクトは、標準の Python プロジェクトと同様にセットアップされます。初期化プロセスでは、このプロジェクト内に virtualenv も作成され、 .venv
ディレクトリに保存されます。 virtualenv を作成するには、パスにvenv
パッケージにアクセスできるpython3
(または Windows の場合はpython
) 実行可能ファイルがあることが前提となります。何らかの理由で virtualenv の自動作成が失敗した場合は、virtualenv を手動で作成できます。
MacOS および Linux で virtualenv を手動で作成するには:
$ python3 -m venv .venv
init プロセスが完了し、virtualenv が作成されたら、次の手順を使用して virtualenv をアクティブ化できます。
$ ソース .venv/bin/activate
Windows プラットフォームの場合は、次のように virtualenv をアクティブ化します。
% .venvScriptsactivate.bat
virtualenv がアクティブ化されたら、必要な依存関係をインストールできます。
$ pip install -r 要件.txt
他の CDK ライブラリなどの追加の依存関係を追加するには、それらをsetup.py
ファイルに追加し、 pip install -r requirements.txt
コマンドを再実行します。
この時点で、このコードの CloudFormation テンプレートを合成できるようになります。
$ cdk シンセサイザー
他の CDK ライブラリなどの追加の依存関係を追加するには、それらをsetup.py
ファイルに追加し、 pip install -r requirements.txt
コマンドを再実行します。
特定のアカウントおよびリージョンで cdk を初めて実行する場合は、ブートストラップする必要があります。
$ cdk ブートストラップ
ブートストラップが完了したら、cdk のデプロイに進むことができます。
$ cdk デプロイ
初めてデプロイする場合、ECS (Amazon Elastic Container Service) で複数の Docker イメージを構築するプロセスに約 30 ~ 45 分かかる場合があります。完了するまでしばらくお待ちください。その後、チャットボット スタックのデプロイが開始されます。これには通常約 5 ~ 8 分かかります。
デプロイメントプロセスが完了すると、ターミナルに cdk の出力が表示され、CloudFormation コンソールでステータスを確認することもできます。
エージェントは、AWS コンソールでテストすることも、CloudFormation のチャットボットスタックの出力にリストされているストリームリット アプリ URL を通じてテストすることもできます。
将来のコストを避けるために CDK の使用を終了した後に CDK を削除するには、コンソールから削除するか、ターミナルで次のコマンドを実行します。
$ cdk 破壊
CDK によって生成された S3 バケットを手動で削除する必要がある場合もあります。コストの発生を避けるために、生成されたリソースはすべて削除してください。
cdk ls
アプリ内のすべてのスタックをリストします
cdk synth
合成された CloudFormation テンプレートを出力します
cdk deploy
このスタックをデフォルトの AWS アカウント/リージョンにデプロイします
cdk diff
デプロイされたスタックと現在の状態を比較します
cdk docs
CDK ドキュメントを開く
cdk destroy
dstroys 1 つ以上の指定されたスタック
code # Root folder for code for this solution ├── lambdas # Root folder for all lambda functions │ ├── action-lambda # Lambda function that acts as an action for the Amazon Bedrock Agent │ ├── create-index-lambda # Lambda function that create Amazon Opensearch serverless index as Amazon Bedrock Knowlege base's vector database │ ├── invoke-lambda # Lambda function that invokes Amazon Bedrock Agent, which is called diretly from the streamlit app │ └── update-lambda # Lambda function that update/delete resources after AWS resources deployed via AWS CDK. ├── layers # Root folder for all lambda layers │ ├── boto3_layer # Boto3 layer that is shared across all lambdas │ └── opensearch_layer # opensearh layer that installs all dependencies for create Amazon Opensearch serverless index. ├── streamlit-app # Steamlit app that interacts with the Amazon Bedrock Agent └── code_stack.py # Amazon CDK stack that deploys all AWS resources
ソリューションを展開するためにカスタム データを統合するには、要件に合わせて調整された次の構造化ガイドラインに従ってください。
assets/knowledgebase_data_source/
ディレクトリを見つけます。
データセットをこのフォルダー内に配置します。
cdk.json
ファイルにアクセスします。
context/configure/paths/knowledgebase_file_name
フィールドに移動し、それに応じて更新します。
さらに、 cdk.json
ファイルのbedrock_instructions/knowledgebase_instruction
フィールドを変更して、新しいデータセットのニュアンスとコンテキストを正確に反映します。
assets/data_query_data_source/
ディレクトリ内に、サブディレクトリ (たとえば、tabular_data) を作成します。
構造化データセット (受け入れ可能な形式にはCSV 、 JSON 、 ORC 、およびParquetが含まれます) を、この新しく作成したサブフォルダーに配置します。
既存のデータベースに接続している場合は、 code/lambda/action-lambda/build_query_engine.py
の関数create_sql_engine()
を更新してデータベースに接続します。
cdk.json
ファイルのcontext/configure/paths/athena_table_data_prefix
フィールドを更新して、新しいデータ パスに合わせます。
データセットに対応する SQL サンプルに新しいテキストを組み込んで、 code/lambda/action-lambda/dynamic_examples.csv
を改訂します。
code/lambda/action-lambda/prompt_templates.py
を修正して、新しい表形式データの属性をミラーリングします。
cdk.json
ファイルのcontext/configure/bedrock_instructions/action_group_description
フィールドを変更して、データセットに合わせたアクション ラムダの目的と機能を明確にします。
アクション ラムダの新しい機能を、 assets/agent_api_schema/artifacts_schema.json
ファイルに反映します。
cdk.json
ファイルのcontext/configure/bedrock_instructions/agent_instruction section
の下に、新しく統合されたデータを考慮して、Amazon Bedrock Agent の意図された機能と設計目的の包括的な説明を提供します。
これらの手順は、シームレスで効率的な統合プロセスを保証するように設計されており、オーダーメイドのデータを使用してソリューションを効果的に展開できるようになります。