多智能体系统里有一个被反复绕过、却决定成败的隐变量:角色从哪来。是工程师在设计期写死的(产品经理/架构师/工程师),是运行时由一个调度器动态指派的,还是从协作中自己长出来的?三种来源对应三种截然不同的工程税单。本期围绕这条主线,横评 CrewAI、MetaGPT、ChatDev、CAMEL、AutoGen、LangGraph,以及 2026 年两篇把"角色"做成可演化对象的工作——MetaGen 与 ASPEC,拆解角色固化税与专业化红利之间的真实交易结构。
把当下主流多智能体框架按"角色来源"重新切片,会得到三个清晰的范式:静态预设(CrewAI/MetaGPT/ChatDev/CAMEL,设计师在声明期写死角色与职责边界)、动态路由(AutoGen GroupChat 的 select_speaker、LangGraph 的 supervisor 路由,运行时决定谁来发言)、涌现专业化(MetaGen 让角色提示与协作拓扑一起迭代演化,ASPEC 用进化搜索离线发现专家算子并在线培养持久记忆)。
三者的核心权衡可压缩成一句话:角色越预设,可预测性越高、涌现红利越低;角色越涌现,适应性越强、校准与防漂移成本越高。 静态范式的通病是"角色固化税"——智能体行为被 persona 框死,遇到职责缝隙要么集体空转、要么互相越权;涌现范式的通病是"校准税"——不加以约束时,群体要么趋同成同一个通用智能体、要么全员坍缩成"挑刺的评审"。真正值钱的工程判断,不在选哪个框架,而在判断你的任务职责边界是否稳定:稳定就用 SOP 预设,不稳定就得上动态/涌现,并在涌现侧补上结构化校验。
| 框架/机制 | 角色来源 | 分配时机 | 是否可演化 | 通信范式 | 角色固化风险 | 典型代表 |
|---|---|---|---|---|---|---|
| CrewAI | 静态预设(role+goal+backstory) | 声明期 | 否 | 线性/层级流程 | 中(persona 约束行为) | Role-Driven Pipeline |
| MetaGPT | 静态预设 + SOP | 声明期 | 弱 | 发布-订阅结构化文档 | 低(SOP 收口) | 软件公司模拟 |
| ChatDev | 静态预设 + 阶段研讨会 | 声明期 | 弱 | 阶段内双角色对话 | 中(阶段衔接处易断) | 虚拟软件公司 2.0 |
| CAMEL | 静态预设 + inception | 声明期 | 否 | AI-User↔AI-Assistant 配对 | 高(双角色易坍缩) | 角色扮演范式 |
| AutoGen GroupChat | 半动态(select_speaker) | 运行时 | 弱 | 自由会话 + 管理者路由 | 高(发言趋同) | 对话驱动协作 |
| LangGraph Supervisor | 动态路由 | 运行时 | 可重配置 | 显式状态图 | 低(边是显式的) | 图编排 |
| MetaGen | 涌现 | 运行时迭代 | 是(角色+拓扑) | 可变拓扑 | 需校准(易漂移) | 自适应推理 |
| ASPEC | 涌现 + 有状态 | 离线进化 + 在线 | 是(持久记忆) | 算子组合 | 低(专家固化即目的) | 自适应系统 |
判断一个多智能体系统属于哪种范式,只需问三个问题:角色是谁定的、什么时候定的、能不能改。 静态预设回答是"设计师、设计期、基本不能改";动态路由回答是"设计师定候选集、运行时定具体谁上场、可重路由但角色集合不变";涌现专业化回答是"系统自己定、过程中持续改、角色集合本身在增长或分化"。
这条分野之所以关键,是因为它直接决定了系统的耦合方向。静态系统是"角色驱动数据流"——先有 PM 再有 PRD,PRD 的格式被 PM 这个角色定义死,下游 Architect 必须按这个格式消费,整条链路的正确性强依赖角色间接口契约(这正是 MetaGPT 用 SOP + 结构化文档的初衷)。动态系统是"数据驱动角色流"——状态机/管理者看着当前状态决定下一步唤醒谁,角色成了可替换的处理器。涌现系统则是"反馈驱动角色流"——角色本身是优化的对象,系统在失败 trace 上反推"是不是缺一个 X 专家、是不是拓扑错了"。
三者的工程代价曲线完全不同。静态是"前期贵、后期便宜":写 SOP 和接口契约累,但跑起来稳定可回放。动态是"前期便宜、调度期贵":路由逻辑会随状态空间爆炸。涌现是"全程贵但有复利":演化与培养都需要离线算力,但一旦专家沉淀,新任务能零样本组合。一句话:别用涌现的预算去做静态能解决的事,也别用静态的预算去扛本该涌现的不确定性。
静态预设是工业落地最广的范式,因为它可预测、可回放、可问责——出问题能定位到具体角色。但同样是"写死角色",CrewAI 和 MetaGPT 走了两条路,固化税的大小天差地别。
CrewAI 把角色抽象成 role + goal + backstory 三元组,本质是用 persona 去约束 LLM 的行为分布。它的固化税体现在两处:一是 persona 一旦写死,遇到职责缝隙智能体不会主动越界补位("backstory 说我是后端,前端报错我不碰"),二是 hierarchical 流程里的 manager 本身也是一个带 persona 的 LLM,路由质量被这个 persona 的偏好污染。CrewAI 的代码极其直观,这也是它上手成本最低的原因:
from crewai import Agent, Task, Crew, Process
pm = Agent(role="产品经理", goal="把模糊需求拆成可执行用户故事",
backstory="十年 toB SaaS 经验,擅长需求收敛", allow_delegation=False)
dev = Agent(role="工程师", goal="按用户故事交付可运行代码",
backstory="全栈,重视可测试性")
plan = Task(description="产出 PRD 与用户故事", expected_output="prd.md", agent=pm)
build = Task(description="实现核心功能", expected_output="src/", agent=dev)
crew = Crew(agents=[pm, dev], tasks=[plan, build], process=Process.sequential)
crew.kickoff()
MetaGPT 的聪明之处在于它不靠 persona 防越界,靠 SOP + 结构化文档接口防越界。角色之间不聊天,而是发布带类型(cause_by)的结构化 Message,下游角色订阅自己关心的类型。这意味着职责边界是"数据契约"级别的,而不是"提示词礼貌"级别的,固化税因此被压到很低——论文里反复强调的"SOP 抑制幻觉级联",本质就是用强类型接口切断了自由对话里的语义漂移。
from metagpt.roles import ProductManager, Architect, Engineer
from metagpt.team import Team
team = Team()
team.hire([ProductManager(), Architect(), Engineer()]) # 角色即订阅者
team.invest(5.0)
team.run_project("做一个带租户隔离的待办 API")
# 角色靠 publish(Message(...)) 广播结构化文档,
# 下游用 cause_by 匹配并触发对应 Action
结论:如果你要预设角色,学 MetaGPT 用数据契约固化、而不是学 CrewAI 用 persona 固化。persona 是软约束、会被强模型绕过;类型化文档是硬约束、能扛住下游消费。
CAMEL 是多智能体角色扮演的鼻祖范式,它的核心机制叫 inception prompting——用一段精心设计的提示把两个智能体的角色"焊死",再让 AI-User 下指令、AI-Assistant 执行。它还配了一个 task-specifier 智能体,负责把粗任务说细。这套设计优雅,但有一个被低估的致命点:两个固定角色在自由对话里极易坍缩。随着轮次增加,AI-Assistant 会越来越顺着 AI-User 说,或者反过来 AI-User 自己开始干活,角色边界在 5-10 轮后基本糊掉。
from camel.societies import RolePlaying
session = RolePlaying(
assistant_role_name="计算机程序员",
user_role_name="游戏玩家",
task_prompt="用 Python 实现一个贪吃蛇",
)
# inception prompt 焊死角色;task-specifier 先把任务说细
session.init_chat()
ChatDev 用"阶段研讨会"部分缓解了这个问题:它把流程切成 design/coding/testing/document 等阶段,每个阶段只唤醒特定角色组合(需求阶段 CEO+CTO 主导,代码审查阶段 Programmer+Reviewer 主导)。这等于给角色加了"上下文门控"——同一个智能体在不同阶段被不同 persona 重新激活,降低了长对话里的角色漂移。但代价是阶段衔接处成了新的脆弱点:上一阶段输出的契约如果没被下阶段强校验,就会在交接时静默损坏(这其实是"接力交接税"的另一个面)。
实用判断:两角色配对(CAMEL 式)只适合短任务,超过 8 轮一定要加角色重锚;多角色研讨会(ChatDev 式)适合分阶段流水线,但必须在每个阶段出口加结构化校验。不要指望 inception prompt 一劳永逸地焊住角色——自由对话是角色边界的天然稀释剂。
静态系统的天花板是"角色集合写死",一旦任务真实需要的角色不在候选集里,系统就卡死。动态路由范式试图解决这个:AutoGen 的 GroupChat 用一个 GroupChatManager 在每轮决定下一个发言者,LangGraph 的 supervisor 用一个 LLM 路由器看着状态图决定唤醒哪个节点。它们把"角色编排"从设计期挪到了运行时。
import autogen
analyst = autogen.AssistantAgent("分析师", system_message="只做数据建模,不写前端")
coder = autogen.AssistantAgent("编码员", system_message="只写实现,不碰架构决策")
critic = autogen.AssistantAgent("评审", system_message="只挑刺与边界用例")
user = autogen.UserProxyAgent("user", human_input_mode="NEVER")
mgr = autogen.GroupChatManager(
autogen.GroupChat(agents=[analyst, coder, critic, user],
messages=[], max_round=12,
speaker_selection_method="auto"), # 动态路由核心
)
user.initiate_chat(mgr, message="给订单系统加幂等键")
动态路由的核心难题是 speaker selection 的质量。auto 模式下管理者是 LLM,它会偏向选"看起来最相关"的角色,于是出现两类典型故障:趋同(管理者反复点同一个最强角色,其余智能体空转成摆设,多付的 token 全打了水漂)和误判(管理者看不懂当前需要什么角色,选错人把对话带偏)。LangGraph 的解法是把路由显式化——边是声明出来的、可带条件函数,路由质量可被测试、可被回放,代价是失去了自由对话的灵活性。
这里有一条被反复验证的经验:动态路由的可观测性,比路由算法本身更重要。AutoGen 的 auto 选人是个黑盒,出问题只能靠读 transcript 猜;LangGraph 的条件边是白盒,能单测。生产环境宁可要"笨但可解释"的显式路由,也不要"聪明但黑盒"的 auto 选人——前者出 bug 能定位,后者出 bug 只能调提示词碰运气。
真正跳出"设计师定角色"窠臼的,是 2026 年的 MetaGen(arXiv 2601.19290)。它的立论很直接:固定的角色集 + 固定的协作拓扑,注定在任务分布漂移时失效。于是它做成一个无训练、运行时自演化的框架——同时把"角色空间"和"协作拓扑"都当作可优化对象,用轻量级反馈在每次执行后迭代更新角色提示、并调整结构性决策。
# 伪代码:MetaGen 角色-拓扑协同演化
roles = seed_roles() # 初始角色集(可极简)
topo = seed_topology() # 初始协作拓扑
for task in stream:
trace = execute(roles, topo, task)
# 用执行反馈反推:缺哪个角色?拓扑哪里错了?
roles, topo = refine(roles, topo, feedback(trace))
MetaGen 的工程价值在于它把"角色"从常量变成了一阶可优化变量。传统系统里,角色错了只能靠人去改 prompt;MetaGen 让系统自己在失败 trace 上推断"是不是该分化出一个专门处理边界条件的角色"。这直接对应了前面说的"角色固化税"的对立面——涌现红利:任务分布一变,角色集自动跟着变,不再有"设计师没预设到的角色就永远缺位"的问题。
但 MetaGen 也暴露了涌现范式的通用代价:校准与漂移。没有约束的演化会把角色集推向退化解(比如全员坍缩成"通用助手"或"挑刺评审",因为这两个 persona 在多数 trace 上反馈分都高)。它的可工程化要点是给演化加结构先验——限制角色分化的方向、保留拓扑的稀疏性、对"新增角色"设准入门槛,否则演化出的角色集会膨胀成不可维护的怪胎。一句话:涌现不是免维护,而是把维护从"改 prompt"换成了"调演化目标"。
ICLR 2026 的 ASPEC(Automated Stateful Specialization)把涌现专业化推到了一个更彻底的位置:它要的是全自动的、有状态的专家智能体团队。它的核心观察是——现有自动化智能体设计要么产出"静态工作流"(缺乏适应性)、要么产出"全自适应系统"(缺乏专业化)。ASPEC 用一个三阶段生命周期缝合这两端。
# ASPEC 三阶段生命周期
# 1) 离线:进化搜索发现领域专家算子原型
archetypes = evolutionary_search(domain, population=128, generations=50)
# 2) 培养:在经验中反思,沉淀为持久记忆
specialists = [cultivate(a) for a in archetypes]
# 3) 在线:按任务状态动态调度专家组合
for task in stream:
team = assemble(specialists, task_state)
result, mem = team.run(task)
specialists.update(mem) # 记忆回流,专家持续变强
ASPEC 的两个设计点值得记住。第一,它离线发现、在线复用:进化搜索在离线阶段烧算力把专家算子原型挖出来,在线阶段只做轻量调度。这把涌现的"全程贵"摊薄成了"一次性贵 + 在线便宜",是商业化能成立的关键。第二,专家是有状态的——通过反思培养出持久记忆,越用越强。这解决了传统动态路由里"专家每次都从零开始"的浪费,也意味着 ASPEC 的专家团队有真正的复利:用得越多,角色库越厚。
ASPEC 的红线同样清晰:它的角色固化反而是设计目标(专家就该固化、就该专精),所以它最怕的不是固化而是遗忘与污染——持久记忆如果被低质量经验污染,专家会越用越差。这要求它必须有记忆质量门控,只把高置信经验写回。ASPEC 适合的是"领域稳定、任务多变"的场景(如运维排障、客服工单),不适合"领域本身在剧变"的场景(那会让离线进化出的专家快速过时)。
把六栈横评里反复出现的故障归一化,角色编排失效几乎总是三个症状之一,值得做成 checklist:
趋同——多个智能体行为收敛到同一种风格。根因是 persona 差异度不够(CrewAI 的 backstory 太像)、或 speaker selection 偏好强者(AutoGen 的 auto 反复点同一人)、或涌现无约束(MetaGen 演化出退化解)。症状是 token 在涨、产出却单调。解法:persona 之间要设计正交职责而非互补职责;speaker selection 要强制轮转或设发言配额。
空转——智能体在场但不干活。根因是职责缝隙(没人为某个边界情况负责)、或路由把它排除在外(它永远不被选中)、或它被 persona 禁止越界。症状是"看似很多人,实际两三个在扛"。解法:用 SOP 把职责覆盖到全覆盖(MetaGPT 思路),或允许有限 delegation 让智能体在缝隙处主动补位。
越权——智能体干了不属于自己的活。根因是 persona 写得过宽、或自由对话里角色边界被稀释(CAMEL 长对话坍缩)、或管理者路由失误。症状是重复劳动(两个智能体产出同类结果)和冲突决策。解法:用数据契约而非 persona 约束输出(MetaGPT 的强类型文档),用显式条件边限制路由目标(LangGraph)。
诊断口诀:产出趋同查 persona 正交性,产出空缺查职责全覆盖,产出冲突查输出契约。这三条比任何框架选型表都更能定位真实故障。
落到决策,角色编排范式的选择应该被"任务职责边界是否稳定"这一个问题驱动,而不是被"哪个框架火"驱动:
变现层面,三种范式对应三类训练营/产品形态,价值密度差异明显。静态预设最容易做成"开箱即用模板"训练营(CrewAI 教程满地都是,红海、低价);动态路由适合做行业垂直编排器(某行业的 supervisor 图 + 角色库,有壁垒、可定价);涌现专业化最值得做有状态专家 SaaS——ASPEC 路线的"越用越强"是真正的数据飞轮护城河,但门槛也最高(要离线进化算力 + 记忆工程)。一句话给做产品的人:不要在静态预设红海里卷价格,要么往下沉到行业编排器,要么往上够到涌现专家团队。
flowchart TB
REQ[老板需求/任务输入]:::input
subgraph S1[范式一:静态预设]
direction TB
S1A[设计期写死角色集合] --> S1B[persona 或 SOP 约束]
S1B --> S1C{固化税}
S1C -->|契约弱| S1X[persona 软约束<br/>被强模型绕过]
S1C -->|契约强| S1Y[结构化文档接口<br/>MetaGPT SOP]
end
subgraph S2[范式二:动态路由]
direction TB
S2A[角色候选集固定] --> S2B[运行时 select_speaker / supervisor 路由]
S2B --> S2C{路由税}
S2C -->|黑盒 auto| S2X[趋同/误判<br/>AutoGen]
S2C -->|显式条件边| S2Y[可测可回放<br/>LangGraph]
end
subgraph S3[范式三:涌现专业化]
direction TB
S3A[角色集合本身可变] --> S3B[反馈驱动迭代<br/>离线进化 + 在线培养]
S3B --> S3C{校准税}
S3C -->|无约束| S3X[角色集坍缩/膨胀<br/>MetaGen 漂移]
S3C -->|有状态门控| S3Y[专家越用越强<br/>ASPEC 复利]
end
REQ --> S1
REQ --> S2
REQ --> S3
classDef input fill:#fff3cd,stroke:#856404,stroke-width:2px;
classDef bad fill:#f8d7da,stroke:#721c24;
classDef good fill:#d4edda,stroke:#155724;
class S1X,S2X,S3X bad;
class S1Y,S2Y,S3Y good;
图里红色节点是三条范式各自的失败吸引子,绿色节点是工程化解。注意三范式并非互斥——成熟系统往往是静态打底 + 动态分流 + 涌现补位的混合体:主干流程用 SOP 固化保稳定,分叉状态用 supervisor 路由保灵活,缺口角色用涌现机制动态长出来。判断混合比例的唯一标准,是去数你的任务里"职责边界稳定的比例"有多高——这个比例,就是你应该分配给静态预设的预算份额。
auto 选人只留给原型期。最后一条元判断:多智能体不是"智能体越多越好",而是"角色分工越正交越好"。 检验一个多智能体系统设计是否合格的最低标准,是能不能用一句话说清每个角色的不可替代性——说不清的,就是固化税的负担,而不是专业化的红利。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
