Serverless Operations, inc

>_cd /blog/id_w5-9mcx11

title

Strands Agents のSwarm (複数エージェントの同時実行)を試す

前回の記事では生成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モデルを変更させることもできます。

Written by
編集部

亀田 治伸

Kameda Harunobu

  • Facebook->
  • X->
  • GitHub->

Share

Facebook->X->
Back
to list
<-