Amazon Bedrock でチャットボットを作ってみた!

2024-01-04
デベロッパーのためのクラウド活用方法

Author : 長友 健人

こんにちは!ソリューションアーキテクトの長友です。

最近は大規模言語モデル (LLM : Large Language Model) のサービスや機能がどんどん増えてきていますね。皆さん良い LLM ライフをお過ごしでしょうか。LLM を活用してタスクが効率化するのは楽しいですよね !

皆さんの中には社内専用の生成 AI チャットツールが欲しいと思う方も多いのではないでしょうか。そこで本記事では Bedrock Claude Chat というソリューションを紹介します。本ソリューションの魅力は、数コマンド実行するだけでリッチな UI 付きの生成 AI チャットツールを作成できることです。もちろんカスタマイズして新しい機能を追加し、社内のタスクに特化させることも可能です。Bedrock Claude Chat では Amazon Bedrock で選択できる基盤モデルの中で特に日本語の対応レベルが高い Claude を用いています。

今回は Bedrock Claude Chat のデプロイ方法、機能の説明、日本語での会話例をお見せします !

ご注意

本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。

*ハンズオン記事およびソースコードにおける免責事項 »

このクラウドレシピ (ハンズオン記事) を無料でお試しいただけます »

毎月提供されるクラウドレシピのアップデート情報とともに、クレジットコードを受け取ることができます。 


1. できあがったもの

Bedrock Claude Chat を展開してできあがったものがこちらです。デフォルトで認証機能が付いており、マネジメントコンソールを操作できるエンジニアの方だけでなく、社内の多くの方が利用可能です。サインアップ、サインインを完了するとAmazon Bedrock で選択できる基盤モデルの Claude と会話ができます。

ここでは様々なプログラミング言語でフィボナッチ数列をどう書くのか尋ねてみます。

Claude が返したコードは見やすいようにシンタックスハイライトされており、Bedrock Claude Chat はリッチな UI が実装されていることが確認できます。

クリックすると拡大します


2. Amazon Bedrock の紹介

はじめに少し Amazon Bedrock の紹介をします。Amazon Bedrock は API を通じて複数の AI 企業が開発した基盤モデルを利用できるサービスです。フルマネージド型のサーバーレスサービスで、インフラストラクチャの管理をする必要はありません。2023 年 12 月時点では、Amazon、AI21 Labs、Meta、Anthropic、Cohere、Stability AI 提供の基盤モデルが選択可能です。テキスト、埋め込み、画像生成に対応した基盤モデルを用意しており、チャットボット、検索、パーソナライズ、テキスト要約、ロゴ生成などのユースケースに活用できます。今後も基盤モデルは追加されていく予定で、さまざまなニーズに応えられるサービスとなっています。

本ソリューションで利用している Anthropic の Claude は、英語と他の複数言語でコンテンツ生成、要約、分類、QA など多数のタスクに対応できます。処理できる最大トークン数が 10 万 (約 75,000 語) と非常に大きく、非常に長い文章を処理できる特徴を持っています。


3. Bedrock Claude Chat の概要

Bedrock Claude Chat は社内専用の生成 AI チャットツールを数コマンドで簡単にデプロイできるソリューションです。すべて AWS サービスで構築されており、社内のデータを入力しても AWS ネットワーク外に出ないこと、 IP アドレス制限の機能がデフォルトで用意されていることから、セキュリティや統制をかけやすいことが魅力です。コードは公開されているので、カスタマイズして社内規約に準拠した生成 AI チャットツールを作り上げることも可能です。

ここでは Bedrock Claude Chat の機能、アーキテクチャ、デプロイ方法を説明します。

3-1. 機能

本記事の執筆時点では以下のような機能が実装されています。

  • 認証 (サインアップ・サインイン)
  • 会話の新規作成・保存・削除
  • チャットボットの返信内容のコピー
  • 会話の件名自動提案
  • コードのシンタックスハイライト
  • マークダウンのレンダリング
  • ストリーミングレスポンス
  • IP アドレス制限
  • メッセージの編集と再送
  • I18n (英語、日本語、韓国語、中国語)
  • モデルの切り替え (Claude Instant/Claude)

3-2. アーキテクチャ

Bedrock Claude Chat は AWS のマネージドサービスで構成されており、スケーラブルで信頼性が高く、インフラストラクチャの管理が不要なアーキテクチャとなっています。また Amazon Bedrock の活用により、AWS 外部の API と通信する必要もありません。

AWS サービス 機能概要
Amazon DynamoDB 会話履歴保存用の NoSQL データベース
Amazon API Gateway + AWS Lambda バックエンド API エンドポイント (AWS Lambda Web Adapter, FastAPI)
Amazon CloudFront + Amazon S3 フロントエンドアプリケーションの配信 (React, Tailwind CSS)
AWS WAF IP アドレス制限
Amazon Cognito ユーザー認証
Amazon Bedrock 基盤モデルを API 経由で利用できるマネージドサービス

まずフロントエンドについて説明します。Amazon S3 でフロントエンドをホスティングし、Amaozn CloudFront で配信をします。ユーザーの認証は Amazon Cognito で管理しており、AWS WAF でアクセス制限することが可能です。IP 制限が可能で、アクセス可能な IP Range を指定できます。もちろんコードを拡張してさらに強固な設定をかけることも可能です。

続いてバックエンドについて説明します。Backend API と Streaming Response API の 2 種類があります。Backend API は会話の履歴、会話の一覧、会話のタイトルのタイトルの取得などを行い、Streaming Response API は Claude からの回答をストリーミングで返却する Web Socket API です。Claude との会話の履歴は Amazon DynamoDB に蓄積されており、過去のコンテキストを考慮した会話が可能です。

3-3. デプロイ方法

まず、本サンプルの構築には AWS サービスの有効なアカウントが必要となります。

デプロイの手順はシェルを実行する方法と、CDK コマンドを実行するデプロイ方法の 2 種類が用意されています。シェルを実行する方法は、CDK コマンドを実行する方法と比べて簡単にデプロイができます。このブログではシェルを実行する方法でデプロイします。

まず最初に AWS マネジメントコンソールから AWS CloudShell を開きます。CloudShell は AWS マネジメントコンソール上で手軽にシェルを実行できるサービスです。 CloudShell 上でコマンドを実行することでデプロイをしていきます。

クリックすると拡大します

まず、Github からコードを Clone します。

git clone https://github.com/aws-samples/bedrock-claude-chat.git

次に事前に用意されたデプロイ用のシェル bin.sh を実行します。

cd bedrock-claude-chat
chmod +x bin.sh
./bin.sh

10 分ほど経ち、以下のような形式の URL が表示されたらデプロイは完了です。この URL にアクセスすることで Bedrock Claude Chat を試すことができます。

Frontend URL: https://xxxxxxxxx.cloudfront.net

4. Bedrock Claude Chat を試してみた

先ほど表示された URL をブラウザに入力してみるとサインアップ画面が表示されます。

Bedrock Claude Chat にアクセスするにはアカウントを作成する必要があります。ユーザー名としてメールアドレス、パスワードを入力し「アカウントを作る」ボタンを押してください。

クリックすると拡大します

アカウント作成が完了すると、入力したメールアドレス宛に確認コードが送信されます。確認コードの受信までに 1 分ほど時間がかかる場合があります。

確認コードを入力し「確認」ボタンを押してください。

クリックすると拡大します

メールアドレス認証を完了すると Bedrock Claude Chat の画面が表示されます。

画面下部のテキストボックスに文字を入力することで Claude との会話を開始できます。

クリックすると拡大します

Claude にスペイン語で「おはよう」の言い方を教えてもらいましょう。簡単な補足も加えて簡潔に回答してくれていますね。

ここで入力に対して一気に回答を表示するのではなく、少しずつ表示されているのが確認できます。これはストリーミングレスポンスという Amazon Bedrock の機能で、回答の生成に時間がかかる場合でも少しずつ回答を返却することで、ユーザー体験の向上が見込めます。

クリックすると拡大します

次に英語でどのように言うのか教えてもらいましょう。今回の例では「英語では?」と聞くだけで「おはよう」を英語でどのように言うのかを教えてくれており、Claude と自然に会話ができています。

これは本ソリューションが DynamoDB に会話の履歴を保存しており、過去のコンテキストを失わず会話できるようにしているためです。

クリックすると拡大します

左側のバーを確認すると、会話の内容から件名を自動生成してくれていることがわかります。過去にどんな会話があったかひとめで分かるようになっています。

クリックすると拡大します


5. リソースの削除

立ち上げたリソースをそのままにしておくと、利用していなくとも S3 バケットなどのコストが継続的に発生するため不要になった場合は削除してください。

AWS CloudFormation の管理画面から「BedrockChatStack」、「FrontendWafStack」、「CodeBuildForDeploy」スタックを削除することでリソースの削除は完了です。


6. まとめ

本記事では Amazon Bedrock の基盤モデルである Claude を使った生成 AI チャットツールをデプロイし、機能の説明や利用例を紹介しました。簡単にデプロイできてすぐに社内で活用できる本ソリューションをぜひお試しください!

なお、AWS が用意している Amazon Bedrock を利用した他のソリューションとして、メール作成、要約、CS 業務効率化を行うことのできる generative-ai-use-cases-jp や社内情報を利用した QA サイトが構築できる jp-rag-sample が用意されています。jp-rag-sample は こちら の記事でも詳細に解説されていますので、builders.flash をご覧の皆様も、これらのソリューションを活用して業務の効率化にお役立てください !


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

長友 健人 (Kento Nagatomo)
アマゾン ウェブ サービス ジャパン合同会社 ソリューションアーキテクト

ソリューションアーキテクトとしてデジタルネイティブビジネスを行うお客様を中心に技術支援しています。好きな AWS サービスは Amazon SageMaker。フットサルをよくやってます。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する