层级架构及其失败模式 本节摘要:层级架构就是监督者嵌套——经理 Agent 之上还有子经理,子经理之上还有工人。CrewAI 的 是教科书版:一个 动态委派任务并校验输出;LangGraph 的对应物是 。当任务真的是一张组织架构图时,这是最自然的模式;但它也是最容易坍塌进管理循环的模式——经理派活不当、误读子输出、无法达成共识。本节搭出一个三级层级,对比「happy path」与「扰动 path」(顶层把「legal」错标成「finance」),让你亲眼看到错误如何沿树级联,最后给出工程护栏:树深封顶 2、显式和解预算、每层加金丝雀问题、每个综合带溯源。多数时候,顺序流水线反而胜过层级。
本节摘要:层级架构就是监督者嵌套——经理 Agent 之上还有子经理,子经理之上还有工人。CrewAI 的
Process.hierarchical是教科书版:一个manager_llm动态委派任务并校验输出;LangGraph 的对应物是create_supervisor(create_supervisor(...))。当任务真的是一张组织架构图时,这是最自然的模式;但它也是最容易坍塌进管理循环的模式——经理派活不当、误读子输出、无法达成共识。本节搭出一个三级层级,对比「happy path」与「扰动 path」(顶层把「legal」错标成「finance」),让你亲眼看到错误如何沿树级联,最后给出工程护栏:树深封顶 2、显式和解预算、每层加金丝雀问题、每个综合带溯源。多数时候,顺序流水线反而胜过层级。
阅读完本节,你应当能够:
监督者模式一旦想通,自然的下一步是「要是工人自己也是监督者呢?」团队有子团队,公司有部门的部门。层级架构镜像这种结构。
问题在于:LLM 经理不是人类经理。人类经理对下属「知道什么」有稳定的先验;LLM 经理每一轮都从上下文里重新推理整个组织。上下文一丝漂移,整棵树就把活派错。
每个内部节点规划、派发、综合;只有叶子做工作。
2026 的事后分析反复发现这三类:
Process.hierarchical 用步数上限防这个,但上限本身又成了超参。⚠️ 这正是「协调难点在协调而非多」的集中体现——Agent 不多,但层级越多,信息逐级有损,错误的发现点离源头越远。每一层综合都是一次有损压缩,语义漂移累积。
顺序(线性流水线)vs 层级:你的任务真的有独立子团队,还是只是一条伪装成树的线性流?若是后者,用顺序;若是前者,用层级但预算显式的和解规则。
Process.hierarchical:在专职 crew 之上挂一个 manager LLM,接收顶层任务、派子任务、评 crew 输出、决定接受/重派/迭代。create_supervisor:内层 supervisor 有自己的图,外层把内层图当不透明节点。比 CrewAI 更易调试(可分别单步每张图),但更难表达树的动态重塑。code/main.py 跑一个三级层级:顶层经理把任务拆成「engineering」与「legal」两支;engineering 子经理再拆成「frontend」「backend」工人;legal 子经理带一个工人。
class Manager: def __init__(self, name, children, decompose_fn, synthesize_fn): self.name = name; self.children = children self.decompose = decompose_fn; self.synthesize = synthesize_fn def run(self, task): subtasks = self.decompose(task) # 经理分解(可能幻觉) outputs = {label: child.run(sub) for label, (child, sub) in subtasks.items()} return self.synthesize(outputs) # 综合可能误读 class Worker: def __init__(self, name, policy): self.name = name; self.policy = policy def run(self, sub): return self.policy(sub)
def perturbed_decompose(task): # 顶层把 "legal" 错标成 "finance" —— 分解漂移 return { "engineering": (eng_sub_mgr, task + " · engineering"), "finance": (legal_sub_mgr, task.replace("legal", "finance")), }
扰动路径下:legal 子经理乖乖做 finance 工作,顶层综合报告 finance 发现,原 legal 问题无人回答。错误在顶层综合时才暴露,离源头(顶层分解)已隔了一层。
设计要点:子经理的「服从性」是层级的双刃剑——它让分工干净,却让错误能无声穿透多层。这正是为什么需要金丝雀问题:在每个子经理处放一个总是被问原问题的工人,用它检测分解漂移。
def run_with_canary(manager, task): result = manager.run(task) canary = task # 原问题不动 canary_answer = canary_worker.run(canary) if contradicts(result, canary_answer): alert("分解漂移:综合与原问题答案矛盾") return result
| 维度 | CrewAI 层级 | LangGraph 嵌套 supervisor | 扁平监督者(Anthropic 选这个) |
|---|---|---|---|
| 树形表达 | 一等公民,manager_llm 动态派 | 显式图嵌套,确定性更强 | 故意不分层 |
| 动态重塑 | 容易(manager 可改派) | 难(图编译时固定) | N/A |
| 循环检测 | 步数上限(超参) | 边的条件可显式限制 | 单层无循环 |
| 调试 | 需穿透 manager 抽象 | 可分别单步每张图 | 最易,因层级浅 |
| 适用 | 任务真有部门结构 | 需可审计可重放 | 研究类、需新鲜上下文 |
💡 Anthropic 在研究系统里故意选扁平监督者而非层级,正是因为层级的错误发现点离源头太远。层级是「任务真像组织架构图」时的选择,不是默认。
outputs/skill-hierarchy-fitness.md:评估给定任务该用层级、顺序还是扁平监督者。输入:任务描述、组织结构、和解预算。输出:模式推荐 + 需防范的具体失败模式。
code/main.py 对比 happy 与扰动路径。从顶层输出完全偏离用户问题,要经过几层经理交接?Process.hierarchical 的一条具体护栏(步数上限、manager_llm 约束),描述它针对哪个失败模式。下一节,我们换一个角度——心智社会(Society of Mind)与多智能体辩论,看多个 Agent 如何通过对抗性争论而非层级派发来逼近更可靠的答案。