Amazon Bedrockでチャットボットを作ってみました:使用ツール・フローまとめ

aws

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による応答生成。

フローについて

フローは図にすると、こちら。

下記のようなフローになっていますが、ざっと説明します。

  1. ユーザー認証:
  2. 外部APIを使用して認証チェック:
  3. ログイン後の画面表示
  4. チャットに質問をいれる
  5. これまでの質問回数確認
  6. 選択された生成AIに質問を実施
  7. 回答をデータベースに保存
  8. 回答をユーザーに返す

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も利用できます。

Bedrockで使える生成AIと料金については、下記のページをご参照ください。
なお記事執筆現在、ChatGPTとGeminiはBedrockで使える生成AIの中に入っていません。

5.これまでの質問回数確認

今回のチャットボットでは、質問の回数が一定回数を超えた場合は、制限がかかるようにします。

そのために、ユーザーが質問を送信する前に、DynamoDBに保存されたデータを基に、ユーザーがこれまでに送信した質問回数を確認するフローをいれました。

制限を超えると、「今日の制限を超えました」とメッセージが返ってくるようにしています。

6.選択された生成AIに質問を実施:

制限を超えていない場合には、ユーザーの質問は選択された生成AIに送信されます。API Gatewayがリクエストを受け取り、LambdaがAmazon Bedrockを介して質問を処理します。

同一セッションの場合には、セッション内のこれまでのやりとりを保持して、質問に回答するようにしました。

少し前に聞いた質問をたずねると、答えてくれます。なお、質問する生成AIによって性格の違いが出て面白かったです。

7.回答をデータベースに保存:

生成AIからの回答は、DynamoDBに保存します。

8.回答をユーザーに返す:

DynamoDBに保存された回答が、ユーザーに返されます。ユーザーは、アプリケーションのインターフェースを通じて回答を確認できます。

このツールを作ろうと思った理由:GenUをカスタマイズしたかったから

以上がざっと、チャットボット開発に使用したツールと機能のご紹介となります。

なお、当初はGenUというAWSが提供してくれているツールを使って、チャットボットを提供したいと思っていました。GenUについては、下記にまとめています。

ですがやっぱり、色々と自分で変えたくなってきたので、いちから作ることにした次第です。

手こずった部分もありましたが、勉強になりました。

今後の予定&さいごに

お読みいただきありがとうございました。

チャットボットは、まだまだ色々手をいれる余地はあると思います。当面コミュニティ内で運用予定ですが、使っていただきつつバージョンアップしようと考えています。

また今後も色々とBedrock使っていこうと思います。

ネタがでてきましたら、記事にしていくので、また見にきてくださいね。

今回の記事で紹介したようなAWSツール開発のご相談あれば、お問合せより、お気軽にお声がけください。ご希望あれば、チャットボットもお試しいただけます。

aws
【AWS関連・Webアプリ開発・生成AIのAPI活用のご相談承ってます】
お気軽にお声がけください。
御社にとって、最善の方法をご一緒に考えてまいります。
Zoomミーティング実施中。サンプルアプリご利用可能です。

お問合せフォーム

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

最新版Laravel11用のサポートガイドご用意しています。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました