Swarmモードとは?
Swarmモードは、複数の永続的な自律Agentを並列にデプロイし、複雑なタスクを協力して解決します。LLMを搭載したLead Agentがチームを動的に調整します。タスクの計画、Agentの生成、作業の再割り当て、リアルタイムイベントに基づく意思決定を行います。 タスクが事前に分解されて変更されない静的なオーケストレーションとは異なり、Lead Agentは進捗を継続的に監視し、状況の変化に応じて新しいタスクの作成、冗長な作業のキャンセル、アイドルAgentの再割り当てを行います。仕組み
ShannonのSwarm Workflowはイベント駆動のLead Agentループで動作します:Lead Agentイベントループ
Lead Agentは特定のイベントで起動し、次のアクションを決定します:ライフサイクルの概要
- 初期計画 — Leadがユーザーのクエリを受け取り、オプションで依存チェーンを持つ初期タスクセットを作成
- Agent生成 — Leadが依存順序を尊重してAgentを生成し、タスクを割り当て
- イベント駆動の調整 — Agentが作業を完了したり、アイドルを報告したり、チェックポイントに到達した際に、Leadが動的にタスクを再割り当て、計画を修正、または新しいAgentを生成
- 統合 — すべてのタスクが完了すると、Leadは専用の統合Agentを生成するか、
doneを宣言して最終レスポンスを生成
タスク依存関係 (DAG)
タスクは他のタスクへの依存関係を宣言でき、有向非巡回グラフ(DAG)を形成します:task-4は3つのリサーチタスクがすべて完了するまで割り当てられません。Leadはrevise_planを通じて新しい依存チェーンを動的に作成できます。
Lead Agentアクション
Leadが起動するたびに、1つ以上のアクションを選択します:| アクション | 説明 |
|---|---|
spawn_agent | 特定のタスク用に新しいAgentを作成 |
assign_task | 保留中のタスクをアイドルAgentに割り当て |
revise_plan | 新しいタスクを動的に作成、または既存のタスクをキャンセル |
send_message | 特定のAgentにメッセージを送信 |
broadcast | すべてのAgentにメッセージを送信 |
file_read | ワークスペースファイルを読み取り(LLMコストゼロ、最大3ラウンド) |
shutdown_agent | 特定のAgentを終了 |
interim_reply | ユーザーに進捗更新をプッシュ |
noop | 何もしない(現在アクション不要) |
done | すべての作業の完了を宣言し、クロージングフェーズに進む |
reply | ユーザーに最終回答を直接返す(クロージングフェーズのみ) |
synthesize | 直接回答する代わりに合成パイプラインをトリガー |
Agentアクション
各イテレーションで、Agentは1つのアクションを選択します:| アクション | 説明 |
|---|---|
tool_call | ツールを実行(Web検索、ファイル読み取りなど) |
publish_data | ワークスペースを通じてチームに発見を共有 |
send_message | 特定のチームメイトにダイレクトメッセージを送信 |
request_help | Leadに新しいヘルパーAgentの生成を要請 |
idle | 現在のタスクが完了したことを通知し、再割り当てを待つ |
done | 最終レスポンスを返す(自動的にidleに変換) |
Agentは自分自身を終了できません。Agentが
doneを返すと、自動的にidleステータスに変換されます。shutdown_agentでAgentを終了できるのはLead Agentのみです。これにより、Leadがチーム構成の完全な制御を維持します。Agent間通信
Swarm Agentは2つのメカニズムで協調します:P2Pメッセージング
AgentはRedisベースのメールボックスを通じて特定のチームメイトにダイレクトメッセージを送信します。メッセージタイプにはrequest、offer、accept、delegation、infoがあります。
各LLM呼び出し前に、Agentのメールボックスで新しいメッセージがチェックされます。受信メッセージはAgentのプロンプトコンテキストに表示されます。
共有ワークスペース
Agentはトピックベースのワークスペースリストに発見を公開します。各イテレーション前に、すべてのAgentがすべてのトピックから最新のワークスペースエントリを取得し、チーム全体が集合的な進捗を把握します。知識重複排除
Shannonは3層の重複排除メカニズムでAgent間の冗長な作業を防止します:L1: Agent単位のURLフェッチキャッシュ
L1: Agent単位のURLフェッチキャッシュ
各AgentはすでにフェッチしたURLをキャッシュします。同じAgentループ内で同じURLが再度リクエストされた場合、ネットワーク呼び出しなしでキャッシュされたコンテンツが返されます。
L2: Agent間共有URLメタデータ
L2: Agent間共有URLメタデータ
URLメタデータ(タイトル、要約、主要な事実)はチーム内のすべてのAgent間で共有されます。Agent BがAgent Aがすでに処理したURLをフェッチしようとすると、再フェッチではなくキャッシュされたメタデータを受け取ります。これにより時間とトークンの両方を節約できます。
L3: 検索オーバーラップ検出
L3: 検索オーバーラップ検出
全Agent間で発見された検索結果URLを追跡します。新しい検索で返されたURLの70%以上が他のAgentにより既に発見されている場合、システムは新しいアングルを探すよう警告を注入します。さらに、検索飽和検出器がJaccard単語レベル類似度(しきい値0.7、3クエリのウィンドウ)を使用して最近のクエリを比較し、重複検索をフラグします。
収束検出
3つのメカニズムでAgentが無期限に実行されることを防止します:進捗なし検出
進捗なし検出
Agentが3回連続で意味のあるアクションを実行しなかった場合(空または認識不能なaction)、収束と見なされidleステータスに遷移します。
tool_call、send_message、publish_dataはこのカウンターをリセットします。連続エラー中止
連続エラー中止
3回連続で永続的なツールエラーが発生した場合(レートリミットなどの一時的エラーを除く)、Agentは中止し、失敗を報告します。
最大イテレーション強制完了
最大イテレーション強制完了
最後のイテレーションでAgentが
doneまたはidleを呼び出していない場合、Workflowが強制完了し、直近のイテレーションからサマリーを構築します。グローバル予算制御
Swarmの実行は3層の予算制約でコストの暴走を防止します:| 予算層 | デフォルト | 説明 |
|---|---|---|
max_total_llm_calls | 200 | すべてのAgent全体のLLM呼び出し最大回数 |
max_total_tokens | 1,000,000 | すべてのAgent全体の最大トークン消費量 |
max_wall_clock_minutes | 30 | Swarm全体の最大ウォールクロック時間 |
Swarmと他のWorkflowの使い分け
| シナリオ | 推奨Workflow |
|---|---|
| シンプルなQ&A、単一ステップのタスク | Simple / DAG |
| 引用付きのマルチステップリサーチ | Research Workflow |
| マルチAgentコードレビュー、テスト、修正 | Swarm |
| 多角的な金融分析(ファンダメンタル、テクニカル、センチメント) | Swarm |
| Python/Bash実行によるデータ処理パイプライン | Swarm |
| Agentが中間的な発見を共有する必要があるタスク | Swarm |
| 動的なサブタスク発見を伴う長時間の探索 | Swarm |
| サブタスク間の複雑な依存チェーンを持つタスク | Swarm |
Swarmモードは各Agentが複数のLLMイテレーションを実行し、Lead Agentの調整決定もトークンを消費するため、標準Workflowよりも多くのトークンを消費します。永続的で協調的なマルチAgent実行から本当に恩恵を受けるタスクに使用してください。
設定
Swarmの動作はconfig/features.yamlで制御されます:
| パラメータ | デフォルト | 説明 |
|---|---|---|
swarm.enabled | true | Swarm Workflowの有効/無効 |
swarm.max_agents | 10 | Agent総数の上限(初期 + 動的) |
swarm.max_iterations_per_agent | 25 | Agentごとの推論-行動ループの最大回数 |
swarm.agent_timeout_seconds | 1800 | Agentごとのタイムアウト(30分) |
swarm.max_messages_per_agent | 20 | AgentごとのP2Pメッセージ上限 |
swarm.workspace_snippet_chars | 800 | プロンプト内のワークスペースエントリの最大文字数 |
swarm.workspace_max_entries | 5 | 各Agentに表示される最近のエントリ数 |
swarm.max_total_llm_calls | 200 | Swarm全体のグローバルLLM呼び出し予算 |
swarm.max_total_tokens | 1000000 | Swarm全体のグローバルトークン予算 |
swarm.max_wall_clock_minutes | 30 | Swarmの最大ウォールクロック時間 |
ストリーミングイベント
Swarm Workflowはリアルタイム監視用のSSEイベントを発行します:| イベントタイプ | Agent ID | タイミング |
|---|---|---|
WORKFLOW_STARTED | swarm-supervisor | Workflow開始時 |
PROGRESS | swarm-lead / swarm-supervisor | 計画、生成、再割り当て |
LEAD_DECISION | swarm-lead | Leadが計画決定を行った(生成、割り当て、修正など) |
TASKLIST_UPDATED | swarm-lead | タスク依存グラフが変更された(タスクの作成またはキャンセル) |
TEAM_STATUS | swarm-lead | チーム構成が変更された(Agentの生成またはシャットダウン) |
AGENT_STARTED | Agent名 | Agentが最初のイテレーションを開始 |
AGENT_COMPLETED | Agent名 | Agentが完了 |
WORKFLOW_COMPLETED | swarm-supervisor | 最終統合完了 |
次のステップ
Swarmチュートリアル
Swarm Workflowのステップバイステップガイド
WorkflowとPattern
他のWorkflowタイプと認知パターン
ストリーミング
リアルタイムイベントストリーミング
コスト管理
マルチAgentタスクの予算管理