Supervisor-Worker架构
核对日期:2026-05-09。
1. 定义与边界
Supervisor-Worker 架构由一个监督者 Agent 负责任务拆分、分派、进度检查、结果汇总;多个 Worker Agent 负责具体子任务。它对应 Anthropic 所说的 orchestrator-workers workflow,也接近 LangGraph Supervisor、CrewAI hierarchical process、AutoGen group chat 等框架中的管理者模式。
它不同于 Router:Router 主要选择路径;Supervisor 会持续协调、检查、重试和综合。
2. 为什么重要
复杂任务常常无法预先知道所有子任务。例如代码修改需要先读项目结构,再决定改哪些文件;研究任务需要根据初步搜索结果扩展方向。Supervisor-Worker 允许监督者动态生成子任务,并让 Worker 并行探索。
适用:
- 多文件代码修改、复杂调研、竞品分析、合规审查。
- 子任务数量和内容无法预先固定。
- 需要并行搜索或多专家观点。
不适用:
- 路径稳定的审批流程。
- Worker 间高度共享状态且强事务一致。
- 极低时延场景。
3. 核心机制
任务单示例:
{
"task_id": "w2",
"worker_type": "security_reviewer",
"objective": "检查新增工具调用是否有越权风险",
"input_refs": ["plan_v3", "tool_registry"],
"output_schema": {"findings": [], "evidence": [], "confidence": "number"},
"deadline_ms": 120000
}
4. 架构模式
| 模式 | 描述 | 优点 | 风险 |
|---|---|---|---|
| Central supervisor | 所有通信经 supervisor | 容易审计和控权 | 瓶颈明显 |
| Blackboard | Worker 写共享任务板 | 并行效率高 | 需要冲突控制 |
| Hierarchical teams | 多层 supervisor 管理团队 | 适合大任务 | 调试复杂 |
| Debate/review | 生成者、批评者、裁决者 | 质量更高 | 成本高 |
5. 工程实现
def run_supervisor(goal):
board = TaskBoard(goal=goal)
while not board.done() and board.round < MAX_ROUNDS:
new_tasks = supervisor.plan_next(board.snapshot())
board.add_tasks(policy_filter(new_tasks))
results = run_workers_concurrently(board.ready_tasks())
for result in results:
board.attach_result(result)
verdict = supervisor.verify_and_merge(board.snapshot())
board.update(verdict)
return supervisor.final_answer(board.evidence_pack())
关键设计:
- Worker 输出必须带 evidence,不接受“我认为完成了”。
- Supervisor 不能直接执行高风险工具,需委托受限 Worker 或 workflow。
- Worker 的工具权限按角色最小化。
- 用任务板保存状态:pending/running/blocked/done/rejected。
- 并行结果合并需要冲突检测和来源优先级。
6. 生产实践
- 限制最大 Worker 数、最大轮数、最大总 token。
- 为每个 Worker 分配独立 trace span,便于定位失败。
- 对 Worker 结果做 schema 校验和引用检查。
- 对并行搜索设置去重和覆盖率要求。
- 对最终答案保留“采用了哪些 Worker 结论、拒绝了哪些结论”。
7. 常见反模式
- Worker 角色只是名字不同,提示词和工具完全相同。
- Supervisor 只做拼接,不验证证据。
- Worker 之间互相聊天导致上下文失控。
- 没有任务边界,一个 Worker 承接过大子任务。
- 没有并发预算,成本随 Worker 数指数增长。
8. 评测方法
- Decomposition Quality:子任务是否覆盖目标且互不重复。
- Worker Utility:每个 Worker 结果是否被最终答案有效使用。
- Evidence Quality:结论是否有来源、日志或工具结果支持。
- Merge Correctness:冲突结论是否被识别和处理。
- Parallel Efficiency:并行是否缩短时延而非只增加成本。
9. 安全与治理
- Worker 不应继承 Supervisor 的全部上下文和权限。
- 子任务输入要最小化,避免把用户隐私广播给所有 Worker。
- 对外部搜索 Worker 加强 prompt injection 防护。
- 对自动生成的子任务进行策略过滤,禁止绕过审批。
- 对多 Agent 通信做审计,记录任务分派和结果采纳链路。
10. 工程手册补充
10.1 控制流、状态流、工具流
Supervisor-Worker 的关键是“集中调度,分散执行,统一裁决”。
| 流 | Supervisor 负责 | Worker 负责 |
|---|---|---|
| 控制流 | 拆任务、分派、暂停、重试、终止 | 只执行被分派的任务 |
| 状态流 | 维护 task board、全局 facts、冲突记录 | 维护局部 scratchpad 和 artifact |
| 工具流 | 为每个 worker 下发工具白名单 | 按白名单调用工具并返回证据 |
| 观测流 | 记录调度决策、验收结果和成本 | 记录工具调用、失败原因和产物 |
10.2 失败恢复策略
| 失败模式 | 观测信号 | 恢复动作 |
|---|---|---|
| Worker 空转 | 多次返回无新 artifact | 降低重试次数,换 worker 或改写任务 |
| Worker 越界 | 调用未授权工具或处理非本任务数据 | 拒绝结果,记录安全事件 |
| Supervisor 过度微管 | 每个小步骤都重新分派 | 合并任务,减少 handoff |
| 汇总幻觉 | 最终答案引用不存在的 worker 证据 | 强制 evidence citation 校验 |
伪代码:
while not board.done():
task = supervisor.pick_next(board)
worker = supervisor.assign(task, registry)
scoped = make_scoped_context(task, board.shared_facts)
result = worker.run(scoped, tools=task.allowed_tools)
verdict = supervisor.verify(task, result)
board.append_trace(task.id, worker.id, result, verdict)
if verdict.status == "accepted":
board.merge(result.artifacts)
elif verdict.recoverable:
board.requeue(task, reason=verdict.reason)
else:
board.abort(reason=verdict.reason)
上线清单:
- Worker 角色、输入、输出、工具和禁止事项写成 contract。
- Supervisor 的裁决不能只靠自然语言偏好,要有 rubric 或 verifier。
- 共享状态只保存可复用事实和产物,不保存所有 worker 内部推理。
- 监控 worker 成功率、重试率、handoff 次数、冲突率、汇总引用失败率。
11. 权威资料
- Anthropic, Building effective agents - Orchestrator-workers: https://www.anthropic.com/engineering/building-effective-agents
- Anthropic, How we built our multi-agent research system: https://www.anthropic.com/engineering/built-multi-agent-research-system
- LangGraph Supervisor reference: https://reference.langchain.com/python/langgraph-supervisor
- CrewAI hierarchical process: https://docs.crewai.com/en/learn/hierarchical-process
- AutoGen SelectorGroupChat: https://microsoft.github.io/autogen/stable/user-guide/agentchat-user-guide/selector-group-chat.html
- Google ADK multi-agent systems: https://google.github.io/adk-docs/agents/multi-agents/