Closed5

Strands Agentsの「Agent Builder」を試す

kun432kun432

Strands Agentsについていろいろ触ってきたのだが、

https://zenn.dev/kun432/scraps/e314df9c6c7bb5

https://zenn.dev/kun432/scraps/69b84f892dda9f

https://zenn.dev/kun432/scraps/c5205ddc8f5182

https://zenn.dev/kun432/scraps/bab16f4ecfee6e

そういえば、Quickstartでインストールしてた開発用パッケージのうち、

上記以外に開発用パッケージが2つある

  • strands-agents-tools: エージェントに与えるサンプルのツールのパッケージ
  • strands-agents-builder: Strandsエージェントとツールの構築を支援するエージェントのパッケージ(?)

strands-agents-builderについてはユーザガイドには見当たらないなーと思ってたけど、Examplesのほうにあった。

https://strandsagents.com/latest/documentation/docs/examples/python/cli-reference-agent/

ざっと見た感じ、CLIでエージェントを作成できるものの様子。少し試してみる。

kun432kun432

GitHubレポジトリがあった。

https://github.com/strands-agents/agent-builder?tab=readme-ov-file

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 には bedrockollama が同梱されています。

カスタムモデルプロバイダ(手順はこちら)を実装済みの場合は、$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 ファイルをご参照ください。

kun432kun432

インストール

ローカルMacでDockerコンテナを用意して試すこととする。

作業ディレクトリ作成

mkdir strands-agent-builder-work && $_

以下のようなDockerfileを作成。devontainerのイメージを使わせてもらってAWS CLIだけ追加しておいた。

Dockerfile
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
kun432kun432

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

うーん、まだちょっと時期尚早かなぁ・・・

kun432kun432

Claude Code/Gemini CLIみたいにCLIインタフェースで、Strands SDKの使い方を知っている、ってのが多分ウリなんだよね。それならば Strands SDKのMCPを使えば、Claude CodeやGemini CLIでも同じことはできるのではなかろうかとは思うのだけど。他になんかあるんかな?

まあ試すとしてももうしばらくしてからかな

このスクラップは1ヶ月前にクローズされました