Amazon BedrockとStreamlitでチャットボットを作成してみた

はじめに

Amazon BedrockとStreamlitでチャットボットを作成してみました。
Amazon Bedrockのclaudeを用いて、サンプルアプリを開発してみたい方におすすめです。

開発環境

  • Windows 11
  • Python 3.11.0
  • AWS CLI 2.13.29

実装

Amazon Bedrockで使用するモデルの有効化

AWS Amazon Bedrockのページに移動し、「Model Access」を選択、Claudeが「Access granted」になっていない場合は、右上の「edit」を選択します。
image.png

「Anthropic」にチェックを入れ、「Save changes」を選択します。
記事投稿用 (1).png

数分間はステータスが「In Progress」となるので、待機します。
画像.png

数分おきに更新ボタンを押して、ステータスが「Access granted」になれば有効化の完了です。
画像 (1).png

IAMの設定

次に、IAMの設定を行います。
AWS IAMの「ユーザー」タブに移動して、任意のユーザーを選択または作成します。
「セキュリティ認証情報」タブから、「アクセスキーを作成」を選択します。
記事投稿用 (4).png

ユースケースは「コマンドラインインターフェイス(CLI)を選択し、「次へ」を選択します。
記事投稿用 (5).png

説明タグ値の入力は任意となるため、入力せずに「アクセスキーを作成」を選択します。
記事投稿用 (6).png

アクセスキーとシークレットキーをメモして「完了」を選択します。
記事投稿用 (7).png

続いて、Amazon Bedrock用の許可ポリシーを作成します。
本記事を作成した時点では、Bedrock専用の許可ポリシーは存在しなかったため、インラインポリシーを作成します。
IAMの「ユーザー」のページに移動し、「許可を追加」から「インラインポリシーを作成」を選択します。
image.png

ポリシーエディタは「JSON」を選択し、中身を書き換え(コードの内容は、以下の画像の直下に記載)、「次へ」を選択します。
記事投稿用 (2).png

JSONの中身はこちらです。

ポリシー名を「BedrockFullAccess」とし、「ポリシーの作成」を選択します。
記事投稿用 (3).png

続いて、AWS CLIをインストールしていない場合は、インストールします。
以下の記事を参考にして、インストールしてください。

今回のチャットボットを実行するディレクトリに移動し、AWS CLIがインストールされたかを以下のコマンドで確認します。

結果が表示されれば、インストールされています。

以下のコマンドで、アクセスキーとシークレットキーを設定します。
最初は空の状態なので、ご自身のアクセスキーやシークレットキーを入力し、エンターキーを押してください。region nameは「us-east-1」、output formatは「json」にしてください。

これでIAMの設定は完了です。

チャットボットの作成

以下の記事を参考にして、チャットボットを作成します。

必要なライブラリやフレームワークのインストールとインポート

まずは必要なライブラリやフレームワークをインストールしてインポートします。
最初に、ターミナルでLangChainとstreamlitをインストールしましょう。

次に、Pythonファイルでインポートしていきます。

  1. from langchain.chains import LLMChain:LangChainの基本的なチェーンの一つで、プロンプトテンプレートと言語モデルを組み合わせて使用します。
  2. from langchain.llms import Bedrock:LangChainライブラリからBedrockクラスをインポートしています。
  3. from langchain.memory import ConversationBufferMemory:会話の履歴を保存するためのメモリクラスです。
  4. from langchain.memory.chat_message_histories import StreamlitChatMessageHistory:Streamlitセッション状態にメッセージを保存します。
  5. from langchain.prompts import PromptTemplate:言語モデルへのプロンプトを生成します。
  6. import streamlit as st:StreamlitというPythonのフレームワークをインポートしています。Streamlitは、PythonのコードだけでWebアプリケーションを作成できます。

会話の履歴を呼び出す

会話が続くように、前回までの会話の履歴を保存するインスタンスを作成します。履歴がない場合は、「こんにちは!」と表示させます。

templateとprompt、llm_chainの作成

templateとprompt、llm_chainを作成します。チャット履歴と人間の入力を元にして、anthropic.claude-v2モデルが回答します。

チャットUIの作成

会話履歴、人間が入力したメッセージ、AIの回答を表示するUIをstreamlitで実装します。

streamlit run test.pyを実行するとclaude2とチャットすることができます!
image.png
ChatGPTとは違った雰囲気があります!

おわりに

Amazon BedrockとStreamlitでチャットボットを作成してみました。
OpenAI以外にも、様々な企業が生成AIを開発しているので、ぜひ試してみてください!

最後までお読みいただき、ありがとうございました!

記事に関する質問等ございましたら、コメントまたは以下のDMにてよろしくお願いします!

参考文献

この記事を書いた人

aws-recipe-user