Foundational LLM Chat は、AWS CDK と Converse API を使用して構築された Chainlit アプリケーションであり、Amazon Bedrock 言語モデルと対話できるようになります。 Amazon Bedrock LLM とチャットしたり、画像やドキュメントをアップロードしたり、マルチモーダルな応答を受信したりするためのユーザーフレンドリーなインターフェイスを提供します。アプリケーションは、Amazon Bedrock、Amazon Elastic Container Service、Amazon Cognito、Amazon CloudFront などのさまざまなサービスを使用して AWS にデプロイされます。
アーキテクチャ図は、Foundational LLM Chat アプリケーションの AWS デプロイメントを示しています。ユーザーは、Amazon Cognito 認証によって保護された Web インターフェイスを通じてアプリケーションと対話します。アプリケーションは、Amazon CloudFront の CDN を使用してグローバルに分散されます。特定の AWS リージョン内では、コンテナ化されたデプロイメントに Amazon ECS を使用して、アプリケーションが複数のアベイラビリティーゾーンにデプロイされます。バックエンドは Amazon Bedrock と統合されてさまざまな言語モデルを活用し、ユーザーが AI アシスタントとマルチモーダルな会話を行えるようにします。
アプリケーションは、 ./bin
bin フォルダー内のconfig.json
ファイルを通じて構成されます。主な構成オプションには次のものがあります。
default_system_prompt
: このフィールドには、以下のbedrock_models
フィールドで指定されていない場合にチャットボットによって使用されるデフォルトのシステム プロンプトが含まれます。 AI アシスタントの最初の指示と動作を定義します。この値を変更して、アシスタントのペルソナまたは最初のプロンプトを変更できます。
max_characters_parameter
: このフィールドは、入力テキストに許可される最大文字数を指定します。文字列"None"
に設定すると、文字制限はありません。必要に応じて、この値を変更して入力テキストの長さを制限できます。
max_content_size_mb_parameter
: このフィールドは、入力コンテンツ (画像など) の最大サイズをメガバイト単位で設定します。文字列"None"
に設定すると、サイズ制限はありません。この値を変更して、入力コンテンツの最大サイズを制限できます。
default_aws_region
: このフィールドは、アプリケーションがデプロイされる AWS リージョンを指定します。 Amazon Bedrock モデルフィールドごとにリージョンを設定することもできます。
prefix
: このフィールドでは、アプリケーションによって作成されたリソース名のプレフィックスを設定できます。空のままにすることも、必要に応じてカスタム プレフィックスを指定することもできます。
このフィールドには、チャットボットが使用できる Bedrock モデルの辞書が含まれています。各モデルはキー(「Sonnet」、「Haiku」など) によって識別され、そのキーは Chainlit Chatprofile で使用される名前です。各モデルには少なくとも次のプロパティがあります。
id
: Amazon Bedrock モデルの ID または ARN。利用可能なモデル ID は AWS ドキュメントで確認できます。region
: モデルにアクセスするために使用される領域の配列。クロスリージョン推論を有効にしていない場合は 1 つ、クロスリージョン推論の場合は複数です。オプションの構成パラメータには次のものがあります。
inference_profile
: クロスリージョン推論の設定prefix
: 地域の接頭辞 (例: "us")region
: 一次推論領域system_prompt
: カスタム システム プロンプトcost
: 価格情報input_1k_price
: 1,000 入力トークンのコスト (USD)。さまざまなモデルの料金情報は、AWS Bedrock 料金ページで確認できます。output_1k_price
: 1,000 出力トークンのコスト (USD)。vision
[オプション] : true または false。モデルに対してビジョン機能が有効になっている場合。document
[オプション] : true または false。モデルのドキュメント機能が有効になっている場合](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。tool
[オプション] : true または false。モデルのツール機能が有効になっている場合](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference.html)。default
[オプション] : true または false。デフォルトで選択されているモデルbedrock_models
セクションを変更して追加のモデルを含めたり、要件に応じて既存のモデルを更新したりできます。
モデル ID と価格情報を取得する方法の例を次に示します。
モデル ID または ARN を見つけるには、AWS Bedrock モデル ID のドキュメントを参照してください。たとえば、Claude 3 Sonnet モデルの ID はanthropic.claude-3-sonnet-20240229-v1:0
です。
料金情報を確認するには、AWS Bedrock 料金ドキュメントを参照してください。 Claude 3 Sonnet モデルの入力および出力の価格は次のとおりです。
config.json
ファイルに必要な変更を加えた後、README の説明に従ってデプロイを続行できます。
json の例を次に示します。
{
"default_system_prompt" : " you are an assistant " ,
"max_characters_parameter" : " None " ,
"max_content_size_mb_parameter" : " None " ,
"default_aws_region" : " us-west-2 " ,
"prefix" : " " ,
"bedrock_models" : {
"Claude Sonnet 3.5 New" : {
"system_prompt" : " you are an assistant " ,
"id" : " us.anthropic.claude-3-5-sonnet-20241022-v2:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " , " us-east-2 " ],
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.015
},
"default" : true ,
"vision" : true ,
"document" : true ,
"tool" : true
},
"Meta Llama 3.2 90B Vision Instruct" : {
"id" : " us.meta.llama3-2-90b-instruct-v1:0 " ,
"inference_profile" : {
"prefix" : " us " ,
"region" : " us-west-2 "
},
"region" : [ " us-east-1 " , " us-west-2 " ],
"cost" : {
"input_1k_price" : 0.002 ,
"output_1k_price" : 0.002
},
"vision" : true ,
"document" : true ,
"tool" : true
},
"Mistral Large 2" : {
"id" : " mistral.mistral-large-2407-v1:0 " ,
"cost" : {
"input_1k_price" : 0.003 ,
"output_1k_price" : 0.009
},
"vision" : false ,
"document" : true ,
"tool" : true
}
}
}
このアプリケーションは、Amazon Bedrock Prompt Manager を次の目的で利用します。
現在、アプリケーションは 2 つの自動変数置換をサポートしています。
%Y-%m-%d
に置き換えられます。%Y-%m-%d %H:%M:%S UTC
に置き換えられますchainlit_image/foundational-llm-chat_app/massages_utils.py
内のextract_and_process_prompt
関数を編集して、より直接的な置換を追加できます。
このアプリケーションは Amazon Bedrock の Converse API を使用して、以下を提供します。
すべてのシステム プロンプトは Amazon Bedrock Prompt Manager を通じて保存および管理され、以下を提供します。
システム プロンプトを使用して言語モデルの動作を構成する場合、セキュリティへの影響を考慮し、潜在的な誤用や脆弱性を防ぐ措置を講じることが重要です。重大なリスクの 1 つはプロンプト インジェクションです。プロンプト インジェクションでは、悪意のある入力によってシステム プロンプトが意図しない方法で操作され、有害な出力や偏った出力が生じる可能性があります。
次のガイドを参照することをお勧めします: ジェイルブレイクとプロンプト インジェクションの軽減。
プロンプト エンジニアリングとは、言語モデルをガイドして目的の出力を生成するためのプロンプトや指示を注意深く作成する実践を指します。効果的なプロンプトエンジニアリングは、言語モデルが特定のコンテキストとタスクを理解し、適切に応答することを保証するために重要です。
次のコースは、Bedrock: Prompt Engineering with Anthropic Claude v3 を使用して、Claude 内で最適なプロンプトを設計する方法を段階的に包括的に理解することを目的としています。
このガイドでは、初級、中級、上級の 3 つのレベルに分かれた一連のレッスンと演習を通じて、プロンプト エンジニアリングのためのさまざまなテクニックとベスト プラクティスについて説明します。
このガイドで概説されている原則と手法に従うことで、言語モデル アプリケーションのパフォーマンスと信頼性を向上させることができ、AI アシスタントがより適切で一貫性のあるコンテキストを認識した応答を生成できるようになります。
AWS Cloud9 を使用してデプロイすることをお勧めします。 Cloud9 を使用してソリューションをデプロイする場合は、続行する前に次のものが必要です。
m5.large
選択します。Amazon Linux 2023
プラットフォームとして使用します。 AWS Cloud9 を使用しないことに決めた場合は、環境が次の前提条件を満たしていることを確認してください。
環境が次の前提条件を満たしていることを確認してください。
あなたが持っている:
AWS アカウント
AWS サンプルに含まれるリソースの作成を可能にするアクセス ポリシー
コンソールとプログラムによるアクセスの両方
NodeJS がインストールされました
nvm
使用している場合は、続行する前に次のコマンドを実行できます。 nvm install --lts
NPMがインストールされました
nvm
使用している場合は、続行する前に次のコマンドを実行できます。 nvm install-latest-npm
AWS CLI がインストールされ、AWS アカウントで使用するように設定されている
AWS CDK CLIがインストールされている
Finch がインストールされているか、Docker がインストールされているか
デプロイリージョンで Amazon Bedrock モデルへのアクセスを有効にする: Amazon Bedrock モデルへのアクセスを有効にする方法。
次の少なくとも 1 つを有効にします。
リポジトリのクローンを作成し、フォルダーを開いて、依存関係をインストールします。
git clone https://github.com/aws-samples/foundational-llm-chat.git
cd foundational-llm-chat
npm install
[デプロイメント リージョンでこれまでに実行したことがない場合のみオプション] CDK 環境をブートストラップします。
cdk bootstrap
スタックを構築してデプロイします。
cdk deploy --region YOUR_DEPLOY_REGION
YOUR_DEPLOY_REGION は、アプリケーションをデプロイする AWS リージョンです。例: us-west-2
。
Docker の代わりに Finch を使用している場合は、次の例のようにコマンドの先頭にCDK_DOCKER=finch
を追加してください。
CDK_DOCKER=finch cdk deploy --region us-west-2
これにより、ECS クラスター、Cognito ユーザー プール、CloudFront ディストリビューションなど、必要なすべてのリソースが AWS 上に作成されます。
デプロイが完了すると、CloudFront のディストリビューション URL がターミナルに表示されます。この URL を使用して、foundational-llm-chat アプリケーションにアクセスします。
デプロイ後は、次のような内容が得られます。
✅ Foundational-LLM-ChatStack
Deployment time: 465.09s
Outputs:
FoundationalLlmChatStack.CognitoUserPool = ID
FoundationalLlmChatStack.NetworkingFoundationalLlmChatChatbotStack = CLOUDFRONT_DISTRIBUTION_ADDRESS
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceLoadBalancer = ECS_LOAD_BALANCER
FoundationalLlmChatStack.ecsApplicationFoundationalLlmChatServiceServiceURL = ECS_LOAD_BALANCER_ADDRESS
Stack ARN: ARN
Total time: 469.14s
Amazon CloudFront ディストリビューションは次の行に示されています: FoundationalLlmChatStack.NetworkingFoundationalLlmChat = CLOUDFRONT_DISTRIBUTION_ADDRESS
foundational-llm-chat-user-pool
という名前のユーザー プールが見つかります。このユーザー プールを開き、電子メール アドレスも検証するユーザーを作成します。不必要なコストの発生を避けるために、このサンプルで作成されたリソースを使用し終わったら、クリーンアップして削除することをお勧めします。スタックと関連リソースを削除するには、次の手順に従います。
Foundational-LLM-ChatStack
という名前のスタックに移動します。これにより、ECS クラスター、Cognito ユーザー プール、CloudFront ディストリビューション、およびその他すべての関連リソースを含むスタック全体が削除されます。
あるいは、AWS CDK を使用してコマンドラインからスタックを削除することもできます。
cdk destroy --region YOUR_DEPLOY_REGION
YOUR_DEPLOY_REGION
、アプリケーションをデプロイした AWS リージョンに置き換えます。
スタックを削除しても、デプロイ中に作成された CloudWatch ログと Amazon ECS タスク定義は自動的に削除されないことに注意してください。これらのリソースが不要になった場合は、追加コストの発生を避けるために手動で削除することをお勧めします。
現在のアーキテクチャは、Foundational LLM Chat アプリケーションをデプロイするための適切な開始点を提供しますが、実稼働対応のデプロイメントには追加の考慮事項があります。
現在のアーキテクチャでは、CloudFront ディストリビューションと Application Load Balancer (ALB) 間の通信は HTTP 経由で行われます。運用環境の場合は、安全な通信のために HTTPS (TLS/SSL) を使用することを強くお勧めします。
両方のレベル (ALB および ECS タスク) で TLS 終端を使用して HTTPS を有効にすると、エンドツーエンドの暗号化が保証され、アプリケーションのセキュリティが強化されます。
この AWS サンプルは、デモンストレーションおよび教育目的のみを目的としています。これは、追加の変更や強化を行わずに実稼働環境で使用するように設計されていません。このアプリケーションを運用環境に展開する前に、特定の要件とベスト プラクティスに基づいて徹底的なテスト、セキュリティ評価、最適化を実施することが重要です。
クロードのシステム プロンプトは、Anthropic ドキュメントの「システム プロンプト」から直接入手できます。
貢献は大歓迎です!通常の Git ワークフローに従ってください。
このライブラリは、MIT-0 ライセンスに基づいてライセンスされています。 LICENSE ファイルを参照してください。
このサンプルのコンテンツを運用目的で使用する前に、独自の独立した評価を行うことを検討する必要があります。これには、特定の品質管理の実践と基準に基づいて、このサンプルで提供されるコンテンツのテスト、保護、最適化が (とりわけ) 含まれる場合があります。