# 第二阶段 · 模块二 · 第六节:Agent Swarms 多代理团队
什么是 Agent Swarms?Claude Code 如何实现多代理团队协作?TeamCreateTool 的工作原理是什么?代理间如何通信和协调?
Claude Code 全局架构
┌─────────────────────────────────────────────────────────────────────┐
│ 工具层(tools/) │
│ │
│ Agent Swarms ← 本节 │
│ ├── TeamCreateTool │
│ ├── 团队管理 │
│ └── 代理通信 │
└─────────────────────────────────────────────────────────────────────┘
源码位置:`src/utils/swarm/`
Agent Swarms 是 Claude Code 的多代理协作框架,允许多个代理(Agent)组成团队,协同完成复杂任务。
┌─────────────────────────────────────────────────────────────────────┐
│ Agent Swarm 多代理团队 │
│ │
│ Team Lead(团队领导) │
│ ├─ Member A ──> 任务 1 │
│ ├─ Member B ──> 任务 2 │
│ └─ Member C ──> 任务 3 │
│ │
│ 通过 SendMessage 通信 │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│ Agent Swarm 核心概念 │
│ │
│ Team Lead:团队领导者,负责协调和分配任务 │
│ Team Member:团队成员,负责执行具体任务 │
│ Communication:代理间通过消息传递通信 │
│ Shared Context:共享上下文,保持信息同步 │
└─────────────────────────────────────────────────────────────────────┘
问 1:Agent Swarms 和子代理有什么区别?
// 子代理:
// - 主从关系
// - 主代理控制子代理
// - 任务分配简单
// Agent Swarms:
// - 团队协作
// - 代理间平等通信
// - 支持复杂协调
源码位置:`src/tools/TeamCreateTool/TeamCreateTool.ts`
export const TeamCreateTool = buildTool({
name: TEAM_CREATE_TOOL_NAME,
searchHint: 'create a multi-agent swarm team',
maxResultSizeChars: 100_000,
shouldDefer: true,
inputSchema: z.strictObject({
team_name: z.string().describe('团队名称'),
description: z.string().optional().describe('团队描述'),
agent_type: z.string().optional().describe('团队领导类型'),
}),
})
// 1. 生成唯一团队名称
function generateUniqueTeamName(providedName: string): string {
if (!readTeamFile(providedName)) {
return providedName // 团队不存在,使用提供的名称
}
return generateWordSlug() // 生成新的唯一名称
}
// 团队配置
interface TeamConfig {
teamName: string
teamLead: AgentDefinition
members: AgentDefinition[]
sharedContext: SharedContext
communication: CommunicationConfig
}
源码位置:`src/utils/swarm/constants.ts`
export const TEAM_LEAD_NAME = 'team-lead'
export const SWARM_SESSION_NAME = 'claude-swarm'
export const SWARM_VIEW_WINDOW_NAME = 'swarm-view'
export const TMUX_COMMAND = 'tmux'
export const HIDDEN_SESSION_NAME = 'claude-hidden'
// Swarm Socket 名称(无 tmux 时使用)
export function getSwarmSocketName(): string {
return `claude-swarm-${process.pid}`
}
// 团队成员命令环境变量
export const TEAMMATE_COMMAND_ENV_VAR = 'CLAUDE_CODE_TEAMMATE_COMMAND'
// 默认使用当前 Claude 二进制文件
// 团队成员颜色环境变量
export const TEAMMATE_COLOR_ENV_VAR = 'CLAUDE_CODE_AGENT_COLOR'
// 用于彩色输出和面板标识
// 计划模式环境变量
export const PLAN_MODE_REQUIRED_ENV_VAR = 'CLAUDE_CODE_PLAN_MODE_REQUIRED'
// 设置为 'true' 时要求成员进入计划模式并获得批准后才能写代码
// Tmux 用于管理多个代理会话
// 创建团队会话
tmux new-session -s 'claude-swarm-team1'
// 创建成员窗口
tmux new-window -t 'claude-swarm-team1' -n 'member-a'
tmux new-window -t 'claude-swarm-team1' -n 'member-b'
// 发送命令
tmux send-keys -t 'claude-swarm-team1:member-a' 'claude --agent' Enter
// 团队内消息
type TeamMessage =
| { type: 'task'; to: string; content: string } // 任务分配
| { type: 'result'; from: string; content: string } // 结果返回
| { type: 'status'; from: string; status: 'idle' | 'busy' } // 状态更新
| { type: 'error'; from: string; error: string } // 错误报告
// SendMessage 实现
async function sendMessage(
to: string,
content: string
): Promise<void> {
// 1. 序列化消息
const message = JSON.stringify({
type: 'message',
from: currentAgentId,
to,
content,
timestamp: Date.now()
})
// 2. 发送到目标代理
await tmux.sendKeys(to, message)
}
问 1:代理间如何共享上下文?
// 共享上下文方式:
// 1. 共享文件
// - 通过文件系统共享数据
// - 定期同步
// 2. 消息广播
// - 重要信息广播给所有代理
// - 保持信息一致
// 3. 共享存储
// - Redis 等 KV 存储
// - 高效同步
// Team Lead 职责
const teamLeadPrompt = `你是团队领导,负责:
1. 分析任务需求
2. 分解任务
3. 分配给团队成员
4. 协调进度
5. 汇总结果
`
// 任务分配算法
function assignTasks(tasks: Task[], members: Agent[]): Map<Agent, Task[]> {
// 1. 评估任务复杂度
// 2. 评估成员能力
// 3. 考虑负载均衡
// 4. 分配任务
}
源码位置:`src/utils/swarm/swarmView.ts`
// 团队视图
function renderSwarmView(team: Team): HTMLElement {
return (
<div className="swarm-view">
<TeamHeader team={team} />
<MemberList members={team.members} />
<TaskBoard tasks={team.tasks} />
<ActivityLog logs={team.activityLogs} />
</div>
)
}
// 实时更新团队状态
// 通过 tmux 监控所有成员窗口
// 实时收集输出
// 更新视图
// 示例:创建代码分析团队
const team = await createTeam({
teamName: 'code-analysis',
description: '代码分析团队',
members: [
{ name: 'architect', type: 'architect-agent' },
{ name: 'reviewer', type: 'review-agent' },
{ name: 'doc-writer', type: 'docs-agent' }
]
})
// Team Lead 分析后分配任务
// 示例:创建开发团队
const devTeam = await createTeam({
teamName: 'feature-dev',
description: '功能开发团队',
members: [
{ name: 'frontend', type: 'frontend-agent' },
{ name: 'backend', type: 'backend-agent' },
{ name: 'tester', type: 'qa-agent' }
]
})
答案:
// 适用场景:
// 1. 复杂项目分析
// - 多角度分析
// - 专业分工
// 2. 大型代码重构
// - 前端/后端分离
// - 测试同步
// 3. 多文档处理
// - 并行处理多个文件
// - 汇总结果
// 不适合:
// 1. 简单任务
// - 开销大于收益
// 2. 实时交互
// - 延迟太高
答案:
// 协调策略:
// 1. 清晰的角色定义
// - 每个成员职责明确
// - 避免重复工作
// 2. 有效的通信协议
// - 消息格式统一
// - 响应时间约定
// 3. 冲突解决机制
// - Team Lead 裁决
// - 优先级策略
答案:
// 冲突处理策略:
// 1. Team Lead 裁决
// - Team Lead 拥有最终决策权
// - 其他成员服从协调
// 2. 优先级队列
// - 高优先级任务优先执行
// - 低优先级任务等待
// 3. 资源竞争
// - 使用锁机制协调
// - 避免多个成员同时修改同一文件
// 4. 消息优先级
// - 紧急消息优先处理
// - 使用消息队列实现
答案:
// Tmux 优势:
// 1. 持久化
// - 会话不依赖终端连接
// - 网络断开不会终止任务
// 2. 多窗口
// - 一个会话支持多个窗口
// - 方便管理多个成员
// 3. 会话共享
// - 多个用户可以连接同一会话
// - 支持协作
// 4. 资源控制
// - 可以限制资源使用
// - 避免某个成员耗尽资源
| 资源 | 说明 |
| `src/utils/swarm/constants.ts` | 团队常量 |
| `src/tools/TeamCreateTool/TeamCreateTool.ts` | 团队创建工具 |
下一节我们将进入 Task 任务系统:
- 任务创建和追踪
- 任务输出管理
- 任务依赖