このリポジトリは、生成系 AI を提供するAmazon Bedrockの基盤モデルの一つである、Anthropic 社製 LLM Claude 2を利用したチャットボットのサンプルです。2023/9 月現在、Bedrock はプレビュー中です。ご利用の際は申請が必要です。
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)
- Amazon Cognito: ユーザ認証
- Amazon Bedrock: 基盤モデルを API 経由で利用できるマネージドサービス
- 認証 (サインアップ・サインイン)
- 会話の新規作成・保存・削除
- チャットボットの返信内容のコピー
- 会話の件名自動提案
- コードのシンタックスハイライト
- マークダウンのレンダリング
- ストリーミングレスポンス
- 2023/8 月現在、Bedrock はプレビュー中です。ご利用の際は申請が必要です。
- CloudShellを開きます
- 下記のコマンドでリポジトリをクローンします
git clone https://github.com/aws-samples/bedrock-claude-chat.git
- 下記のコマンドでデプロイ実行します
cd bedrock-claude-chat
chmod +x bin.sh
./bin.sh
- 10 分ほど経過後、下記の出力が得られるのでブラウザからアクセスします
Frontend URL: https://xxxxxxxxx.cloudfront.net
上記のようなサインアップ画面が現れますので、E メールを登録・ログインしご利用ください。
上記 Easy Deployment はAWS CodeBuildを利用し、内部で CDK によるデプロイを実行しています。ここでは直接 CDK によりデプロイする手順を記載します。
-
お手元に UNIX コマンドおよび Node.js 実行環境を用意してください。もし無い場合、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 が利用できるリージョンbedrockEndpointUrl
: Bedrock エンドポイントの URL
-
プロジェクトをデプロイします
cdk deploy --require-approval never
- 下記のような出力が得られれば成功です。
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.0,
"top_k": 250,
"top_p": 0.999,
"stop_sequences": ["Human: ", "Assistant: "],
}
本サンプルでは Kendra を利用した RAG は実装しておりません。実導入する場合、アクセスコントロールポリシーやデータコネクタの有無、接続先データソースの認証・認可方法は組織により多様なため、シンプルに一般化することが難しいためです。実用するにはレイテンシーの低下やトークン消費量の増加などのデメリットや、検索精度を検証するための PoC が必須であることを考慮する必要があるため、jp-rag-sample等のアセットを活用した PoC をおすすめします。