メインコンテンツに移動
デベロッパーのためのクラウド活用方法

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 のデプロイ方法、機能の説明、日本語での会話例をお見せします !


X ポスト » | Facebook シェア » | はてブ »

ご注意

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

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

builders.flash メールメンバー登録

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

1. できあがったもの

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

フィボナッチ数列をどう書くのか尋ねてみる

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

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

Screenshot of the Bedrock Claude Chat interface on AWS, showing the Japanese language user interface with new chat, conversation with artificial intelligence, AWS introduction options, and a chat input field.

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 に蓄積されており、過去のコンテキストを考慮した会話が可能です。

Architecture diagram illustrating an AWS-based chatbot solution in 2024. The diagram shows users authenticating via Cognito, protected by AWS WAF, accessing a frontend hosted on S3 and CloudFront, using API Gateway and Lambda for backend and streaming response, integrating Amazon Bedrock Claude 2 as the LLM, and DynamoDB for conversation storage.

3-3. デプロイ方法

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

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

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

Screenshot of the AWS CloudShell terminal interface in the us-east-1 region with Japanese language UI.

Github からコードを Clone

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

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

bin.sh を実行

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

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

デプロイ完了

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

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

4. Bedrock Claude Chat を試してみた

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

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

Screenshot of a Japanese signup form for Bedrock Claude Chat, showing fields for username, password, and password confirmation.

確認コードを入力

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

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

Screenshot of the Bedrock Claude Chat email verification process in Japanese, showing a code entry field for logging in, instructions, and options to confirm or resend the verification code.

認証完了

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

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

Screenshot of the Bedrock Claude Chat interface in Japanese, showing a chat input field and navigation in the application.

Claude にスペイン語で「おはよう」の言い方を教えてもらう

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

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

Animated demo showing a chatbot translating the Japanese phrase 'おはよう' (ohayou, meaning 'good morning') into Spanish. The chatbot interface displays the Japanese text and outputs the Spanish translation.

英語でどのように言うのか教えてもらう。

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

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

Screenshot showing a chat example that translates 'Good morning' from Japanese to Spanish ('Buenos días') and English, with explanations and usage examples in each language.

過去の会話履歴

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

Screenshot of a Japanese language chat interface showing a button for starting a new chat and a chat labeled 'Spanish Greeting' with edit and delete icons.

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 をご覧の皆様も、これらのソリューションを活用して業務の効率化にお役立てください !

Screenshot of an AWS generative AI demo dashboard with a Japanese interface, showing menu options for chat, summary, email generation, information extraction, and CS business efficiency.

Screenshot of an Amazon Kendra enterprise search demo application displayed in Japanese, built using React and TypeScript. The interface shows language settings, filtering options, and search results explaining Amazon Kendra's features and capabilities in Japanese.

筆者プロフィール

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

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

A front-facing portrait of a young man with long hair and a neutral expression against a plain background.