Strands Agentsの「Agent Builder」を試す
Strands Agentsについていろいろ触ってきたのだが、
そういえば、Quickstartでインストールしてた開発用パッケージのうち、
上記以外に開発用パッケージが2つある
strands-agents-tools
: エージェントに与えるサンプルのツールのパッケージstrands-agents-builder
: Strandsエージェントとツールの構築を支援するエージェントのパッケージ(?)
strands-agents-builder
についてはユーザガイドには見当たらないなーと思ってたけど、Examplesのほうにあった。
ざっと見た感じ、CLIでエージェントを作成できるものの様子。少し試してみる。
GitHubレポジトリがあった。
Strands Agent Builder
数行のコードで AI エージェントを構築できる、モデル駆動型アプローチ。
Strands Agent Builder は、独自の AI エージェントやツールを構築・テスト・拡張するための対話型ツールキットです。これにより、ターミナルから直接、専門的なエージェントの作成、カスタムツールの開発、複雑な AI ワークフローの構築が可能になります。
機能
- 🏗️ カスタムツールの即時ホットリロードによる作成とテスト
- 🤖 特化機能を備えた専門エージェントの構築
- 🔄 既存ツールの拡張と機能強化
- 💬 豊富な出力を持つ対話型コマンドラインインターフェース
- 🛠️ 強力な統合ツール群(シェル、エディタ、HTTP、Python など12種以上)
- 🧠 ツールの永続化・読み込みを可能にするナレッジベース連携
- 🎮 専門エージェント向けのカスタムシステムプロンプト
- 🪄 ツールの委譲によるネストされたエージェント機能
- 🔧 動的ツール読み込みによる機能拡張
- 🖥️ 環境変数によるカスタマイズと管理
統合ツール一覧
Strands は以下のような豊富な組み込みツールを備えています:
- agent_graph:エージェントのグラフ構築と管理
- calculator:数学的演算
- cron:cron ジョブによるタスクスケジューリング(Windows 非対応)
- current_time:現在の日付と時刻を取得
- editor:行編集、検索、取り消しなどのファイル編集操作
- environment:環境変数の管理
- generate_image:Amazon Bedrock による画像生成
- http_request:API 呼び出し、Web データ取得、ローカル HTTP サーバー呼び出し
- image_reader:画像の処理と分析
- journal:構造化タスクやログを作成してエージェントに管理させる
- load_tool:実行時にツールを動的に読み込む
- memory:Amazon Bedrock ナレッジベースにおけるエージェントの記憶保持
- nova_reels:Amazon Bedrock 上の Nova Reels による動画生成
- python_repl:Python コードの実行(Windows 非対応)
- retrieve:RAG や記憶などの目的で Bedrock ナレッジベースからセマンティック検索
- shell:シェルコマンドの実行(Windows 非対応)
- slack:Slack 統合(リアルタイムイベント、API アクセス、メッセージ送信)
- speak:テキストから音声生成(macOS の say コマンドまたは Amazon Polly)
- stop:エージェントのイベントループを強制停止
- store_in_kb:ナレッジベースへ内容を保存
- strand:特化機能を持つネストされたエージェントインスタンスを作成
- swarm:複数エージェントの群制御/ネットワーク連携
- think:並列ブランチによる深い推論
- use_aws:AWS サービスとの連携
- use_llm:カスタムプロンプトによる新しい AI イベントループ実行
- welcome:Strands Agent Builder のウェルカムテキストの管理
- workflow:順序付けされたワークフローのオーケストレーション
ナレッジベース連携
Strands Agent Builder は Amazon Bedrock のナレッジベースを利用し、カスタムツールやエージェント設定、開発履歴を保存・取得します。
特徴:
- 🔄 過去に作成したツールやエージェント設定の取得
- 💾 カスタムツール/エージェントの永続保存
- 🛠️ セッションをまたいだツールの反復的改善
- 🔍 過去セッションのツール検索・拡張
モデル設定
最適化済みのデフォルト設定
Strands は Bedrock モデルプロバイダ用に最適化された設定を標準で備えています:
上記の設定により、以下が可能になります:
- Claude Sonnet 4(最新の高性能モデル)の利用
- 最大トークン数:32,768
- 複雑な操作向けの長時間タイムアウト(15分)
- 自動リトライと適応型バックオフ
- 応答中のリアルタイム推論を可能にする interleaved thinking
- 再帰的推論を可能にする 2,048 トークンの thinking 機能
環境変数でこれらの値をカスタマイズ可能です:
カスタムモデルプロバイダ
以下の引数を渡すことで、Strands に別のモデルプロバイダと設定を適用できます
Strands Agent Builder には
bedrock
とollama
が同梱されています。カスタムモデルプロバイダ(手順はこちら)を実装済みの場合は、
$CWD/.models
配下に Python モジュールを配置し、instance
関数を公開してください。例:
カスタムシステムプロンプト
# 環境変数経由で設定 export STRANDS_SYSTEM_PROMPT="You are a Python expert." # またはローカルファイル echo "You are a security expert." > .prompt
🌍 環境変数による構成
環境変数 説明 デフォルト STRANDS_MODEL_ID 使用する Claude モデル ID us.anthropic.claude-sonnet-4-20250514-v1:0 STRANDS_MAX_TOKENS 応答最大トークン数 32768 STRANDS_BUDGET_TOKENS 推論トークン予算 2048 STRANDS_THINKING_TYPE thinking 機能のタイプ enabled STRANDS_ANTHROPIC_BETA Anthropic のベータ機能(カンマ区切り) interleaved-thinking-2025-05-14 STRANDS_CACHE_TOOLS ツールのキャッシュ戦略 default STRANDS_CACHE_PROMPT プロンプトのキャッシュ戦略 default STRANDS_SYSTEM_PROMPT システムプロンプト(.prompt ファイルを上書き) None STRANDS_KNOWLEDGE_BASE_ID デフォルトナレッジベース ID None STRANDS_TOOL_CONSOLE_MODE リッチなコンソール UI の有効化 enabled BYPASS_TOOL_CONSENT ツール確認プロンプトのスキップ false
ライセンス
本プロジェクトは Apache License 2.0 の下で提供されています。詳細は LICENSE ファイルをご参照ください。
インストール
ローカルMacでDockerコンテナを用意して試すこととする。
作業ディレクトリ作成
mkdir strands-agent-builder-work && $_
以下のようなDockerfileを作成。devontainerのイメージを使わせてもらってAWS CLIだけ追加しておいた。
FROM mcr.microsoft.com/devcontainers/python:1-3.12-bookworm
RUN apt-get update && \
apt-get install -y curl unzip groff less
# MacなのでARMバイナリをダウンロード
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
./aws/install --update && \
rm -rf awscliv2.zip aws/
USER vscode
WORKDIR /workspace
ビルド
docker build -t my-strands-agent-builder .
コンテナ実行。StrandsのデフォルトだとBedrockモデルが使用されるため、ホストのAWSのクレデンシャルをマウントしておく。
docker run -it --rm \
--mount type=bind,source="$(pwd)",target=/workspace,consistency=cached \
--mount type=bind,source="$HOME/.aws",target=/home/vscode/.aws,consistency=cached \
-w /workspace \
my-strands-agent-builder \
bash
以降はコンテナ内の作業
AWS CLIで確認しておく。
aws bedrock-runtime converse \
--model-id 'us.anthropic.claude-3-5-haiku-20241022-v1:0' \
--messages '[{"role": "user", "content": [{"text": "こんにちは!"}]}]' \
--region us-east-1 \
| jq -r .output.message.content[0].text
こんにちは!お手伝いできることがありましたら、どうぞおっしゃってください。どんなことでも承ります。
ではパッケージインストール。
pipx install strands-agents-builder
installed package strands-agents-builder 0.1.7, installed using Python 3.12.11
These apps are now globally available
- strands
done! ✨ 🌟 ✨
CLIがインストールされたので、Usageを見る
strands --help
usage: strands [-h] [--kb KNOWLEDGE_BASE_ID] [--model-provider MODEL_PROVIDER] [--model-config MODEL_CONFIG] [query ...]
Strands - A minimal CLI interface for Strands
positional arguments:
query Query to process
options:
-h, --help show this help message and exit
--kb KNOWLEDGE_BASE_ID, --knowledge-base KNOWLEDGE_BASE_ID
Knowledge base ID to use for retrievals
--model-provider MODEL_PROVIDER
Model provider to use for inference
--model-config MODEL_CONFIG
Model config as JSON string or path
あと、自分のAWS CLIの設定は ap-northeast-1 がデフォルトになっているが、StrandsのデフォルトはUSっぽい。とりあえず us-east-1 に変更しておく。
export AWS_DEFAULT_REGION=us-east-1
Quickstart
GitHubのREADMEと公式ドキュメントを見比べながら試してみる。
まずはコマンド単体で実行するとどうやらインタラクティブモードになるみたい。
SDKの使い方みたいなのが表示されてるけど、これはREPLとして使えということなのか、ここに指示を入れろということなのか・・・・?
とりあえずGitHubのREADMEにあるものをそのまま使ってみる。
「sentiment_analyzer」という名前のテキストの感情分析ツールを作成し、いくつかの例でテストしてください。
どうやらこんな感じでコードを生成してくれるみたい。
実行確認が求められているので進めてみる。
うーん最初に失敗したときは自動でやり直したんだけど、次のタイミングは無理だった模様。
どうやらCLI自体は完全にコケたみたい。exitでCLIから抜けるしかなさそう。
一応作りかけの残骸はある。
tree tools
tools
├── __pycache__
│ └── sentiment_analyzer.cpython-312.pyc
└── sentiment_analyzer.py
2 directories, 2 files
うーん、まだちょっと時期尚早かなぁ・・・
Claude Code/Gemini CLIみたいにCLIインタフェースで、Strands SDKの使い方を知っている、ってのが多分ウリなんだよね。それならば Strands SDKのMCPを使えば、Claude CodeやGemini CLIでも同じことはできるのではなかろうかとは思うのだけど。他になんかあるんかな?
まあ試すとしてももうしばらくしてからかな