监督者模式 本节摘要:一个首席 Agent 负责规划与派发,专职工人在各自干净的上下文里并行执行,再回报给首席综合——这就是监督者/编排者-工人(Supervisor/Orchestrator-Worker)模式,Anthropic 研究系统(Claude Opus 4 当首席、Sonnet 4 当子 Agent)的生产架构。它在内测研究评测上比单 Agent Opus 4 高 +90.2%,而 Anthropic 工程帖指出 BrowseComp 上 80% 的方差仅由 token 用量解释——多智能体赢,主要是因为每个子 Agent 拿到全新上下文窗口。
本节摘要:一个首席 Agent 负责规划与派发,专职工人在各自干净的上下文里并行执行,再回报给首席综合——这就是监督者/编排者-工人(Supervisor/Orchestrator-Worker)模式,Anthropic 研究系统(Claude Opus 4 当首席、Sonnet 4 当子 Agent)的生产架构。它在内测研究评测上比单 Agent Opus 4 高 +90.2%,而 Anthropic 工程帖指出 BrowseComp 上 80% 的方差仅由 token 用量解释——多智能体赢,主要是因为每个子 Agent 拿到全新上下文窗口。本节从原语搭出监督者模式,用 Python threading 实现三个并行工人,并覆盖 2026 年生产部署的工程教训:按查询复杂度伸缩、先宽后窄、彩虹部署、token 主导,以及三类典型失败(规划幻觉、过度探索、综合冲突)。
阅读完本节,你应当能够:
threading 从零实现一个三工人监督者,并测量墙钟收益。研究类任务是单 Agent 系统的典型翻车现场。你问「2023 到 2026 年多智能体系统有什么变化?」,单 Agent 顺序读五篇论文,把半张上下文塞满它们的原文,到第五篇时已忘了第一篇,且无法并行。
监督者模式修复它:一个首席 Agent 规划搜索,把每个子问题委派给一个工人,再综合。每个工人拿到自己的 20 万 token 窗口处理一个窄问题。首席从不见原始论文,只见工人摘要。
max(工人耗时) + 规划 + 综合,而非 sum(工人耗时)。⚠️ token 主导是这条模式的第一性约束:80% 的方差由 token 用量解释,而非模型选择。这意味着「上多智能体」本质是「花钱买上下文洁净度」——决策依据应是任务价值能否覆盖这 15 倍成本。
LangGraph 原本提供 langgraph-supervisor 高层 create_supervisor 助手。2025 年 LangChain 把推荐改为直接用工具调用实现监督者,因为工具调用对「首席看到什么」(上下文工程)控制更细。库仍可用,文档现在推荐工具调用形式。
code/main.py 用 threading 实现一个三并行工人的监督者,无真实 LLM——工人脚本化模拟「取数-摘要」。
import threading, time class Worker: def __init__(self, name): self.name = name def run(self, sub_q): time.sleep(0.3) # 模拟取数+摘要 return {"sub_q": sub_q, "summary": f"{self.name} 对『{sub_q}』的发现"} class Lead: def plan(self, query): # 分解成三个子问题(真实里是 LLM 调用) return [f"{query} · 维度{i}" for i in ("A","B","C")] def synthesize(self, results): return "综合: " + " | ".join(r["summary"] for r in results) def run(self, query, workers): sub_qs = self.plan(query) results = [None] * len(sub_qs) def task(i, w, q): results[i] = w.run(q) threads = [threading.Thread(target=task, args=(i, workers[i], sub_qs[i])) for i in range(len(sub_qs))] for t in threads: t.start() for t in threads: t.join() # 并行,墙钟≈max 而非 sum return self.synthesize(results)
设计要点:三个 0.3 秒的工人并行跑,墙钟约 0.35 秒而非 0.9 秒。但 spawn 有开销——工人太少时 spawn 成本可能吞掉并行收益(练习 1 会量化这个拐点)。
综合前做一次轻量冲突检测,避免静默选边:
def detect_conflicts(results): # 简化:检测摘要中的数值互相矛盾(真实里可用嵌入相似度+差异) nums = [extract_numbers(r["summary"]) for r in results] # 若同一实体出现不同数值,标记冲突 return find_contradictions(nums)
冲突存在时,综合里显式标注分歧而非悄悄挑一个——这是避免用户被蒙在鼓里的关键。
| 实现 | 首席如何派发 | 工人如何回传 | 何时选 |
|---|---|---|---|
| 原生工具调用(2026 推荐) | 首席的工具 schema 含「spawn_worker」,LLM 决定调谁、传什么 | 工具返回值即摘要,首席只见摘要不见原始上下文 | 想精细控制「首席看到什么」 |
LangGraph create_supervisor(legacy) |
高层封装,自动接 LLM 选择 | reducer 合并到共享状态 | 快速原型,接受其默认行为 |
| CrewAI Hierarchical | manager LLM 派 Task 给 Agent | Task 输出链式进下一 Task | 角色清晰、流程已建模 |
| OpenAI Swarm 交接 | 首席通过交接工具转给工人 | 工人完成后交回首席 | 无状态、轻量协调 |
Anthropic 子 Agent(Task) |
父 Agent spawn 子 Agent,scoped 任务 | 子 Agent 只回传摘要 | 主上下文需保持洁净 |
💡 心法:所有变体都遵循同一原则——首席只看摘要,不看原始上下文。 Anthropic 明确只把子答案(而非工人原始上下文)送进综合,这是 token 主导结论的工程落地:综合步骤的上下文越干净,质量越高。
outputs/skill-supervisor-designer.md:输入用户查询,产出监督者模式设计——首席系统提示、工人角色、子问题分解规则、综合模板。在构建新研究类 Agent 系统前先用它过一遍。
code/main.py,改首席派 5 个工人而非 3,观察墙钟。在演示中,工人数量到多少时 spawn 开销超过并行收益?create_supervisor(legacy)与新工具调用推荐。哪个对「首席看到什么」控制更好?为什么 Anthropic 只把子答案、不把工人原始上下文送进综合?create_supervisor 库转向直接工具调用,以精细控制首席的可见上下文。下一节,我们延伸到层级架构——当监督者之上还有监督者,系统如何分层管理,以及这种层级固有的失败模式(信息逐级有损、级联错误)。