TeamsやSlackから簡単にBedrockを呼べるように!
今週9/17のAWSアップデートで、AWS ChatbotというサービスからAmazon Bedrockのエージェントを簡単に呼び出せるようになりました。
公式ドキュメントはこちらです。
今回は多くの会社員が利用しているであろうMicrosoft Teamsから使える、Bedrockの生成AIチャットボットをノーコードで開発する手順を紹介します。
30分もあれば簡単にできます!
※Teamsではなく、Slackから使いたい方は以下の森田さん記事を参照ください!
1. Teams環境の準備
Teamsには家庭用と法人用の2種類あり、ややこしいですが別サービスとなっています。
今回は会社用Teamsを想定した検証のため、Teams Essentialsを無料試用してみました。
この記事は会社でTeamsを利用されている読者を想定しているため、Bedrockとチャットする用のチーム&チャネルのみ用意いただければOKです。
この記事では「Bedrockファンクラブ」というチームに、生成AIチャットボットを追加してみます。
2. Bedrockエージェントの作成
AWSアカウントを用意し、マネジメントコンソールにサインインします。
今回はバージニア北部リージョンを例として利用します。(東京リージョンでも実施可能)
Amazon Bedrockのコンソールを検索して移動し、左メニュー下部の「モデルアクセス」からAnthropic社のClaude 3 Sonnetを有効化します。
※最新のClaude 3.5 Sonnetも今回利用するBedrockエージェントで利用可能なのですが、メモリー(長期記憶)機能にまだ対応していないため今回はClaude 3 Sonnetを利用します。
その後、左メニューの「エージェント」より、Bedrockエージェントを新規作成します。
エージェント名は teams-chatbot
など好きな名前を付けます。
エージェントビルダーが開くので、以下のように設定します。
- モデルを選択:
Anthropic > Claude 3 Sonnet
- エージェント向けの指示:
あなたはTeams用のチャットボットです。ユーザーと同じ言語で、親切に応対してください。
- Additional Settings > ユーザー入力:
Enabled
(不明点がある際に聞き返してくれる) - Memory > Enable memory:
Enabled
他はデフォルトのまま、画面上部の「保存して終了」をクリックします。
画面右側のテスト用サイドバーで「準備」をクリックし、エージェントの動作確認をしてみましょう。
その後、「エイリアスを作成」します。いわばバージョンのようなものです。
エイリアス名は v1
など好きな名前を付けましょう。
作成できたら、このエージェントの「エージェントARN」と「エイリアスID」をメモしておきます。
3. AWS Chatbotの設定
AWSマネジメントコンソールで「AWS Chatbot」を検索し、Teams用のクライアントを設定します。
AWS Chatbotを接続したいTeamsチャネルのURLを求められるので、取得してコピペします。
うまく設定できると、AWS Chatbotの「設定済みクライアント」にTeamsチャネルが出現します。
「新しいチャネルを設定」します。
- 設定名:
bedrock-funclub
- チャネルURL:先ほどと同じチャネルURL
- アクセス許可
- ロール名:
bedrock-funclub
- ポリシー名:
AmazonBedockFullAccess
を追加
- ロール名:
他はデフォルトで「設定」します。
作成したチャネル詳細を開き、「チャネルロール」をクリックして遷移先でBedrock用のポリシーを追加します。
IAMロールの設定画面に飛ぶので、「許可を追加 > ポリシーをアタッチ」から AmazonBedrockFullAccess
を追加しましょう。
これでAWS Chatbotの設定は完了です。
4. Teamsの設定
Teamsから「AWS」アプリを検索して、「Bedrockファンクラブ」チームに追加します。
会社によっては、追加できるアプリが情シス部門によって管理されており、AWSアプリを利用するために社内申請などが必要になる可能性があります。
チャネル内で @aws connector
と投稿すると、AWSアプリからエージェント接続方法のヘルプコメントが返ってきます。
接続コマンドは以下のようです。
@aws connector add <好きな接続名> <BedrockエージェントのARN> <エージェントのエイリアスID>
AWSアプリに送信してみると、接続成功メッセージが返ってきました!
Bedrockエージェントへの会話送信コマンドは以下のようです。
@aws ask <接続名> <チャット内容>
職場の悩みごとを相談してみると、必要な情報をうまく聞き返しながら解決策を提案してくれました🎉
あれ、なんか応答遅くない?
これまでもTeamsやSlackからLLMのAPIを呼べるチャットボットを作っていた方はいると思いますが、今回のチャットボットはレスポンスに少し時間がかかります。
理由は、LLMのAPIを直接呼ぶのではなく AIエージェントのAPIでラップされたLLMを呼んでいるから です。
- 通常のLLM:ユーザーの質問 → LLMの回答生成
- エージェント:ユーザーの質問 → エージェントが行動計画を生成 → LLMの回答生成
さらに、AWS ChatbotはTeamsから呼び出す際、接続に時間がかかることがあるようで「送信中…」というステータスで数秒待つケースもありました。
※エージェントって何?という方は以下スライドをご覧ください!
逆に、エージェントだからこその利点もある
今回のBedrockエージェントの場合、単純な「LLM呼び出し+履歴保持」程度のチャットボットと異なり、もっと高度なふるまいを実行させることが可能です。
- ユーザーの依頼に対して、タスクを分解して行動計画を立てる
- ユーザーの依頼で不明瞭な点があれば聞き返してくれる (Bedrockエージェントのユーザー入力機能)
- スレッド内の会話の短期記憶だけでなく、同じユーザーとのやり取りをサマリーして長期記憶してくれる (Bedrockエージェントのメモリー機能)
- Lambdaを実行してアプリケーションを実行したり外部APIを叩ける (Bedrockエージェントのアクショングループ機能)
- RAGを使って社内のデータソースなどを参照できる (Bedrockのナレッジベース機能)
- 不適切な応答をフィルターしたり、ハルシネーションのチェックができる (Bedrockのガードレール機能)
ぜひ、Lambda関数を作って実行させたり、社内データのRAG機能もつけたりと、エージェントならではの追加機能も実装してみましょう!
- ナレッジベースの作成方法
- アクショングループ(Lambda)の追加方法