前回の記事では生成AI用Agentの開発フレームワークである Starnds Agents を試してみました。
Strands Agents - AWSにより開発されたオープンソースAI エージェントSDKを試してみた
この記事ではStrands Agents がサポートする Swarmを試してみます。
Swarm とは
Swarm は「群れ」「集団行動」を意味する言葉で、AI分野では 複数のエージェント(AI)が協調・分散してタスクを解決する仕組み を指します。
単一の大規模モデルではなく、専門性を持った小さなエージェントを連携させることで、柔軟かつスケーラブルに問題を解決できるのが特徴です。
それぞれのエージェントを異なるLLMモデルで動作させたり、単一LLMに対して異なる人格を与えたエージェントを複数どうさせることで、最終的な回答の精度を高めたり、多角的な意見を含んだ回答を作成させることができます。
例えば何かの調査を行う際に以下のエージェントを作り最終的にその結果を結合します。
market_agent→ 市場動向の分析tech_agent→ 技術的な分析biz_agent→ ビジネス応用分析summary_agent→ 最後に要約
引き継ぎ(handoff)
実際に各エージェントは同時にLLMと対話を行うわけではなくシーケンシャルに問い合わせを行います。その際handoff(引継ぎ)というコマンドで自分の情報を次のAgentに引き渡します。
さっそくやってみる
まずは以下のswarm.pyを実行します。
# swarm.py
import asyncio
import os
from strands import Agent
from strands.multiagent import Swarm
from strands.models.bedrock import BedrockModel
# --- AWS プロファイルとリージョン設定 ---
os.environ["AWS_PROFILE"] = "bedrock"
os.environ["AWS_REGION"] = "us-east-1"
# --- Bedrock Claude モデル ---
bedrock_model = BedrockModel(
model_id="us.anthropic.claude-3-7-sonnet-20250219-v1:0",
)
# --- エージェント定義 ---
market_agent = Agent(
system_prompt=(
"私は market_agent です。必ず出力の最初に 'market_agent:' と書いてください。"
"生成AIの市場動向を分析し、日本語で200文字以内にまとめてください。"
),
name="market_agent",
model=bedrock_model,
)
tech_agent = Agent(
system_prompt=(
"私は tech_agent です。必ず出力の最初に 'tech_agent:' と書いてください。"
"生成AIの技術的側面(仕組み・課題・進化)を日本語で200文字以内にまとめてください。"
),
name="tech_agent",
model=bedrock_model,
)
biz_agent = Agent(
system_prompt=(
"私は biz_agent です。必ず出力の最初に 'biz_agent:' と書いてください。"
"生成AIのビジネス応用事例や効果を日本語で200文字以内にまとめてください。"
),
name="biz_agent",
model=bedrock_model,
)
summary_agent = Agent(
system_prompt=(
"私は summary_agent です。必ず出力の最初に 'summary_agent:' と書いてください。"
"market, tech, biz 各エージェントの情報を統合して、"
"日本語で200文字以内に簡潔にまとめてください。"
),
name="summary_agent",
model=bedrock_model,
)
# --- Swarm 作成 ---
swarm = Swarm(
[market_agent, tech_agent, biz_agent, summary_agent],
max_handoffs=20,
max_iterations=20,
execution_timeout=900.0,
node_timeout=300.0,
)
def main():
# ✅ Swarm 実行(同期呼び出し)
result = swarm(
"生成AIの市場・技術・ビジネス活用について分析し、日本語で200文字以内に要約してください。"
)
print("\n\n=== 実行結果 ===")
print(f"ステータス: {result.status}")
# --- summary_agent の最終要約 ---
if "summary_agent" in result.results:
print("\n--- 最終要約 (200文字以内) ---")
sa = result.results["summary_agent"]
final_text = (
getattr(sa, "result", None)
or getattr(sa, "final_output", None)
or getattr(sa, "content", None)
or getattr(sa, "output", None)
)
print(final_text if final_text else "(出力なし)")
if __name__ == "__main__":
main()python -u swarm.py
I see that the user wants an analysis of the generative AI market, technology, and business applications summarized in Japanese in under 200 characters. While I can provide market analysis, I should collaborate with other agents to deliver a comprehensive response covering all three requested aspects.
Tool #1: handoff_to_agent
market_agent: 生成AIの市場は急速に拡大しており、2023年の約1,260億ドルから2030年には約1.3兆ドル規模に成長すると予測されています。特に企業向けAIソリューション、クリエイティブツール、カスタマーサービス分野での需要が高まっています。大手テック企業の投資競争も激化しています。tech_agent: 生成AIの技術的側面について説明します。
生成AIは主に大規模言語モデル(LLM)に基づき、膨大なデータから学習して新しいコンテンツを生成します。自己注意機構(Transformer)により文脈理解が向上し、数十億のパラメータを持つモデルが高度な文章生成・画像生成を実現。技術的課題には幻覚(誤情報生成)、バイアス、計算コスト、プライバシー問題があり、小型化・効率化・マルチモーダル連携が進行中です。
この技術分析をビジネス応用の観点と組み合わせるために、ビジネスエージェントに引き継ぎます。
Tool #1: handoff_to_agent
biz_agent: 生成AIのビジネス応用事例としては、顧客サポートの自動化、マーケティングコンテンツ作成の効率化、製品開発における市場分析と予測、人事プロセスの最適化が挙げられます。これにより企業は業務プロセス効率化、人的リソースの最適配分、パーソナライズされた顧客体験の提供、データ分析の高度化を実現し、コスト削減と収益増加の両面で効果を上げています。
Tool #1: handoff_to_agent
summary_agent: 生成AIは拡大市場で成長中。技術面では大規模言語モデルとTransformer技術により文脈理解が可能だが、幻覚・バイアス・計算コスト・プライバシーが課題。ビジネスでは顧客サポート自動化、コンテンツ作成効率化、市場分析予測、人事最適化に活用され、業務効率化とコスト削減、収益増加に貢献している。
=== 実行結果 ===
ステータス: Status.COMPLETED
--- 最終要約 (200文字以内) ---
summary_agent: 生成AIは拡大市場で成長中。技術面では大規模言語モデルとTransformer技術により文脈理解が可能だが、幻覚・バイアス・計算コスト・プライバシーが課題。ビジネスでは顧客サポート自動化、コンテンツ作成効率化、市場分析予測、人事最適化に活用され、業務効率化とコスト削減、収益増加に貢献している。途中処理では英語が混ざるケースもありますが、最終的にsummary;agentが他3agentの回答をサマリーして出力しています。
ポイント
ポイントは以下の部分です。
swarm = Swarm(
[market_agent, tech_agent, biz_agent, summary_agent],
max_handoffs=20,
max_iterations=20,
execution_timeout=900.0,
node_timeout=300.0,
)
<snip>
result = swarm(
"生成AIの市場・技術・ビジネス活用について分析し、日本語で200文字以内に要約してください。"
)これにより系4つのエージェントが協調して動作し回答を生成します。
それぞれのエージェントは以下の様に個別の人格が与えられています。
market_agent = Agent(
system_prompt=(
"私は market_agent です。必ず出力の最初に 'market_agent:' と書いてください。"
"生成AIの市場動向を分析し、日本語で200文字以内にまとめてください。"
),
name="market_agent",
model=bedrock_model,
)modelパラメータを変えることでエージェントごとに呼び出すLLMモデルを変更させることもできます。

