こんにちは、前田です。
最近、社内で「城巡り同好会」を立ち上げ、小田原城に行ってきました。
天守閣からは相模湾と箱根の山々が連なる絶景を見られて、とても良かったです。
さて、今回はAIエージェント開発には欠かせないライブラリ 「Strands Agents」 の標準ツールを紹介します。
1. Strands Agentsとは
Strands AgentsはAWSがオープンソースとして公開したAIエージェント開発用のSDKです。
AIエージェントでは、ToolUseの機能を使って、特定の機能や処理を「ツール」として呼び出すことができます。
Strands Agentsでは、strands-agents-toolsパッケージとして、ファイル操作・Web検索・コード実行・画像生成・AWSサービス連携など、50個のツールが標準で用意されています。
ここでは、これらのツールを、Strands Agentsの 「標準ツール」 として呼ぶこととしますが、これらを利用することで、エージェントに必要な機能を一から実装することなく、すぐに本格的なエージェントを開発することができます。
以下の記事でもStrands Agentsと標準ツールを活用した事例を紹介しています。ぜひあわせてご覧ください。
1.1. まずは動かしてみる
標準ツールのイメージをつかむために、retrieve ツールを使ったRAGの例を見てみましょう。
Amazon Bedrock Knowledge Baseにドキュメントを登録しておけば、以下のコードだけで「社内ドキュメントを参照しながら答えるエージェント」が完成します。
import os from strands import Agent from strands_tools import retrieve # Knowledge BaseのIDを環境変数で渡す os.environ["KNOWLEDGE_BASE_ID"] = "YOUR_KNOWLEDGE_BASE_ID" agent = Agent(tools=[retrieve]) response = agent("ランサムウェアの脅威について説明してください") print(response)
retrieve ツールをエージェントに渡すだけで、エージェントは自動的にKnowledge Baseをベクトル検索し、関連するドキュメントを参照したうえで回答を生成します。
RAGの仕組みをゼロから実装することなく、数行で実現できるのが標準ツールの魅力です。
以下が実行結果です。
ランサムウェアの脅威について、簡潔にまとめます: **ランサムウェアの脅威**は、PCやサーバーに感染してデータを暗号化・窃取し、金銭を要求するマルウェアです。 攻撃者は「データ復元と引き換えの金銭要求」「機密情報のリーク脅迫」「DDoS攻撃」など複数の脅迫を組み合わせて、 被害組織を金銭支払いに追い込みます。 感染経路はVPN機器の脆弱性、リモートデスクトップ、不審メール、USBメモリなど多岐にわたります。 近年ではRaaS(サービス化されたランサムウェア)や情報公開脅迫のみの「ノーウェアランサム」も増加しており、 組織と個人の両方が被害対象となっています。 出典:情報セキュリティ10大脅威.pdf
ドキュメントの内容をもとに、出典まで明示しながら回答してくれました。
次のセクションでは、この標準ツールを機能カテゴリごとに紹介していきます。
2. 標準ツール紹介
2.1. ファイル操作
ファイル操作ツールは、エージェントにファイルを読ませる・新しいファイルを作らせる・既存ファイルを修正させるためのツール群です。
ファイル読み書き
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
file_read |
ファイルを読む・探す・比較する | ファイルの全文確認、キーワード検索、指定行の取得、新旧ファイルの差分比較、変更履歴の確認ができます。PDF・Word・ExcelなどのドキュメントをAmazon Bedrockで処理しやすい形式で渡すことにも対応しています。 | × |
file_write |
ファイルを作る・保存する | ファイルパスと内容を指定して新しいファイルを作成・保存できます。Markdown、JSON、CSV、HTMLなどのテキスト系ファイルの出力ができ、書き込み前のプレビューにも対応しています。 | × |
editor |
既存ファイルを修正する | ファイルの特定の文字列を別の文字列に置き換えたり、正規表現を使って複数箇所を一括置換したりできます。指定した位置への追記や、直前の編集を取り消す操作にも対応しています。ファイル全体を上書きせず、変更したい部分だけをピンポイントで編集できます。 | × |
journal |
構造化ログを作成・管理する | 処理の経緯や結果を構造化されたログとして記録・管理できます。 | × |
2.2. 自動化
自動化ツールは、エージェントにプログラムの実行・ブラウザ操作・外部への通知といった自動化処理をさせるためのツール群です。
コマンド・コード実行
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
calculator |
高度な数学的計算を行う | SymPyライブラリを使い、四則演算にとどまらず方程式の解法・微分・積分・行列演算なども扱えます。標準インストールで利用できます。 | × |
shell |
シェルコマンドを実行する | OSのコマンドやスクリプトを実行し、ファイルシステムの操作、プロセス管理、他プログラムの起動ができます。Linux・macOSのみ対応しており、Windowsでは利用できません。 | × |
environment |
環境変数を管理する | 環境変数の読み取り・書き込み・削除ができます。shell を渡さずこのツールだけを渡すことで、コマンド実行は禁止しつつ環境変数の操作だけを許可できます。 |
× |
python_repl |
Pythonコードをインタラクティブに実行する | 実行状態をセッション間で保持しながらPythonコードを動かせます。実行前にユーザー確認を求める動作がデフォルトで、Linux・macOSのみ対応しており、Windowsでは利用できません。 | × |
code_interpreter |
隔離されたサンドボックス環境でコードを実行する | Amazon Bedrock AgentCore Code Interpreterを利用し、Python・JavaScript・TypeScriptに対応した、ホスト環境に影響を与えない安全な実行環境を提供します。利用には strands-agents-tools[agent-core-code-interpreter] をインストールする必要があります。 |
× |
shell ツールはOSのあらゆるコマンドを実行できる強力なツールです。デフォルトでは実行前にユーザーへの確認を求めますが、環境変数 BYPASS_TOOL_CONSENT=true を設定することで確認をスキップできます。確認をスキップする場合は、許可・禁止コマンドをシステムプロンプトで明示的に指定して制御することが推奨されます。
code_interpreter は隔離されたコンテナ上で動作するため、不特定多数のユーザーが入力したコードの実行や、複数ユーザーのコードを互いに影響させずに処理するマルチテナント構成に向いています。
ブラウザ・コンピュータ実行
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
browser |
Webブラウザを自動操作する | Chromiumベースのブラウザを操作してWebページの閲覧・フォーム入力・情報取得ができます。バックエンドとしてAmazon Bedrock AgentCore Browserを使用でき、AWSが管理するコンテナ化された隔離環境でブラウザを動かせます。利用には strands-agents-tools[agent-core-browser] のインストールが必要です。 |
× |
use_computer |
デスクトップGUIを自動操作する | マウス操作・キーボード入力・スクリーンキャプチャによってGUIアプリケーションを操作できます。利用には strands-agents-tools[use-computer] のインストールが必要です。 |
× |
AgentCore Browserをバックエンドに使うと、セッションのライブビューや録画でエージェントの操作内容を後から確認できるほか、コンテナ隔離と使い捨てセッションによりホスト環境に影響を与えない安全な操作ができます。
通知
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
slack |
Slackと連携する | Slackワークスペースへのメッセージ送受信ができます。利用にはSlack APIトークンが必要です。 | ○ |
2.3. 情報収集
情報収集ツールは、エージェントにインターネットやデータストアから情報を収集させるためのツール群です。
Web検索・スクレイピング
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
tavily_search |
リアルタイムでWeb検索する | AIエージェント向けに最適化された検索APIで、最新情報をリアルタイムに取得できます。利用にはTavily APIキーが必要です。 | ○ |
tavily_extract |
WebページからコンテンツをJSON形式で抽出する | 指定したURLのページ内容を解析し、テキストや構造化データとして取り出せます。利用にはTavily APIキーが必要です。 | ○ |
tavily_crawl |
Webサイトを再帰的にクロールする | 起点となるURLから内部リンクをたどり、複数ページにまたがって情報を収集できます。利用にはTavily APIキーが必要です。 | ○ |
tavily_map |
Webサイトの構造をマッピングする | サイト内に存在するURLを探索し、全体のページ構成を把握できます。利用にはTavily APIキーが必要です。 | ○ |
exa_search |
ニューラル検索でWeb検索する | ニューラル検索とキーワード検索を組み合わせ、意味的に近いページも含めて検索できます。利用にはExa APIキーが必要です。 | ○ |
exa_get_contents |
指定URLのページ全文または要約を取得する | ページのフルコンテンツと要約の両方を取得でき、長文ページの内容把握にも使えます。利用にはExa APIキーが必要です。 | ○ |
bright_data |
Webスクレイピング・検索クエリ・スクリーンショットを実行する | ページのスクレイピング、検索クエリの実行、ページのスクリーンショット取得をまとめて扱えます。利用にはBright Data APIキーが必要です。 | ○ |
http_request |
外部APIにHTTPリクエストを送信する | GET・POST・PUT・DELETEなど主要なHTTPメソッドに対応し、Bearer認証・Basic認証・JWT・AWS SigV4など複数の認証方式をサポートしています。 | × |
rss |
RSSフィードを購読・取得・検索する | 指定したRSSフィードの購読・最新記事の取得・キーワード検索・更新確認ができます。利用には strands-agents-tools[rss] のインストールが必要です。 |
× |
RAG
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
retrieve |
Amazon Bedrock Knowledge Baseからセマンティック検索で情報を取得する | 質問に関連するドキュメントの断片をベクトル検索で取り出し、RAGパターンでの回答生成に利用できます。AWS認証が必要です。 | × |
1.1節の例で紹介したように、エージェントに retrieve を渡すだけで、質問に関連するドキュメントを自動的に参照しながら回答を生成できます。
AWS統合
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
use_aws |
AWSサービスを操作する | S3・DynamoDB・Lambdaなど幅広いAWSサービスに対してAPIを呼び出せます。AWS認証が必要です。 | × |
2.4. マルチメディア
マルチメディアツールは、エージェントに画像・動画・図表などのメディアを生成・処理させるためのツール群です。
画像処理
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
generate_image |
Amazon Bedrock経由でAI画像を生成する | BedrockでホストされているStability AIの画像生成モデル(Stable Diffusion等)を使い、テキストから画像を生成できます。AWS認証が必要です。 | × |
generate_image_stability |
Stability AIモデルで画像を生成する | Stability AIのAPIを直接使い、テキストから画像を生成できます。Bedrock経由ではなくStability AIのAPIキーが必要です。Bedrockホストのモデルを使いたい場合は generate_image を使用してください。 |
○ |
image_reader |
画像ファイルを読み取り・分析する | ローカルの画像ファイルを読み込み、内容をエージェントが解釈できる形式で渡せます。 | × |
image_reader は「画像→テキスト」、generate_image 系は「テキスト→画像」という方向性で、組み合わせることでより幅広い処理が実現できます。
活用例としては以下のようなものが考えられます。
- レシートや領収書の写真を渡して金額・日付・店名を抽出し、経費データとして出力する
- 会議後のホワイトボードを撮影して文字起こし・構造化する
- 商品画像を読み取って特徴を把握し、背景違いの画像を生成する
動画処理
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
nova_reels |
動画を生成する | Amazon Bedrock Nova Reelを使い、テキストや画像をもとに高品質な動画を生成できます。利用には strands-agents-tools[nova-reels] のインストールが必要で、AWS認証も必要です。 |
× |
search_video |
動画をセマンティック検索する | TwelveLabs Marengoモデルを使い、動画の内容を意味的に検索して関連する場面を見つけられます。TwelveLabs APIキーが必要です(Bedrock経由では利用できません)。 | ○ |
chat_video |
動画の内容についてインタラクティブに質問・分析する | TwelveLabs Pegasusモデルを使い、動画の内容に関する質問への回答や詳細な分析ができます。TwelveLabs APIキーが必要です(Bedrock経由では利用できません)。 | ○ |
その他
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
diagram |
アーキテクチャ図・ネットワーク図・UML図を作成する | AWSクラウドアーキテクチャ図・ネットワーク構成図・UML図などを生成できます。内部ではPythonの diagrams ライブラリ(Graphvizベース)を使用しています。利用には strands-agents-tools[diagram] のインストールが必要です。 |
× |
speak |
音声でステータスを伝える | テキストを音声合成して読み上げることができます。macOSまたはAmazon Polly経由での利用に対応しています。 | × |
2.5. エージェント
エージェントツールは、エージェントの記憶管理や高度な推論・マルチエージェント連携を実現するためのツール群です。
メモリ管理
メモリ管理ツールは、エージェントに会話をまたいだ「記憶」を持たせるためのツール群です。
RAGが「登録済みドキュメントへの検索」であるのに対し、こちらは「エージェントが対話の中で積み上げていく記憶」の管理が目的です。
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
agent_core_memory |
セッションをまたいだ記憶を管理する | Amazon Bedrock AgentCore Memoryを使い、ユーザーIDやセッションIDに紐づけて情報を保存・取得・削除できます。エージェントが過去のやり取りを参照しながら応答するための記憶層として機能します。AWS認証が必要です。 | × |
memory |
Amazon Bedrock Knowledge Baseにドキュメントを蓄積する | ドキュメントの追加・削除・一覧管理を行い、エージェントが後から検索できる知識ベースを構築できます。AWS認証が必要です。 | × |
mongodb_memory |
MongoDB Atlasをバックエンドとしたメモリ管理を行う | 会話履歴や情報をMongoDBのベクトルインデックスに保存し、セマンティック検索で取り出せます。接続にはMongoDBクラスターのURI(MONGODB_ATLAS_CLUSTER_URI環境変数)とAWS認証(埋め込みベクトル生成用)が必要です。 |
○ |
mem0_memory |
Mem0を使ったメモリ管理を行う | Mem0 Platform・OpenSearchなどをバックエンドとして選択でき、会話履歴をベクトル検索で管理できます。利用には、MEM0_API_KEYやOPENSEARCH_HOSTなどが必要です。 |
○ |
elasticsearch_memory |
Elasticsearchをバックエンドとしたメモリ管理を行う | 会話履歴や情報をElasticsearchに保存し、セマンティック検索で取り出せます。ELASTICSEARCH_API_KEYとELASTICSEARCH_CLOUD_ID(またはセルフホスト時はELASTICSEARCH_URL)が必要です。 |
○ |
モデル・エージェント実行
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
think |
多段階の推論を行う | 複雑な問題に対して段階的に思考を整理しながら回答を導き出せます。 | × |
use_agent |
ネストされたエージェントインスタンスを実行する | カスタムシステムプロンプトを指定しつつ、モデルの切り替えも可能なエージェントを呼び出せます。use_llm(LLMを直接呼び出すのみ)の後継ツールです。 |
× |
swarm |
複数のエージェントを並列に動かす | 複数のAIエージェントを協調させ、複雑な問題を並列に処理できます。 | × |
graph |
DAGベースのマルチエージェントグラフを作成・実行する | マルチエージェントグラフを実行でき、ノードごとに異なるモデルを設定できます。 agent_graph の後継ツールです。 |
× |
workflow |
マルチステップワークフローを定義・実行する | 複数のステップからなる自動化ワークフローを定義し、順序立てて実行できます。 | × |
2.6. その他
その他のツールには、外部MCPサーバーとの連携や、エージェントの動作を補助する汎用的なユーティリティが含まれます。
| ツール | 役割 | 特徴的な機能 | 外部接続 |
|---|---|---|---|
current_time |
現在時刻を取得する | 指定したタイムゾーンの現在時刻を取得できます。 | × |
batch |
複数のツールを並列実行する | 複数のツール呼び出しをまとめて並列に実行できます。 | × |
sleep |
実行を一時停止する | 指定した時間だけエージェントの処理を停止させることができます。 | × |
stop |
エージェントの実行を終了する | エージェントの処理を正常に終了させることができます。 | × |
handoff_to_user |
ユーザーに制御を委譲する | エージェントがユーザーに判断や操作を委ねることができます。人間が介在するループ(Human-in-the-Loop)の実装に使います。 | × |
cron |
定期タスクを管理する | cronジョブ構文を使い、定期的なタスクの登録・編集・削除ができます。Linux・macOSのみ対応しており、Windowsでは利用できません。 | × |
load_tool |
カスタムツールを動的に読み込む | 実行時に追加のカスタムツールを動的に読み込んでエージェントに使わせることができます。 | × |
mcp_client |
MCPサーバーに接続してリモートツールを使う | 外部のMCPサーバーに動的に接続し、そのサーバーが提供するツールをエージェントから呼び出せます。信頼できないサーバーへの接続にはセキュリティ上のリスクがある点に注意が必要です。 | × |
a2a_client |
A2A準拠エージェントと通信する | Agent-to-Agent(A2A)プロトコルに対応したエージェントと通信できます。利用には strands-agents-tools[a2a-client] のインストールが必要です。 |
× |
3. 実践:AWSコスト分析エージェント
標準ツールを組み合わせると、どんなエージェントが作れるのかを具体的なユースケースで紹介します。
ここでは use_aws・python_repl・file_write を使って、AWSの利用コストを自動で分析し、削減提案をHTMLレポートとして出力するエージェントを作ってみました。
3.1. 何をするエージェントか
use_awsでAWS Cost ExplorerのAPIを呼び出し、直近30日間のサービス別コストを取得するpython_replで集計・分析し、コスト上位のサービスを特定する- システムプロンプトに書いたベストプラクティスをもとに、具体的な改善提案を生成する
file_writeでHTMLレポートとして保存する
3.2. コード
import os from strands import Agent from strands.models import BedrockModel from strands_tools import use_aws, python_repl, current_time, file_write SYSTEM_PROMPT = """あなたはAWSコスト最適化の専門家エージェントです。 ## タスクの流れ 1. use_aws ツールでAWS Cost Explorerから直近30日間のサービス別コストを取得する 2. python_repl で集計・分析し、コスト上位のサービスを特定する 3. 各サービスに対して、ベストプラクティスに基づく改善提案を行う 4. file_write で分析結果をHTMLレポート(cost_report.html)として保存する ## AWSコスト最適化ベストプラクティス(抜粋) ### Amazon Bedrock - モデル選定の見直し: 用途に応じてHaiku→Sonnet→Opusと使い分け - プロンプトキャッシュの活用: キャッシュヒット時は最大90%のトークンコスト削減 - Batch Inference の活用: リアルタイム不要な処理はバッチAPIで実行(50%割引) ### AWS KMS - 不要なCMK(カスタムマスターキー)をAWS管理キーに切り替え - Encryption SDKでデータキーをキャッシュし、頻繁なAPI呼び出しを削減 ### AWS Secrets Manager - 関連するシークレットをJSONで1つに統合 - 非機密情報はParameter Store(無料枠あり)に移行 ## 出力フォーマット 1. コスト概要、2. 上位サービス一覧、3. サービス別改善提案、4. 優先度ランキング ## HTMLレポートの形式 - ファイル名: cost_report.html - テーブルにはCSSでスタイルを当てて見やすくする """ model = BedrockModel( model_id="us.anthropic.claude-haiku-4-5-20251001-v1:0", region_name="us-east-1", ) agent = Agent( model=model, system_prompt=SYSTEM_PROMPT, tools=[use_aws, python_repl, current_time, file_write], ) if __name__ == "__main__": agent("AWSの直近30日間のコストをサービス別に分析して、コスト削減のための改善提案をしてください。HTMLレポートとして保存もお願いします。")
use_aws でCost Explorer APIを呼び出し、python_repl で集計し、file_write でHTMLとして出力するというシンプルな組み合わせです。
コスト削減のノウハウはすべてシステムプロンプトに記載しておくことで、モデル自身が判断しながら提案を生成します。
3.3. 実行結果
実際に実行すると、まずAWSにAPIを呼び出してコストデータを取得し、Pythonで集計したうえで以下のようなレポートを出力しました。
上位2サービス(BedrockとKMS)で全体の84.10%を占めており、その最適化に集中することで月間$1.94・年間$23の削減が見込めるという提案が出ました。
さらに、フェーズ別の見直し案まで自動生成してくれました。
HTML出力結果
標準ツールを組み合わせるだけで、これだけの分析エージェントが数十行のコードで実現できます。
他にも以下のような組み合わせは面白そうです。
image_reader+generate_image: 画像加工エージェント- 既存の商品画像を読み取って特徴を把握し、背景違いや雰囲気違いのバリエーションを自動生成できます
- ECサイトの素材作成などに活用できます
python_repl+tavily_search+retrieve: 情報収集・分析エージェントtavily_searchでWebの最新情報を収集しつつ、retrieveで社内ドキュメントも参照できます- 取得したデータを
python_replでそのまま集計・グラフ化できます - 市場調査や競合分析など、社内外の情報を横断して扱いたいシーンに向いています
rss+slack: 日次情報収集・通知エージェント- 技術ブログや公式リリースのRSSを定期購読し、要約してSlackに通知できます
cronと組み合わせることで、毎朝決まった時間に最新情報を届けるエージェントになります
個人的には、自前でRAGを実装することなく数行で完結できるので retrieve が特にお気に入りです。file_read / file_write や current_time は汎用的にどんなエージェントにも組み合わせられるので、これらもよく使っています。
みなさんもStrands Agentsの標準ツールを使って、業務に役立つエージェントをぜひ作ってみてください。 それでは。
Acroquest Technologyでは、キャリア採用を行っています。
- Azure OpenAI/Amazon Bedrock/ChatGPT/Claude/Gemini 等を活用した、生成AI・AIエージェントシステムの開発
- RAG、マルチエージェント、MCP など、LLMを活用した次世代アプリケーションの研究・実装
- 自然言語/画像/音声/動画解析など、ディープラーニングを活用したAIソリューション開発
- マイクロサービス・DevOps・クラウドネイティブ技術を活用したシステム開発
- 技術ブログ、書籍執筆、カンファレンス登壇、OSS活動など、社内外への技術発信も積極推進
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。