mcpField
S
swarm

swarm

github.com/langchain-aiエージェントワークフロー30.9k98 回インストール今日更新
リポジトリ

swarm について

swarm は、独立したタスクを複数のサブエージェントに並行して割り当てるスキルです。並行数を制限し、入力順に結果を返すほか、個別の失敗が他のタスクに影響しないため、一括要約や分類、調査に適しています。

主な機能

  1. 01タスクの並行割り当て
  2. 02最大 10 件の並行数制限
  3. 03入力順での結果収集
  4. 04タスク単位の失敗処理

活用シーン

  1. 01複数ファイルの並行要約
  2. 02チケットの一括分類
  3. 03複数トピックの並行調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/langchain-ai/deepagents --skill swarm

インストール後、Claude Code で/swarmを入力して読み込まれたか確認します。

同梱ファイルscripts/index.ts

詳細

Swarm

タスクのリストをサブエージェントに並行して割り振り、並列数を制限しながら結果を収集して、簡潔な要約を返します。

読み込み

REPL の eval ツールは、@/skills/* からの ES モジュールのインポートをサポートしています。 await import("@/skills/swarm") を使ってこのスキルを読み込みます。REPL は、これらのパスをスキルのバックエンドに解決するカスタムモジュールローダーをインストールします。index.ts を eval の本文にインラインで記述しないでください。 インポートがサポート対象で、テスト済みの方法です。ソースをコピーする方法は、ロジックを重複させ、スキルの更新に追従できなくなるため、アンチパターンです。

使用する場面

多数の独立したタスク(たとえば、「この 20 個のファイルをそれぞれ要約する」「この 50 件のチケットをそれぞれ分類する」「この 15 個のトピックを調査する」)があり、順番にではなく並行して実行したい場合に使用します。

使い方

runSwarm(...) は配列ではなく、要約オブジェクトを返します。タスクごとの出力を得るには .results を分割代入してください。要約オブジェクト自体は反復処理できません。

const { runSwarm } = await import("@/skills/swarm");

const { results, completed, failed } = await runSwarm({
  tasks: [
    { description: "Summarize /notes/alpha.md" },
    { description: "Summarize /notes/beta.md" },
    { description: "Summarize /notes/gamma.md" },
  ],
  concurrency: 3,           // optional, defaults to 5, capped at 10
  subagentType: "general-purpose",  // optional; per-task override wins
});

console.log(`${completed} ok, ${failed} failed`);
for (const r of results) {
  console.log(r.id, r.status, r.output ?? r.error);
}

契約

runSwarm(opts) 関数は次の値を受け取ります。

  • tasks(必須):{ description: string, subagentType?: string } の配列です。
  • concurrency(任意、デフォルトは 5、上限は 10):サブエージェントを並行して呼び出す最大数です。
  • subagentType(任意、デフォルトは "general-purpose"):各タスクの実行を依頼するデフォルトのサブエージェントです。タスクごとに指定した subagentType が優先されます。

要約オブジェクトを返します。

{
  total: number;          // tasks.length
  completed: number;      // subagents that returned a result
  failed: number;         // subagents that threw
  results: {              // one entry per task, in input order
    id: number;           // 0-indexed position in `tasks`
    status: "completed" | "failed";
    output?: string;      // on success — subagent's final message
    error?: string;       // on failure — error message
  }[];
}

設計上の注意

  • ディスパッチには tools.task を使用します。これは REPL の PTC レイヤーによって利用可能になります。このスキル自体はサブエージェントを登録しません。エージェントがすでに利用できる機能を使ったファンアウトパターンです。
  • 失敗はタスクごとに捕捉されます。1 つのサブエージェントが失敗しても、スウォーム全体は中断されません。failed の件数と、タスクごとの status を確認してください。
  • 並列数は、すべてのタスクに対する Promise.all ではなく、セマフォ方式のプールで制限されます。たとえば、concurrency=5 で 100 個のタスクを実行する場合、メモリ使用量とツール呼び出し頻度を予測しやすくなります。

コメント