Amazon Bedrock、Lambda、API Gatewayなどを使って、チャットボットを作ってみました。ユーザーには、質問したい生成AIを選んで質問をしてもらう形にしています。
実際の画面や使い方は、こちらの動画をご覧ください。
↓↓↓
このツールについて、フローや苦労した点などをお伝えします。生成AIやAWSで何か作ろうという方の参考になれば嬉しいです。
なお、コードの書き方や設定などは、お伝えしておりません。ご了承くださいm(__)m
作り方を詳しく入れると膨大な量になってしまいますので、今回は断念しました。
Webアプリのフローと苦労した点について
具体的にどんなツールを使用し、どういった流れにしているか解説します。
使用したツール
ツールは次のとおりです。
- Amazon S3: 静的コンテンツの保存
- Amazon CloudFront: グローバル配信
- Amazon Cognito: ユーザー認証
- Amazon API Gateway: リクエストルーティング
- AWS Lambda: バックエンド処理
- Amazon DynamoDB: データベース
- Amazon Bedrock: AIによる応答生成。
フローについて
フローは図にすると、こちら。
下記のようなフローになっていますが、ざっと説明します。
- ユーザー認証:
- 外部APIを使用して認証チェック:
- ログイン後の画面表示
- チャットに質問をいれる
- これまでの質問回数確認
- 選択された生成AIに質問を実施
- 回答をデータベースに保存
- 回答をユーザーに返す
1.ユーザー認証
ユーザーがアプリケーションにアクセスし、Amazon Cognito(コグニート)を使用して認証を行います。Cognitoを使用すると、セキュアな認証システムが簡単に搭載できます。認証画面も用意されているので、作る必要はありません。
デフォルトの認証画面は、多少のカスタマイズができます。たとえば下記のようにオリジナルロゴをいれたりできますし、CSSを編集して色も変えられます。
ですが、テキスト部分は変えられませんし、当然日本語化もできません。
正直、そこは変えられるようにしたほしかったです…!
そのため、認証画面のフロントエンド部分のHTML・CSS・JavaScriptは自作する必要がありました。
(作成した認証画面)
2. 外部APIを使用して認証チェック
今回のチャットボットは、コミュニティメンバー専用にする予定です。
そこで、ユーザーがCognitoによって認証された後、追加のLambda関数が外部APIを呼び出し、コミュニティの会員資格を確認するようにしました。
このステップにより、アプリケーションの利用をコミュニティのメンバーに限定することができます。Cognitoでは、認証プロセスの前後にLambda関数を挿入する設定ができるため、このような柔軟な処理が可能です。
3. ログイン後の画面表示:
ユーザーが認証に成功すると、Amazon S3に保存されたHTMLファイルがCloudFrontを介してユーザーに配信され、ログイン後の画面が表示されます。
AWSでは、S3やCloudFrontを使って、HTTPS通信で手軽にページを公開できます。今回はこの仕組みを使用しました。
なかなか便利です♪詳しい方法は、別の記事でご紹介しているので、ご興味あれば見てみてください。
4.チャットに質問をいれる:
ユーザーがチャット画面に質問を入力します。ここで、質問したい生成AIを選べるようにしました。とりあえず今は下記の2つだけセットしました。
- Claude 3.5 Sonnet
- Llama 3 Instruct (70B)
理由は、Claudeは日本語に強いため。Lhamaは、Meta社の生成AIですが、絵文字などが多く楽しいため。もちろん性能も高いです。
なお、Amazon Bedrockを通じて、色々な生成AIが使えます。
Bedrockによって複数のAIサービスの管理と支払いをAWSで一元化できるので、便利です。また日本では使いにくい生成AIも利用できます。
5.これまでの質問回数確認
今回のチャットボットでは、質問の回数が一定回数を超えた場合は、制限がかかるようにします。
そのために、ユーザーが質問を送信する前に、DynamoDBに保存されたデータを基に、ユーザーがこれまでに送信した質問回数を確認するフローをいれました。
制限を超えると、「今日の制限を超えました」とメッセージが返ってくるようにしています。
6.選択された生成AIに質問を実施:
制限を超えていない場合には、ユーザーの質問は選択された生成AIに送信されます。API Gatewayがリクエストを受け取り、LambdaがAmazon Bedrockを介して質問を処理します。
同一セッションの場合には、セッション内のこれまでのやりとりを保持して、質問に回答するようにしました。
少し前に聞いた質問をたずねると、答えてくれます。なお、質問する生成AIによって性格の違いが出て面白かったです。
7.回答をデータベースに保存:
生成AIからの回答は、DynamoDBに保存します。
8.回答をユーザーに返す:
DynamoDBに保存された回答が、ユーザーに返されます。ユーザーは、アプリケーションのインターフェースを通じて回答を確認できます。
このツールを作ろうと思った理由:GenUをカスタマイズしたかったから
以上がざっと、チャットボット開発に使用したツールと機能のご紹介となります。
なお、当初はGenUというAWSが提供してくれているツールを使って、チャットボットを提供したいと思っていました。GenUについては、下記にまとめています。
ですがやっぱり、色々と自分で変えたくなってきたので、いちから作ることにした次第です。
手こずった部分もありましたが、勉強になりました。
今後の予定&さいごに
お読みいただきありがとうございました。
チャットボットは、まだまだ色々手をいれる余地はあると思います。当面コミュニティ内で運用予定ですが、使っていただきつつバージョンアップしようと考えています。
また今後も色々とBedrock使っていこうと思います。
ネタがでてきましたら、記事にしていくので、また見にきてくださいね。
今回の記事で紹介したようなAWSツール開発のご相談あれば、お問合せより、お気軽にお声がけください。ご希望あれば、チャットボットもお試しいただけます。