kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Bedrock のマルチエージェントコラボレーション機能に入門できる「わが家の AI 技術顧問」ワークショップを試した

builders.flash に公開されていた「わが家の AI 技術顧問」ワークショップを試してみた❗️

みのるんさんの寄稿記事で,Amazon Bedrock の「マルチエージェントコラボレーション機能」に入門できる.まだマルチエージェントコラボレーション機能を試せてなかったからとても勉強になったし(設定・プロンプトなど),Amazon Bedrock の入門コンテンツとしても良いと思う👌素晴らしいコンテンツだった.

aws.amazon.com

ちなみに Amazon Bedrock のマルチエージェントコラボレーション機能は2024年12月にリリース(プレビュー)されて,今月2025年3月に正式リリースになっている.試すなら今だ \( 'ω')/

aws.amazon.com

aws.amazon.com

構築したアプリケーション🤖

Streamlit で実装されたチャット画面に技術的な質問をすると回答してくれる「AI 技術顧問」を構築した👌内部的には Amazon Bedrock の専門知識を持ったサブエージェントと Tavily 経由でウェブ検索をするサブエージェントがいて,スーパーバイザーエージェントが質問内容によってどっちのサブエージェントを使うべきか判定してくれる感じ❗️

全体感は builders.flash 記事に載っているアーキテクチャ図を見るとイメージしやすいと思う.Amazon Bedrock の専門知識を持ったサブエージェント bedrock-master は Amazon Bedrock の「ナレッジベース」を使っていて,ベクターストアとしては Aurora Serverless v2 (PostgreSQL) を使う.そして,ナレッジベースのデータソースとしては Amazon Bedrock - User Guide (PDF) を使う📝

[質問] Amazon Bedrock の基盤モデルって何?

Amazon Bedrock の基盤モデルって何? って質問したら Amazon Bedrock の専門知識を持ったサブエージェント bedrock-master が呼び出された.最終的にスーパーバイザーエージェントから回答が返ってくる.各ステップの詳細も確認できて,マルチエージェントの流れをイメージしやすく作られていた.

[質問] 現在サポートされている Python の Lambda ランタイムは何?

現在サポートされている Python の Lambda ランタイムは何? って質問したら Tavily 経由でウェブ検索をするサブエージェント web-search-master が呼び出された.

作業メモ🤖

1. Python 3.12

手順では Tavily に接続する AWS Lambda 関数のランタイムと AWS Lambda レイヤーを Python 3.9 に変更していた.AWS CloudShell に Python 3.9 がプリセットされていて(古いよなぁ),環境構築がしやすいように工夫されていると思うけど,個人的には Amazon Bedrock のアクショングループから自動作成された Python 3.12 のまま実施したいな〜と思って,macOS で Python 3.12 の環境からデプロイした.

$ python --version
Python 3.12.4

$ mkdir python
$ pip install tavily-python --target python
$ zip -r layer.zip python

$ aws lambda publish-layer-version \
  --layer-name Tavily \
  --zip-file fileb://layer.zip \
  --compatible-architectures x86_64 \
  --compatible-runtimes python3.12 \
  --region us-east-1

2. dotenv

Streamlit を起動するときに以下のエラーが出た.

ModuleNotFoundError: No module named 'dotenv'

builders.flash 記事では pip install boto3 streamlit と書いてあったけど,追加で dotenv もインストールする必要があった.

$ pip install dotenv 

3. エラーメッセージ

builders.flash 記事に載っている Streamlit のコードと GitHub に公開されているコードでエラーメッセージに差分があった.動作にはまったく影響なし👌

github.com

 def show_error_popup(exeption):
     """エラーポップアップを表示する"""
     if exeption == "dependencyFailedException":
-        error_message = "【エラー】ナレッジベースのAurora DBがスリープしていたようです。しばらく待ってから、ブラウザをリロードして再度お試しください🙏"
+        error_message = "【エラー】ナレッジベースのAurora DBがスリープしていたようです。数秒おいてから、ブラウザをリロードして再度お試しください🙏"
     elif exeption == "throttlingException":
-        error_message = "【エラー】Bedrockのモデル負荷が高いようです。1分後にブラウザをリロードして再度お試しください🙏(改善しない場
合は、モデルを変更するか[サービスクォータの引き上げ申請](https://aws.amazon.com/jp/blogs/news/generative-ai-amazon-bedrock-handling-quota-problems/)を実施ください)"
+        error_message = "【エラー】Bedrockのモデル負荷が高いようです。1分待ってから、ブラウザをリロードして再度お試しください🙏(改善
しない場合は、モデルを変更するか[サービスクォータの引き上げ申請](https://aws.amazon.com/jp/blogs/news/generative-ai-amazon-bedrock-handling-quota-problems/)を実施ください)"
     st.error(error_message)

4. スロットリング

ワークショップではスロットリングが発生しにくくなるようにエージェントごとにモデルを変える工夫がされていて素晴らしかった👌

  • bedrock-master: Claude 3.5 Haiku
  • web-search-master: Claude 3.5 Sonnet v2
  • your-tech-advisor: Claude 3.5 Sonnet v1

しかし普段 Amazon Bedrock を使っていない AWS アカウントだとデフォルトのクォータ値が低く,エラーが出ることがあった.よって,時間があれば Service Quotas で On-demand InvokeModel requests per minute for Anthropic Claude xxx の緩和申請をしてからワークショップに取り組むと良さそう.今回はクォータ値が多少大きかった Claude 3 Sonnet(レガシー) に変更した.

まとめ🤖

Amazon Bedrock のマルチエージェントコラボレーション機能に入門できる素晴らしい記事だった👏

時間的にはスロットリングの試行錯誤も含めて1時間半で完走できた🏃‍♂️おすすめです〜