多角色协作智能体最容易翻车的地方,往往不是模型能力不够,而是角色边界和交接约定没设计好。很多人第一次用 CrewAI 搭多智能体系统时,习惯把 Agent 当成"能干的工具"来用——给一个叫"分析师"的 Agent 塞进爬数据、写报告、做图表、发邮件四件事,结果它每件事都做得半吊子。这不是模型的问题,而是组织设计的问题。把 Agent 当同事用,而不是当工具使,是搭建多角色协作的第一条心法。
CrewAI 的核心抽象其实很干净:Agent 对应角色,Task 对应任务,Crew 把角色和任务组织成一个团队,再配合记忆机制沉淀经验。它的设计理念是模拟真实团队的工作模式,通过角色、任务、工具三大要素,让多个具备专业能力的 Agent 像团队成员一样协同。所以真正要花心思的,不是写多复杂的提示词,而是想清楚"这个任务需要几个角色、他们各自负责什么、中间结果怎么交出去"。
拆分角色的常见误区是按"功能"切分——比如"搜索 Agent""写作 Agent""翻译 Agent",看似清晰,实际执行时会出现大量重叠和推诿。更合理的做法是按"职责"切分,也就是每个角色对某类判断结果负责,而不是对某个动作负责。
以一个可落地的场景为例:假设你要搭建一个"竞品动态周报生成"的多角色协作系统。按职责拆分,可以得到三个核心角色。第一个是规划者,负责拆解本周需要关注哪些竞品、哪些维度(价格变动、功能更新、营销动作),产出一份调研提纲。第二个是执行者,根据提纲去检索和整理原始信息,输出结构化的素材。第三个是复核者,检查素材是否覆盖了提纲要求、有没有明显遗漏或前后矛盾,并给出通过或打回的结论。
这三个角色对应的是"规划—执行—复核"的经典结构,每个角色对一类判断负责:规划者对"该做什么"负责,执行者对"做了什么"负责,复核者对"做得对不对"负责。这样拆分的好处是,当结果出问题时,你能快速定位是哪个环节的判断出了偏差,而不是面对一团模糊的失败无从下手。
需要特别注意的是,复核角色必须独立于执行角色,哪怕它们用的是同一个底层模型。原因很简单:如果让执行者自己检查自己,它倾向于认为自己的输出是对的,复核就失去了意义。这就像让同一个人既当运动员又当裁判,制度上就不可靠。
角色拆好之后,真正决定系统稳定性的,是角色之间传递中间结果时的约定。很多多智能体系统跑着跑着就信息丢失、结果跑偏,根源都在这里——上一个角色交给下一个角色的东西,格式和内容没有约定清楚。
一个实用的做法是,为每次移交定义一组最小必要字段。以规划者移交给执行者为例,至少应该包含:任务目标(这次要达成什么)、输入素材(基于什么信息来做)、输出格式要求(结果长什么样)、验收标准(怎么算完成)。这四个字段里,输出格式要求和验收标准最容易被忽略,却恰恰是避免下游跑偏的关键。
这里有个容易踩的坑:把"输出格式要求"简单理解成"要 JSON 还是要 Markdown"。其实它应该更接近一份岗位职责说明书——不仅规定结构,还要说明每个字段的含义、取值范围、什么情况下可以留空。如果执行者拿到的格式要求含糊,它就会自由发挥,而自由发挥的结果往往和复核者的预期对不上,导致反复打回。
同样,验收标准也不能写成"质量要高"这种空话。它应该是可判断的条件,比如"必须覆盖提纲中的每一个维度""每个结论都要有对应的原始素材支撑""不允许出现提纲之外的竞品"。条件越具体,复核者的判断就越稳定,整个系统的一致性就越高。
字段约定解决了"交什么",触发条件解决的是"什么时候交"。这两件事经常被混在一起,但它们其实是两个独立的设计维度。
触发条件大致可以分成两类。一类是顺序触发,也就是上一个任务完成后自动流转到下一个角色。CrewAI 的顺序模式就适合这种场景——任务分工在设计阶段就已经明确,谁做完了谁交给谁都是定好的。这类触发适合流程稳定、角色边界清晰的场景,比如前面说的规划—执行—复核结构,天然就是顺序流转。
另一类是条件触发,也就是根据中间结果的质量决定下一步走向。比如复核者发现素材覆盖不全,就不应该直接进入最终汇总,而是打回给执行者补充;只有复核通过,才触发下游的汇总或发布环节。这类触发适合任务边界模糊、需要动态判断的场景。CrewAI 的层级模式由管理角色在运行时动态决定任务分配给谁,代价是需要额外的模型调用来做调度判断。
两种模式没有绝对优劣,选择的关键在于你的任务在设计阶段能否把分工定死。定得死就用顺序触发,省心且可预测;定不死就用条件触发,灵活但需要接受更高的调度开销。很多人的误区是一上来就用动态调度,觉得灵活,结果系统行为变得难以复现,调试成本陡增。
最后一个容易被忽视的设计点是记忆。CrewAI 内置了记忆机制,但"有记忆"不等于"记忆用对了"。一个常见的错误是让所有角色共享同一块记忆,结果出现信息串味——比如执行角色记住的中间草稿,被复核角色当成正式结论来参考,判断直接失真。
更稳妥的做法是按角色或按阶段做记忆分层。规划阶段产生的提纲、执行阶段产生的原始素材、复核阶段产生的判断结论,各自归档,只在需要的时候按权限取用。这样既能保留上下文,又不会让不该流通的信息污染下游判断。把记忆理解成"带权限的会议纪要归档",比理解成"一个共享数据库"更接近它的实际作用。
回到最初的问题:怎么画出自己任务的角色协作结构?可以按这个顺序走一遍。先列出任务涉及的所有判断类型,把同类判断归到一个角色;再为每次角色间的移交写出四个字段——目标、输入、输出格式、验收标准;然后确定每次移交是顺序触发还是条件触发;最后检查记忆是否需要分层。走完这四步,一张属于你自己的角色协作图基本就成型了。
真正决定多智能体系统成败的,从来不是模型多强、提示词多花哨,而是角色分得清不清、交接约定得细不细。把这两件事想明白,再动手写代码,会少走很多弯路。
Δ
Ctrl+D