角色专业化——规划者、批判者、执行者、验证者 本节摘要:2026 年最常见的多智能体分解:一个规划、一个执行、一个批判或验证。MetaGPT(arXiv:2308.00352)把它形式化为编码进角色提示的标准作业流程(SOP)——产品经理写 PRD、架构师出设计、项目经理拆任务、工程师实现、QA 跑测试,遵循 。ChatDev(arXiv:2307.07924)用「对话链」串起设计师、程序员、评审、测试员,并引入「交流式去幻觉」(执行者缺细节时显式追问而非编造)。本节强调验证者是承重角色:Cemri 等的 MAST 研究显示,21.3% 的多智能体失败源于验证缺口——系统输出了没人检查过的答案;PwC 报告结构化验证回路把准确率从 10% 拉到 70%(7 倍)。
本节摘要:2026 年最常见的多智能体分解:一个规划、一个执行、一个批判或验证。MetaGPT(arXiv:2308.00352)把它形式化为编码进角色提示的标准作业流程(SOP)——产品经理写 PRD、架构师出设计、项目经理拆任务、工程师实现、QA 跑测试,遵循
Code = SOP(Team)。ChatDev(arXiv:2307.07924)用「对话链」串起设计师、程序员、评审、测试员,并引入「交流式去幻觉」(执行者缺细节时显式追问而非编造)。本节强调验证者是承重角色:Cemri 等的 MAST 研究显示,21.3% 的多智能体失败源于验证缺口——系统输出了没人检查过的答案;PwC 报告结构化验证回路把准确率从 10% 拉到 70%(7 倍)。解法不是「更多 Agent」,而是「不同角色 + 至少一个确定性验证者」。
阅读完本节,你应当能够:
通用的多智能体系统产出通用的输出。群聊里三个程序员写出三种口味的同一平庸代码。你可以加更多 Agent、更多轮,仍跨不过质量门槛。
解法不是更多 Agent——是不同的 Agent。分派不同角色:给批判者规划者没有的工具;给验证者一套客观测试套件。这样系统才有「基于事实纠正的内部异议」,而非并行猜测。
批判者主观、有意见、常是 LLM;验证者客观、确定、常是代码。它们不是同一个角色。
MetaGPT 把软件工程 SOP 编码为角色提示:产品经理写 PRD → 架构师出系统设计 → 项目经理拆任务 → 工程师实现 → QA 工程师跑测试。每个角色有严格的输入输出 schema;角色提示说清这个角色「是什么」「必须产出什么」。Code = SOP(Team) 公式——确定性 SOP 把一个 LLM 团队变成可预测的流水线。
ChatDev 加了关键一招:执行者需要计划里没有的具体细节时,先显式问设计师再继续,而非把细节「合理地」编出来。实现:角色提示里写「当你需要没被给定的具体信息时,先按名字问相关角色,再产出。」
⚠️ 交流式去幻觉直击 LLM 最经典的失败——用流畅措辞把缺的细节编圆。把它写进每个执行者角色提示,几乎零成本就能挡掉一大类幻觉。
Cemri 等(MAST)追踪了 1642 次多智能体执行失败。21.3% 是验证缺口——系统输出了没人检查过的答案。剩下 79% 里,很大一部分可回溯到「有个检查默默失败或根本没跑」。验证是承重角色。
PwC 报告(CrewAI 部署,2025):加一个结构化验证回路,准确率从 10% 升到 70%。一个角色带来 7 倍增益。
两者都用。 批判者抓验证者讲不出的「品味问题」;验证者抓批判者看不见的、只在运行时显现的 bug。
系统里每个角色都是 LLM,每个角色的输出都是「我觉得行」。经典 MAST 失败。至少加一个其通过/失败由代码(而非 LLM)决定的验证者。
code/main.py 实现一个构建简单 Python 函数的四角色流水线:规划者出规范,执行者生成代码字符串,批判者(LLM 模拟)标明显见问题,验证者在沙箱(exec)里跑生成的代码对测试用例。
class Planner: def run(self, goal): return {"fn_name": "add", "params": ["a","b"], "spec": "返回 a+b"} class Executor: def run(self, spec): return f"def {spec['fn_name']}({','.join(spec['params'])}):\n return {spec['params'][0]}+{spec['params'][1]}" class Critic: def run(self, code, spec): # 主观检查:有 def? 有 return? 参数对? issues = [] if "return" not in code: issues.append("缺 return") return {"accept": not issues, "issues": issues} class Verifier: def run(self, code, test_cases): # 客观检查:真正跑代码 ns = {}; exec(code, ns) for args, expected in test_cases: fn = ns[list(ns)[-1]] # 取最后定义的函数 if fn(*args) != expected: return {"pass": False, "evidence": f"{args} 期望 {expected}"} return {"pass": True}
# happy:执行者产出正确代码 → 批判者+验证者都过 # 扰动:执行者产出 off-spec 但看起来合理的代码 # → 批判者miss(措辞流畅),验证者catch(测试失败)
设计要点:扰动路径里,批判者因为代码看起来合理而 miss,验证者因为测试失败而 catch。这正是「主观/客观并用」的价值——两者覆盖的失败空间不重叠。
| 框架 | 角色专精的表达 | 验证者如何落地 |
|---|---|---|
| CrewAI | Agent(role, goal, backstory) 是教科书级专精面 |
一个 goal 为「校验」的 Agent 调测试工具 |
| LangGraph | 节点可有专精提示,边强制流水线 | 一个调用测试运行器的节点,条件边决定回路 |
| MetaGPT | SOP 内建于角色提示,5 角色固定 | QA Engineer 角色跑测试 |
| ChatDev | 对话链串角色 + 交流式去幻觉 | tester 角色跑测试,失败回送 programmer |
| AutoGen | 角色特化的 ConversableAgent,GroupChat 里单字名 | 一个调用代码执行的 Agent |
💡 心法:框架差异在「角色怎么表达」,共识在「必须有验证者」。 任何框架落地这四个角色,关键都是别让所有角色都是 LLM——至少一个的 pass/fail 由代码决定。
outputs/skill-role-designer.md:输入任务,产出角色花名册(3~5 个角色)、每角色的输入输出 schema、验证者检查。在把 Agent 接进框架前先用它过一遍。
code/main.py,看验证者如何抓批判者漏的 bug。再加一个静态分析检查(数 return 出现次数)作为额外验证者。它抓到了运行时测试漏的什么?Code = SOP(Team),严格 I/O schema 把团队变流水线。下一节,我们从线性流水线转向并行/集群/网络化架构,看当多个对等 Agent 通过共享状态协作、无固定编排者时,系统如何扩展与涌现行为。