跳到主要内容

多 Agent 协调

Claude Code 支持多 Agent 并行协作,通过 coordinator/ 模块和 Agent 工具实现复杂任务的分解与并行处理。

协调架构

┌──────────────────────────────────────┐
│ 主 Agent (Parent) │
│ 完整上下文 · 所有工具 · 决策者 │
├──────────────┬───────────────────────┤
│ │ │
│ ┌──────────▼──────────┐ │
│ │ Agent 协调器 │ │
│ │ (coordinator/) │ │
│ └──┬──────┬──────┬────┘ │
│ │ │ │ │
│ ┌──▼──┐┌──▼──┐┌──▼──┐ │
│ │ A1 ││ A2 ││ A3 │ 子 Agent │
│ └─────┘└─────┘└─────┘ │
└──────────────────────────────────────┘

子 Agent 类型

General Purpose(通用)

拥有所有工具的完整 Agent,适合需要读写操作的任务。

Explore(探索)

只读 Agent,专注于代码探索和信息收集。适合:

  • 搜索代码模式
  • 阅读文件了解结构
  • 回答关于代码库的问题

Plan(规划)

只读 Agent,专注于架构设计。适合:

  • 设计实施方案
  • 识别关键文件
  • 评估架构取舍

Code Reviewer(代码审查)

审查型 Agent,专注于代码质量。适合:

  • 对照计划审查实现
  • 检查编码规范
  • 发现潜在问题

通信机制

Agent → Parent

子 Agent 完成后返回单条结果消息给父 Agent:

子 Agent 执行任务

收集结果

返回结果字符串给父 Agent

父 Agent 继续推理

Parent → Agent

通过 SendMessage 工具向运行中的 Agent 发送消息:

SendMessage({
to: "explorer-agent", // Agent 名称
message: "也检查一下 utils 目录"
})

Agent ← → Agent

Agent 之间不直接通信,所有协调通过父 Agent 中转。

并行执行策略

独立任务并行

当多个任务之间没有依赖关系时,同时启动:

// 在一条消息中启动多个 Agent
Agent({ name: "search-api", prompt: "搜索所有 API 端点" })
Agent({ name: "search-db", prompt: "搜索所有数据库查询" })
Agent({ name: "search-test", prompt: "搜索所有测试文件" })

前台 vs 后台

模式适用场景
前台 (默认)需要结果才能继续
后台 (run_in_background)有独立工作要做
// 后台运行,完成后自动通知
Agent({
prompt: "运行完整测试套件",
run_in_background: true
})
// 不等待,继续做其他工作

Worktree 隔离

设置 isolation: "worktree" 让 Agent 在独立的 Git 工作树中运行:

主仓库 (main)
├── worktree-1/ (feature-a 分支)
│ └── Agent 1 独立开发
├── worktree-2/ (feature-b 分支)
│ └── Agent 2 独立开发
└── 原始目录不受影响

优势:

  • 并行修改同一文件不冲突
  • 完成后可选择合并或丢弃
  • 自动清理无变更的 worktree

团队协作

通过 TeamCreate 工具创建 Agent 团队:

TeamCreate({
team_name: "frontend-team",
description: "前端开发团队",
agents: [
{ name: "designer", type: "general-purpose" },
{ name: "developer", type: "general-purpose" },
{ name: "reviewer", type: "code-reviewer" }
]
})

最佳实践

  1. 明确任务边界 — 每个子 Agent 应有清晰的任务范围
  2. 优先使用 Explore — 信息收集用只读 Agent,安全且高效
  3. 合理使用后台 — 只在有独立工作时使用后台模式
  4. 避免过度分解 — 简单任务不需要多 Agent
  5. 提供充分上下文 — 子 Agent 不继承父 Agent 的对话历史,需要在 prompt 中提供完整信息