Tip
🔔**Claude v3 (Sonnet) による画像とテキスト両方を使ったチャットが可能になりました。** 詳細はReleaseをご確認ください。
Warning
現在のバージョン(v0.4.x)は、DynamoDB テーブルスキーマの変更のため、過去バージョン(~v0.3.0)とは互換性がありません。以前のバージョンから v0.4.x へアップデートすると、既存の対話記録は全て破棄されますので注意が必要です。
このリポジトリは、生成系 AI を提供するAmazon Bedrockの基盤モデルの一つである、Anthropic 社製 LLM Claudeを利用したチャットボットのサンプルです。
Claude 3 Sonnetによるテキストと画像の両方を利用したチャットが可能です。
外部のナレッジおよび具体的なインストラクションを組み合わせ、ボットをカスタマイズすることが可能です(外部のナレッジを利用した方法はRAGとして知られています)。なお、作成したボットはアプリケーションのユーザー間で共有することができます。
- us-east-1 リージョンにて、Bedrock Model access >
Manage model access
>Anthropic / Claude
,Anthropic / Claude Instant
,Anthropic / Claude 3 Sonnet
,Cohere / Embed Multilingual
をチェックし、Save changes
をクリックします
- 下記のコマンドでデプロイ実行します
git clone https://github.com/aws-samples/bedrock-claude-chat.git
cd bedrock-claude-chat
chmod +x bin.sh
./bin.sh
- 30 分ほど経過後、下記の出力が得られるのでブラウザからアクセスします
Frontend URL: https://xxxxxxxxx.cloudfront.net
上記のようなサインアップ画面が現れますので、E メールを登録・ログインしご利用ください。
Important
このデプロイ方法では、URL を知っている誰でもサインアップできてしまいます。本番運用で使用する場合は、セキュリティリスクを軽減するために IP アドレス制限やセルフサインアップの無効化を強くお勧めします。設定方法は、IP アドレス制限の場合はDeploy using CDK、セルフサインアップの無効化の場合はセルフサインアップを無効化するをご覧ください。
AWS のマネージドサービスで構成した、インフラストラクチャ管理の不要なアーキテクチャとなっています。Amazon Bedrock の活用により、 AWS 外部の API と通信する必要がありません。スケーラブルで信頼性が高く、安全なアプリケーションをデプロイすることが可能です。
- Amazon DynamoDB: 会話履歴保存用の NoSQL データベース
- Amazon API Gateway + AWS Lambda: バックエンド API エンドポイント (AWS Lambda Web Adapter, FastAPI)
- Amazon CloudFront + S3: フロントエンドアプリケーションの配信 (React, Tailwind CSS)
- AWS WAF: IP アドレス制限
- Amazon Cognito: ユーザ認証
- Amazon Bedrock: 基盤モデルを API 経由で利用できるマネージドサービス。Claude はチャットの応答に利用され、Cohere は RAG 用のベクトル埋め込みに利用されます
- Amazon EventBridge Pipes: DynamoDB からのイベントを受け取り、後続の ECS タスクを起動することで、外部のナレッジをカスタマイズ bot に反映します
- Amazon Elastic Container Service: ナレッジをクロール・パースし、埋め込みベクトルと共に Aurora PostgreSQL へ保存します。Cohere Multilingualがベクトル計算に利用されます
- Amazon Aurora PostgreSQL: pgvector プラグインを利用したスケーラブルなベクトル DB
- 認証 (サインアップ・サインイン)
- 会話の新規作成・保存・削除
- チャットボットの返信内容のコピー
- 会話の件名自動提案
- コードのシンタックスハイライト
- マークダウンのレンダリング
- ストリーミングレスポンス
- IP アドレス制限
- メッセージの編集と再送
- I18n
- モデルの切り替え (Claude Instant / Claude)
- カスタマイズボットの作成
- カスタマイズボットのシェア
- Web (html)
- テキストデータ (txt, csv, markdown and etc)
- Microsoft オフィス (pptx, docx, xlsx)
- Youtube 字幕
- ユーザーの利用状況分析
上記 Easy Deployment はAWS CodeBuildを利用し、内部で CDK によるデプロイを実行しています。ここでは直接 CDK によりデプロイする手順を記載します。
- お手元に UNIX コマンドおよび Node.js, Docker 実行環境を用意してください。もし無い場合、Cloud9をご利用いただくことも可能です。
Note
デプロイ時にローカル環境のストレージ容量が不足すると CDK のブートストラップがエラーとなってしまう可能性があります。Cloud9 等で実行される場合は、インスタンスのボリュームサイズを拡張のうえデプロイ実施されることをお勧めします。
- このリポジトリをクローンします
git clone https://github.com/aws-samples/bedrock-claude-chat
- npm パッケージをインストールします
cd bedrock-claude-chat
cd cdk
npm ci
- AWS CDKをインストールします
npm i -g aws-cdk
- CDK デプロイ前に、デプロイ先リージョンに対して 1 度だけ Bootstrap の作業が必要となります。ここでは東京リージョンへデプロイするものとします。なお
<account id>
はアカウント ID に置換してください。
cdk bootstrap aws://<account id>/ap-northeast-1
-
必要に応じてcdk.jsonの下記項目を編集します
bedrockRegion
: Bedrock が利用できるリージョンallowedIpV4AddressRanges
,allowedIpV6AddressRanges
: 許可する IP アドレス範囲の指定
-
プロジェクトをデプロイします
cdk deploy --require-approval never --all
- 下記のような出力が得られれば成功です。
BedrockChatStack.FrontendURL
に WEB アプリの URL が出力されますので、ブラウザからアクセスしてください。
✅ BedrockChatStack
✨ Deployment time: 78.57s
Outputs:
BedrockChatStack.AuthUserPoolClientIdXXXXX = xxxxxxx
BedrockChatStack.AuthUserPoolIdXXXXXX = ap-northeast-1_XXXX
BedrockChatStack.BackendApiBackendApiUrlXXXXX = https://xxxxx.execute-api.ap-northeast-1.amazonaws.com
BedrockChatStack.FrontendURL = https://xxxxx.cloudfront.net
config.pyを編集後、cdk deploy
を実行してください。
GENERATION_CONFIG = {
"max_tokens_to_sample": 500,
"temperature": 0.6,
"top_k": 250,
"top_p": 0.999,
"stop_sequences": ["Human: ", "Assistant: "],
}
EMBEDDING_CONFIG = {
"model_id": "amazon.titan-embed-text-v1",
"chunk_size": 1000,
"chunk_overlap": 100,
}
cli および CDK を利用されている場合、cdk destroy
を実行してください。そうでない場合はCloudFormationへアクセスし、手動でBedrockChatStack
およびFrontendWafStack
を削除してください。なおFrontendWafStack
は us-east-1
リージョンにあります。
このアセットは、i18next-browser-languageDetector を用いて自動で言語を検出します。もし任意の言語へ変更されたい場合はアプリケーション左下のメニューから切り替えてください。なお以下のように Query String で設定することも可能です。
https://example.com?lng=ja
このサンプルはデフォルトでセルフサインアップが有効化してあります。セルフサインアップを無効にするには、auth.tsを開き、selfSignUpEnabled
を false
に切り替えてから再デプロイしてください。
const userPool = new UserPool(this, "UserPool", {
passwordPolicy: {
requireUppercase: true,
requireSymbols: true,
requireDigits: true,
minLength: 8,
},
// true -> false
selfSignUpEnabled: false,
signInAliases: {
username: false,
email: true,
},
});
- こちらを参照ください。
バグ修正や機能追加など、Pull Request は大変ありがたく思っています。下記をご参考にしていただけますと幸いです。
こちらを参照