【多Agent协同】OpenClaw Supervisor-Worker架构------搭建多智能体团队化作战系统
一句话导读:当单一AI Agent面对复杂任务时,往往顾此失彼------让Supervisor-Worker架构帮你组建一支各司其职的AI团队,让"老板"负责拆解调度,"员工"专注执行,协同攻克复杂工作流。
引言:单一Agent的能力瓶颈
2026年,AI Agent已深度融入开发者的日常工作------从自动搭建环境、管理文件,到跨平台消息响应。但随着任务复杂度提升,单一Agent的局限性日益凸显:
上下文窗口限制:处理长文档时,Agent会"遗忘"早期信息。一个负责会议纪要的Agent,既要听懂录音,又要整理要点,还要同步日程,很容易顾此失彼。
工具冲突:让同一个Agent同时管理文件系统、调用API、执行代码,权限边界难以把控,安全风险陡增。
专业分工缺失:就像你不能让一个程序员同时做UI设计和文案撰写,AI也需要专业分工------有的擅长代码,有的精通文档,有的专攻数据。
多Agent协同作业(Multi-Agent) 正是解决这些问题的关键------让负责调度的"老板"、负责写代码的"技术专家"和负责搜集信息的"情报员"各司其职,通过标准协议进行串联、并联,组成一支高效的"数字团队"。
本文将深入OpenClaw的Supervisor-Worker架构,从设计原理到实战案例,从核心实现到部署方案,带你搭建第一个多智能体团队。
一、多Agent架构设计
1.1 Supervisor-Worker模型
OpenClaw的多Agent架构采用经典的Supervisor-Worker(主从)模式,这与点对点平级Agent有本质区别:
存储层
执行层
调度层
用户层
拆解任务1
拆解任务2
拆解任务3
返回结果
返回结果
返回结果
汇总输出
读写
读写
读写
读写
用户输入
Supervisor Agent
任务拆解与调度
Worker A
语音转文字
Worker B
纪要整理
Worker C
日程同步
共享记忆库
MEMORY.md + 向量库
各角色职责清晰:
| 角色 | 职责 | 对应人类团队 |
|---|---|---|
| Supervisor Agent | 接收原始需求、拆解子任务、调度Worker、汇总结果 | 项目经理/团队领导 |
| Worker Agent | 专注执行特定领域任务(如语音识别、文本处理、API调用) | 专业执行者 |
| 共享记忆库 | 存储任务上下文、中间结果、长期记忆 | 团队共享文档 |
1.2 通信机制:JSON-RPC + 事件总线
Agent之间的通信是协作的基础。OpenClaw设计了双层通信机制:
核心工具:sessions_send
Supervisor通过内置工具sessions_send唤起Worker Agent:
typescript
// Supervisor调用Worker的示例
await sessions_send({
agentId: "speech-to-text-worker", // 目标Worker
task: "将录音文件转换为文字", // 任务描述
params: {
filePath: "/tmp/meeting.mp3",
language: "zh"
}
});
Worker执行完毕后,通过相同机制返回结果:
typescript
// Worker返回结果
await sessions_send({
agentId: "supervisor", // 返回给Supervisor
result: {
text: "会议录音转写结果...",
confidence: 0.98
}
});
底层通信:事件总线(EventEmitter)
OpenClaw使用基于Redis的事件总线实现Agent间通信:
Worker Redis事件总线 Supervisor Worker Redis事件总线 Supervisor 发布任务事件 (task:speech-to-text) 订阅事件推送 执行任务 发布结果事件 (result:speech-to-text) 订阅结果推送 汇总处理
事件格式示例:
json
{
"eventId": "evt_abc123",
"type": "task:speech-to-text",
"source": "supervisor",
"target": "speech-to-text-worker",
"payload": {
"taskId": "task_456",
"params": { "filePath": "/tmp/meeting.mp3" }
},
"timestamp": 1741680000000
}
1.3 会话隔离与权限控制
多Agent架构中,安全隔离至关重要。OpenClaw提供了三层隔离机制:
1.3.1 身份层隔离
每个Agent拥有独立的agentId(必须小写),系统基于此精准路由请求、建立独立上下文队列。
1.3.2 会话层隔离
默认情况下,每个Agent处于绝对的上下文隔离中,只关注自己的目标。如果调度者需要跨Agent查看历史会话,必须通过sessions_history工具显式调用。
1.3.3 工具权限隔离
在OpenClaw中,deny的优先级永远高于allow。可以为每个Worker配置细粒度权限:
json
{
"id": "speech-to-text-worker",
"name": "语音转文字专员",
"tools": {
"allow": ["read", "sessions_send"], // 仅允许读文件和通信
"deny": ["exec", "write", "edit", "apply_patch", "bash"] // 拒绝执行任何系统命令
},
"sandbox": {
"mode": "all", // 始终沙箱隔离
"scope": "agent", // 每个Agent独立容器
"resources": {
"cpu": 0.5,
"memory": "1GB"
}
}
}
二、实战案例:会议秘书Agent团队
理论说再多,不如看一次真实的多Agent协同。我们将搭建一个会议秘书团队,处理完整流程:录音转文字 → 纪要整理 → 日程同步。
2.1 团队角色定义
外部系统
会议秘书团队
- 转写任务 调用
返回文字稿 - 整理任务 返回纪要和待办
- 同步任务 调用
返回同步结果
汇总报告
Supervisor
会议秘书调度员
Worker A
语音转写员
Worker B
纪要整理员
Worker C
日程同步员
Whisper API
飞书日历
用户上传录音
2.2 步骤1:创建Agent工作区
首先为三个Agent分别创建工作区:
bash
# 创建Supervisor(会议秘书调度员)
openclaw agents add meeting-supervisor --workspace ~/.openclaw/workspace-meeting-supervisor
# 创建Worker A(语音转写员)
openclaw agents add speech-worker --workspace ~/.openclaw/workspace-speech
# 创建Worker B(纪要整理员)
openclaw agents add summary-worker --workspace ~/.openclaw/workspace-summary
# 创建Worker C(日程同步员)
openclaw agents add calendar-worker --workspace ~/.openclaw/workspace-calendar
# 验证创建结果
openclaw agents list
2.3 步骤2:配置Supervisor(调度中枢)
Supervisor的职责是接收用户指令、拆解任务、调度Worker、汇总结果。
SOUL.md(核心人格):
markdown
# SOUL.md - 会议秘书调度员
我是会议秘书团队的调度中枢,负责协调整个会议处理流程。
## 核心职责
- 接收用户上传的会议录音或文字稿
- 拆解任务:语音转文字、纪要整理、日程同步
- 调用专业Worker执行子任务
- 汇总结果生成完整会议报告
## 性格特点
- 高效:并行调度多个Worker
- 严谨:确保每个子任务完成才汇总
- 透明:向用户汇报进度
## 工作流程
1. 收到会议录音 → 调用 speech-worker 转文字
2. 收到文字稿 → 调用 summary-worker 整理纪要
3. 收到纪要和待办 → 调用 calendar-worker 同步日程
4. 汇总所有结果 → 返回用户
AGENTS.md(团队通讯录):
markdown
# AGENTS.md - 团队通讯录与调度规则
## 团队成员
- **speech-worker** (agentId: speech-worker) - 职责:语音转文字(调用Whisper API)
- **summary-worker** (agentId: summary-worker) - 职责:纪要整理、观点提取、待办识别
- **calendar-worker** (agentId: calendar-worker) - 职责:日程同步(飞书日历)
## 任务调度规则
| 任务类型 | 目标Agent | 调用语法 |
|---------|-----------|---------|
| 语音转文字 | speech-worker | `sessions_send(agentId="speech-worker", task="转写录音", params={filePath})` |
| 纪要整理 | summary-worker | `sessions_send(agentId="summary-worker", task="整理纪要", params={text})` |
| 日程同步 | calendar-worker | `sessions_send(agentId="calendar-worker", task="同步待办", params={tasks})` |
## 工作流约束
- 必须按顺序执行:先转写,再整理,最后同步
- 每个步骤完成后再进入下一步
- 出现错误时记录日志并通知用户
2.4 步骤3:配置Worker A(语音转写员)
markdown
# SOUL.md - 语音转写专员
我是团队的语音转写专家,负责将录音文件转换为文字。
## 核心职责
- 接收音频文件(MP3、WAV、M4A格式)
- 调用Whisper API进行语音识别
- 返回带时间戳的文字稿
## 能力边界
✅ 可以做:
- 音频格式转换
- 多语种识别(中/英/日/韩)
- 说话人分离
❌ 不做:
- 文本总结和分析
- 日程安排
## 工作流程
1. 验证音频文件存在且格式支持
2. 调用Whisper API转写
3. 返回文字稿(含时间戳)
权限配置:
json
{
"id": "speech-worker",
"tools": {
"allow": ["read", "sessions_send"],
"deny": ["exec", "write", "edit", "bash"]
},
"sandbox": {
"mode": "all",
"resources": {
"cpu": 1.0,
"memory": "2GB" // 语音转写需要较多内存
}
}
}
2.5 步骤4:配置Worker B(纪要整理员)
markdown
# SOUL.md - 纪要整理专员
我是团队的内容分析专家,负责将会议文字稿提炼为结构化纪要。
## 核心职责
- 提取会议核心观点和结论
- 识别待办事项(任务、负责人、截止时间)
- 按模板生成结构化纪要
## 输出格式
```markdown
# 会议纪要 - {日期}
## 参会人员
-
## 核心观点
1.
## 待办事项
| 任务 | 负责人 | 截止时间 |
|-----|-------|---------|
| | | |
## 下一步安排
-
工作原则
-
客观提取,不添加主观判断
-
待办事项必须明确负责人和时间
2.6 步骤5:配置Worker C(日程同步员)
markdown# SOUL.md - 日程同步专员 我是团队的日历管家,负责将待办事项同步到飞书日历。 ## 核心职责 - 解析待办事项列表 - 调用飞书API创建日程 - 返回同步结果和链接 ## 能力边界 ✅ 可以做: - 创建飞书日程 - 设置提醒 - 邀请参会人 ❌ 不做: - 修改已有日程 - 删除日历事件 ## 工作流程 1. 接收待办事项列表 2. 为每个任务创建日历事件 3. 返回成功/失败统计
2.7 步骤6:配置通信白名单
在~/.openclaw/openclaw.json中配置Agent间通信权限:
json
{
"agents": {
"list": [
{
"id": "meeting-supervisor",
"workspace": "~/.openclaw/workspace-meeting-supervisor"
},
{
"id": "speech-worker",
"workspace": "~/.openclaw/workspace-speech"
},
{
"id": "summary-worker",
"workspace": "~/.openclaw/workspace-summary"
},
{
"id": "calendar-worker",
"workspace": "~/.openclaw/workspace-calendar"
}
]
},
"tools": {
"agentToAgent": {
"enabled": true,
"allow": ["meeting-supervisor", "speech-worker", "summary-worker", "calendar-worker"]
},
"sessions": {
"visibility": "all" // 允许跨Agent查看会话
}
}
}
2.8 步骤7:绑定通信渠道
如果希望在不同渠道与不同Agent对话,可以配置bindings:
json
{
"bindings": [
{
"agentId": "meeting-supervisor",
"match": {
"channel": "discord",
"peer": { "kind": "channel", "id": "123456789" } // 会议专用频道
}
},
{
"agentId": "calendar-worker",
"match": {
"channel": "feishu",
"peer": { "kind": "user", "id": "user_abc" } // 个人飞书账号
}
}
]
}
重启网关使配置生效:
bash
openclaw gateway restart
三、核心实现:Supervisor-Worker底层机制
3.1 任务拆解算法
Supervisor如何将用户原始需求拆解为子任务?OpenClaw基于LLM的意图识别和规划能力实现。
任务拆解流程:
渲染错误: Mermaid 渲染失败: Parse error on line 2: ...hart TD A[用户输入:"处理今天下午的会议录音"] --> B[ ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got 'STR'
核心代码示例(简化版):
typescript
async function decomposeTask(userInput: string): Promise<TaskGraph> {
// 调用LLM分析任务需求
const analysis = await callLLM(`
分析以下用户请求,拆解为子任务列表,并标明依赖关系:
请求:${userInput}
输出JSON格式:
{
"tasks": [
{"id": "task1", "type": "speech-to-text", "dependsOn": []},
{"id": "task2", "type": "summarize", "dependsOn": ["task1"]},
{"id": "task3", "type": "calendar-sync", "dependsOn": ["task2"]}
]
}
`);
return JSON.parse(analysis);
}
3.2 状态同步:共享记忆库
为避免信息孤岛,OpenClaw通过共享记忆库实现Agent间状态同步。核心机制:
- MEMORY.md:所有Agent可读写的长期记忆文件
- 向量库:语义化存储和检索历史信息
- 工作区文件:临时传递中间结果
状态同步流程:
typescript
// Supervisor写入任务状态
await fs.writeFile(
'~/.openclaw/shared/meeting-task.json',
JSON.stringify({
taskId: 'meeting_001',
status: 'speech_completed',
transcript: '...',
nextTask: 'summarize'
})
);
// Worker读取状态
const state = JSON.parse(
await fs.readFile('~/.openclaw/shared/meeting-task.json')
);
if (state.nextTask === 'summarize') {
// 执行纪要整理
}
3.3 异常处理与重试机制
生产环境中,Worker可能失败(API超时、网络波动)。OpenClaw设计了多层异常处理:
是
否
是
否
Worker执行失败
重试次数<3?
等待2^retry秒
指数退避
重试
通知Supervisor
有备用Worker?
切换到备用Worker
重新执行
记录错误
返回部分结果
核心代码:
typescript
async function executeWithRetry(
workerId: string,
task: Task,
retryCount = 0
): Promise<Result> {
try {
return await callWorker(workerId, task);
} catch (error) {
if (retryCount >= 3) {
// 通知Supervisor切换备用Worker
await notifySupervisor({
type: 'WORKER_FAILED',
workerId,
task,
error: error.message
});
throw error;
}
// 指数退避
const waitTime = Math.pow(2, retryCount) * 1000;
await sleep(waitTime);
return executeWithRetry(workerId, task, retryCount + 1);
}
}
四、部署方案:从单机到分布式
4.1 单机多Agent:进程隔离
对于个人使用或小团队,单机部署足够。OpenClaw通过进程隔离确保Agent间互不干扰:
单机部署
进程3
进程2
进程1
Worker C
Gateway网关
Supervisor Agent
Worker A
Worker B
资源分配:
bash
# 为不同Agent分配不同CPU核心
taskset -c 0-1 openclaw agent start meeting-supervisor # 使用核心0-1
taskset -c 2 openclaw agent start speech-worker # 使用核心2
taskset -c 3 openclaw agent start summary-worker # 使用核心3
4.2 分布式多Agent:K8s部署
当Agent规模扩大,需要分布式部署。OpenClaw支持Kubernetes原生部署:
yaml
# k8s部署示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: meeting-supervisor
spec:
replicas: 1
selector:
matchLabels:
app: openclaw
agent: supervisor
template:
metadata:
labels:
app: openclaw
agent: supervisor
spec:
containers:
- name: openclaw
image: openclaw/agent:latest
env:
- name: AGENT_ID
value: "meeting-supervisor"
- name: WORKSPACE
value: "/workspace"
volumeMounts:
- name: workspace
mountPath: /workspace
volumes:
- name: workspace
persistentVolumeClaim:
claimName: openclaw-workspace-supervisor
---
apiVersion: v1
kind: Service
metadata:
name: supervisor-service
spec:
selector:
app: openclaw
agent: supervisor
ports:
- port: 18789
targetPort: 18789
服务发现:通过K8s Service实现Agent间通信:
typescript
// Worker通过服务名访问Supervisor
const supervisorUrl = 'http://supervisor-service:18789';
await fetch(`${supervisorUrl}/api/message`, {
method: 'POST',
body: JSON.stringify({ result })
});
4.3 弹性扩缩容
根据Worker负载动态调整实例数,避免资源浪费:
yaml
# HorizontalPodAutoscaler配置
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: speech-worker-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: speech-worker
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70 # CPU使用率超过70%时扩容
扩容触发场景:
- 同时处理多个会议录音 → speech-worker自动扩容
- 深夜无任务 → 缩容到1个实例
- 大型会议(多人同时使用)→ 按需扩容
五、成本优化:动态资源管理
5.1 按Worker负载动态扩缩容
OpenClaw内置资源监控,可根据实时负载调整资源分配:
执行
决策
监控
是
否
实时监控CPU/内存
负载 > 阈值?
启动新Worker
停止空闲Worker
配置示例:
json
{
"autoscaling": {
"speech-worker": {
"minReplicas": 1,
"maxReplicas": 5,
"metrics": [
{
"type": "cpu",
"targetAverageValue": 70 // CPU使用率70%
},
{
"type": "queue",
"targetAverageValue": 10 // 队列深度10
}
]
}
}
}
5.2 模型成本优化
为不同Worker配置不同模型,平衡成本与效果:
| Worker类型 | 推荐模型 | 成本策略 |
|---|---|---|
| 语音转写 | Whisper API | 按需付费,但低频使用 |
| 纪要整理 | 本地Llama3 | 零成本,足够胜任 |
| 日程同步 | GPT-4o-mini | 低配模型,仅需简单API调用 |
| Supervisor调度 | Qwen-Max | 中等成本,需要较好推理能力 |
配置示例:
json
{
"models": {
"speech-worker": {
"provider": "openai",
"model": "whisper-1"
},
"summary-worker": {
"provider": "ollama",
"model": "llama3:8b"
},
"calendar-worker": {
"provider": "openai",
"model": "gpt-4o-mini"
},
"meeting-supervisor": {
"provider": "aliyun_bailian",
"model": "qwen-max"
}
}
}
5.3 闲置资源回收
长时间无任务的Worker自动释放资源:
bash
# 设置闲置超时
openclaw config set agent.idleTimeout 300 # 5分钟无任务则停止
# 查看当前活跃Agent
openclaw agent list --active
# 手动回收闲置
openclaw agent prune --idle 10m
六、面试考点:Supervisor-Worker架构核心设计
在技术面试中,关于多Agent协同,面试官通常会考察以下深度问题:
6.1 为什么选择Supervisor-Worker而不是点对点架构?
核心答案:解耦控制逻辑与执行逻辑。
| 维度 | Supervisor-Worker | 点对点平级 |
|---|---|---|
| 控制复杂度 | 中心化,易于管理 | 分散化,协调困难 |
| 任务依赖 | 天然支持DAG | 需额外实现编排 |
| 故障处理 | 统一由Supervisor处理 | 每个Agent自处理,易混乱 |
| 可扩展性 | 新增Worker不影响现有 | 新增Agent需修改多个配置 |
适用场景:有明确业务流程、需要顺序执行的任务(如会议处理),适合Supervisor-Worker;简单并行任务(如同时搜索多个关键词),适合点对点。
6.2 如何防止Agent间通信的死锁?
设计思路:超时 + 超时 + 超时
- 请求超时 :每个
sessions_send调用设置超时(默认30秒) - 队列超时:任务在Worker队列中等待超时(可配置)
- 全局超时:整个工作流最大执行时间
代码示例:
typescript
// 带超时的Agent调用
const result = await Promise.race([
sessions_send({ agentId: "speech-worker", task }),
new Promise((_, reject) =>
setTimeout(() => reject(new Error("Worker timeout")), 30000)
)
]);
6.3 如何保证多Agent下的数据一致性?
核心机制:共享记忆 + 版本控制
- 共享文件:所有Agent读写同一份MEMORY.md,通过文件锁避免并发
- 版本向量:每个写入操作附带版本号,冲突时自动合并
- 事务日志:所有状态变更写入WAL,故障后可恢复
6.4 分布式部署下如何保证会话一致性?
答案:将状态外置到共享存储
共享存储
K8s集群
Supervisor Pod 1
Supervisor Pod 2
Worker Pod 1
Worker Pod 2
Redis
持久卷
- 会话数据:存Redis(快速访问)
- 文件数据:存持久卷(PV)
- 任何Pod重启:从共享存储恢复状态
结语:从单兵作战到团队协作
OpenClaw的Supervisor-Worker架构,让我们看到了AI从"单兵作战"向"团队协作"演进的清晰路径。通过合理的角色分工、标准化的通信协议、完善的异常处理和弹性部署,我们可以构建出真正生产可用的多智能体系统。
会议秘书Agent团队只是起点。同样的架构,可以扩展到:
- 代码开发团队:Supervisor拆解需求,Worker分别负责前端、后端、数据库
- 数据分析团队:Worker分别负责数据抓取、清洗、建模、可视化
- 客服团队:Worker分别处理订单、售后、技术咨询
多Agent的魅力就在于此:将复杂的长逻辑链条,拆解为多个高内聚、低耦合的专业节点异步协作。当你的AI从"一个人"变成"一支队伍",它能创造的价值将呈指数级增长。