生成AIにお手軽入門!Amazon Bedrockでチャットアプリケーションを爆速起動してみた

当社では生成AIに興味があるメンバーがサービスの活用を模索しております。
やっさんでございます。
Amazon Bedrockを利用したOSSチャットアプリケーション「Bedrock Claude Chat」を爆速で起動してみましたので、その方法をご紹介します。
チャットアプリケーション「Bedrock Claude Chat」とは

チャットアプリケーション「Bedrock Claude Chat」は上記画像のように生成AIを利用したAIとのチャットができるアプリケーションです。生成AIにはClaude 2が利用されています。
なんと、爆速でお試し頂けます。その所要時間は約30分ほど
基本的なインターフェースを持ったこのチャットアプリケーションはなんと、爆速で起動することが出来ます。その所要時間は約30分程です。
本アプリケーションはAWS CDKでプロビジョニングされますので、簡単なコマンドを実行するだけで立ち上げることが出来ます。
Bedrock Claude Chat の起動方法
それでは、Bedrock Claude Chat の起動方法についてGitHubでは触れられていない点も含めてご紹介します。
(2023年10月11日時点では)BedrockのClaude 2は東京リージョンでは提供されておりません。バージニアリージョンでは提供されていますので、バージニアリージョンで動作確認する前提で起動方法をご紹介しております。
1. Claude 2 の利用リクエストを行う
まずはBedrockで利用できる生成AIの利用リクエストを行う必要があります。下記の画像のようにAnthropicのモデルに利用リクエストを送信します。

(2023年10月11日時点では)Claude2は東京リージョンでは利用できません。バージニアリージョンで利用申請してください。利用申請に成功するとAccess statusが緑色のAccess grantedの表示になります。

2. Bedrock Claude Chat を起動する
上記の準備が出来ましたら、Claude Chatを起動します。

まずは、以下のコマンドを実行してソースコードを取得します。
git clone https://github.com/aws-samples/bedrock-claude-chat
ソースコードの取得後は、以下のコマンドを実行して、チャットアプリケーションをプロビジョニングします。
cd bedrock-claude-chat
chmod +x bin.sh
./bin.sh
bin.sh
は以下のことを実行しています。
- チャットアプリケーションをプロビジョニングするためのCodBuild プロジェクトをCloudFormationから構築します。
- 構築したCodeBuildプロジェクトを実行し、チャットアプリケーションをビルドしています。
- チャットアプリケーションはAWS CDKでテンプレート化されています。CodeBuildではAWS CDKの初期化(bootstrap)も含まれています。
- CodeBuildの実行が正常終了したことを確認したあとに、CloudWatch Logsに出力されたCloudFrontのURLをコンソールに出力して終了します。

Bedrock Claude Chat を利用する
出力されたFrontend URLにアクセスしてBedrock Claude Chatの利用を開始します。
Bedrock Claude ChatはAmazon Cognitoによって認証情報が設けられています。最初は利用者のアカウントを登録するところから行います。

利用者アカウントの登録完了後に、サインインすることでBedrock Claude Chatの利用を開始することが出来ます!
例えば、「最も有名なミュージシャンは誰ですか?」と聞いてみますと ...

「The Beatles」や「Michael Jackson」を回答してくれました!こんなに簡単に限られたユーザーしか利用できないプライベートな生成AIチャットが利用できるとは、驚きを隠せないです!
日本語でも質問してみます。例えば「ポメ柴とは何ですか?」と聞いてみますと ...

「ポメラニアンとシベリアンハスキーのミックス」であると回答してくれました。回答としては期待した内容ではないのですが、流暢な日本語で回答してくれています。素晴らしいですね!
また、過去のチャット履歴を残すことも可能となっております。

これだけのチャットアプリケーションが30分ほどで起動でき、サーバーレスソリューションであるためランニングコストも低い価格で抑えることが出来ます。とても魅力的です。
Bedrock Claude Chatのアーキテクチャを深掘りしてみる
Bedrock Claude ChatのアーキテクチャについてはGitHubで既に紹介がされています。認証にAmazon Cognito、フロントエンドにAmazon CloudFront、バックエンドAPIにAPI GatewayとAWS Lambdaそして、Amazon Bedrockが利用されています。チャット履歴の保存とWebSocket通信のためにデータソースとしてDynamoDBも利用されています。
個々のAWSサービスの利用やコードの構成について深掘りしてみます。
(OSSは日々アップデートされるため、2023年10月11日時点の情報になります。)
DynamoDB の属性について
DynamoDBの属性については、以下の添付画像のような属性で構成されておりました。気になる点としてはMessagesの属性ですね。メッセージ履歴が多くなりすぎると一つの属性に保存することが出来なくなるのではないのかなと思いました。

Lambda Web Adapterの利用
バックエンドAPIはOSSのFast APIを利用しており、Lambda Web Adapterを経由してアクセスできる仕組みとなっておりました。Lambda Web Adapterは積極的に活用していきたいですね!

また、APIとWebsocketでコードベースはわけられておりました。それぞれで適切なDockerfileとコードを利用しデプロイされておりました。
Amazon Bedrockの利用コードについて
Amazon Bedrockの利用コードについてチェックしてみました。
最重要である対話機能については、AWS SDKのBedrockクライアントを利用してストリーム通信を行っていました。SDKの関数は invoke_model_with_response_stream
になります。

とてもユニークなところが、会話の内容から会話のタイトルをAmazon Bedrockに決めてもらっていることです。システムにBedcorkを組み込むような使い方をされていて、とても素晴らしいと思います。

主に会話履歴の管理に関するAPIを提供するのがFast APIで構築されたAPIで、フロント側でリアルタイムチャットとして応答しているのはWebSocket用のAPIという、使い分けがなされていました。大変興味深いです。
まとめ
Amazon Bedrockで所要時間30分ほどでチャットアプリケーションを起動し利用して、アーキテクチャについても少しだけ深掘りしてみました。
AWSを利用した生成AIの活用はとても面白く興味深い分野になります。引き続きAmazon Bedrockの動向を追っていきます!