本文为《AI Agent 企业级实战:从原理到落地,构建自主智能体》专栏第 8 篇,承接前7篇单Agent核心能力与RAG融合架构,彻底拆解企业级场景中解决复杂任务的终极方案——多智能体(Multi-Agent)架构
本文全程站在工程师视角,不讲学术玄学、不堆框架API,只讲可落地的工程化逻辑:从多智能体的核心分类、架构选型,到业界主流框架的底层设计思想,最终不依赖任何第三方框架,手写一套与前7篇完全兼容的多智能体协作系统,看完就能理解多智能体的本质,同时能直接落地到企业真实业务中。

一、先搞懂:为什么单Agent有天花板,必须用多智能体?

前7篇我们完整实现了单Agent的四大核心能力(工具调用、记忆系统、任务规划、反思机制),以及RAG+Agent融合架构,能稳定完成绝大多数标准化的复杂任务。但在真实的企业级场景中,我们很快会遇到单Agent的天然天花板。

举个我们踩过的真实案例:
我们让单Agent完成「从0到1开发一套商品评论情感分析系统」,结果出现了这些致命问题:

  1. 专业度不足:单Agent既要做产品需求分析、又要做架构设计、代码开发、测试验收、文档编写,既要懂产品、又要懂开发、还要懂测试,结果就是需求分析缺漏、代码bug频发、测试用例覆盖不全,全程需要人工介入修正;
  2. 注意力分散:单Agent在多步骤执行中,很容易忘记初始目标,写着写着代码就跑偏了需求,甚至把“情感分析”做成了“评论爬虫”,需要反复用反思机制拉回正轨;
  3. 容错率极低:单Agent某一步执行错误,很容易导致整个任务链条崩盘,无法做到“分模块纠错、分角色验收”;
  4. 无法并行执行:单Agent只能串行执行任务,需求分析、开发、测试必须一步步来,无法做到“开发写代码的同时,测试写用例”,执行效率极低。

多智能体(Multi-Agent),就是解决这些问题的核心方案。它的核心逻辑非常朴素:模拟人类团队的工作模式,让不同的Agent扮演不同的专业角色,各司其职、分工协作、并行执行,共同完成单Agent无法搞定的跨领域、高复杂度企业级任务

一句话讲透本质:单Agent是一个全能但不专精的“独行侠”,多智能体是一个分工明确、各司其职的“专业团队”。企业里90%的复杂业务流程,本质都是团队协作,这就是多智能体在企业级场景中不可替代的核心价值。

二、核心拆解:多智能体的三大类型(企业级场景全覆盖)

很多人对多智能体的理解停留在“多个Agent一起干活”,但在工程化落地中,不同类型的多智能体,架构、逻辑、适用场景完全不同。目前工业界落地最成熟的,分为三大类型,覆盖了99%的企业级场景。

1. 分工型多智能体:流水线式作业,标准化场景首选

分工型多智能体是企业级落地最成熟、最稳定、最容易实现的类型,核心逻辑是流水线式的串行分工:把一个完整的复杂任务,拆解成多个标准化的环节,每个环节由一个专属的Agent负责,前一个环节的输出,是后一个环节的输入,一环扣一环,直到完成整个任务。

核心特点
  • 角色分工固定,每个Agent只负责自己的环节,专业度极高;
  • 执行流程固定,严格按照流水线顺序执行,可控性极强;
  • 易调试、易维护,某个环节出问题,只需要优化对应环节的Agent,不会影响整个流程;
  • 容错率高,每个环节都有独立的验收和纠错机制,不会出现一步错步步错的问题。
企业级适用场景

所有标准化、流程固定的业务场景,都是分工型多智能体的主场:

  • 内容生产流水线:选题Agent→文案Agent→排版Agent→审核Agent→发布Agent;
  • 客服工单处理:接待Agent→分类Agent→处理Agent→回访Agent→归档Agent;
  • 数据处理流水线:采集Agent→清洗Agent→分析Agent→可视化Agent→报告Agent;
  • 合规审计流水线:文档解析Agent→风险识别Agent→整改建议Agent→报告生成Agent。
优缺点
优势 劣势
架构简单,极易实现和落地,新手友好 灵活性差,只能处理固定流程的任务,无法应对突发变化
可控性极强,执行流程可追溯、可审计,符合企业合规要求 串行执行,无法并行处理,流程长的任务执行效率偏低
专业度高,每个Agent只需要聚焦自己的环节,优化成本低 环节之间的衔接需要严格的格式规范,否则会出现信息传递失真
踩坑提醒

分工型多智能体是新手入门的首选,绝对不要一上来就搞复杂的自由协作,先把固定流水线跑通、跑稳,再考虑灵活性。我们落地的第一个多智能体项目,就是内容生产流水线,上线3年,至今稳定运行,零重大故障。

2. 协作型多智能体:团队式配合,复杂项目型场景首选

协作型多智能体是目前企业级复杂项目的主流方案,核心逻辑是模拟人类项目团队的协作模式:多个不同专业角色的Agent,围绕同一个核心目标,并行工作、信息共享、互相配合,共同完成复杂的、非标准化的项目型任务。

和分工型的串行流水线不同,协作型多智能体是并行+协同的模式,比如产品Agent写完需求后,开发Agent写代码的同时,测试Agent可以同步写测试用例,运维Agent可以同步准备部署环境,多个Agent并行工作,效率极高。

核心特点
  • 角色分工明确,每个Agent有自己的专业领域和专属职责,比如产品Agent、开发Agent、测试Agent、运维Agent;
  • 支持并行执行,多个Agent可以同时工作,大幅提升任务执行效率;
  • 信息共享,所有Agent共享同一个项目空间和记忆池,信息实时同步;
  • 灵活性强,能应对项目过程中的需求变化、突发问题,动态调整执行方案。
企业级适用场景

所有复杂的、非标准化的项目型任务,都是协作型多智能体的主场:

  • 软件研发全流程:产品Agent→架构Agent→开发Agent→测试Agent→运维Agent;
  • 企业营销全案:市场调研Agent→策略Agent→文案Agent→投放Agent→数据分析Agent;
  • 咨询项目交付:需求调研Agent→方案设计Agent→落地实施Agent→验收Agent;
  • 电商运营全链路:选品Agent→供应链Agent→内容Agent→投放Agent→客服Agent。
优缺点
优势 劣势
灵活性强,能应对复杂的、非标准化的项目型任务 架构复杂,需要实现任务调度、消息通信、信息共享等核心模块
支持并行执行,任务执行效率远高于分工型和单Agent 可控性偏低,容易出现Agent之间信息不同步、任务跑偏的问题
完全模拟人类团队协作,能覆盖绝大多数企业级复杂业务场景 调试难度大,多个Agent协同出错时,排查问题的成本较高
踩坑提醒

协作型多智能体必须有明确的角色边界和协作规则,绝对不能让Agent自由沟通、自由决策,否则会出现“消息泛滥、任务跑偏、互相甩锅”的问题,这是90%的人做协作型多智能体都会踩的坑。必须给每个Agent定死职责、沟通规则、输出规范,越明确,效果越稳定。

3. 博弈型多智能体:对抗式优化,攻防/决策类场景首选

博弈型多智能体是三类中最特殊的一种,核心逻辑是让两个或多个Agent处于对立的角色,通过对抗、博弈、辩论的方式,互相优化、互相校验,最终得到更优的结果

它的核心不是“协作完成任务”,而是“通过对抗发现问题、优化结果”,比如一个Agent负责写方案,另一个Agent负责挑错、攻击,两个Agent反复博弈,最终的方案会比单Agent写的更严谨、更完善。

核心特点
  • 角色对立,Agent之间处于博弈/对抗/辩论的关系,而非协作关系;
  • 核心目标是通过对抗发现漏洞、优化结果,提升最终输出的严谨性和准确性;
  • 多轮迭代,通过反复的博弈、辩论、修正,不断优化结果,直到达到预期标准。
企业级适用场景
  • 红蓝攻防对抗:攻击Agent负责找系统漏洞,防守Agent负责修复漏洞,提升系统安全性;
  • 方案/合同评审:起草Agent负责写方案/合同,评审Agent负责挑错、找风险,最终输出零漏洞的方案;
  • 投资决策优化:多头Agent负责找买入逻辑,空头Agent负责找卖出逻辑,通过博弈输出更理性的投资决策;
  • 内容反幻觉校验:生成Agent负责写内容,校验Agent负责核对事实、找幻觉,通过对抗抑制幻觉。
优缺点
优势 劣势
能极大提升结果的严谨性、准确性,有效抑制幻觉和漏洞 适用场景有限,仅适合对抗/校验/决策类场景,无法完成执行类任务
无需人工介入,就能实现自我校验、自我优化 执行成本高,需要多轮大模型调用,token消耗大
能发现单Agent、协作型Agent无法发现的隐藏漏洞和风险 容易陷入无限博弈,需要明确的终止条件和验收标准
踩坑提醒

博弈型多智能体必须设置明确的终止条件和博弈轮次上限,否则会陷入无限辩论、无限对抗的死循环,浪费大量token。同时,必须给两个Agent设置明确的角色边界和博弈规则,不能让对抗变成无意义的抬杠。

三、核心架构选型:中心化调度 vs 去中心化通信

多智能体架构的核心,就是多个Agent之间的任务调度和消息通信机制,目前工业界主流的架构分为两种:中心化调度架构去中心化通信架构,二者的设计逻辑、适用场景、落地难度天差地别,也是企业级落地必须做的第一个选型。

1. 中心化调度架构:一个“项目经理”管所有Agent

中心化调度架构,也叫“主从架构”,是目前企业级落地的首选架构,也是我们最推荐新手使用的架构。

它的核心逻辑非常简单:设置一个中心化的调度Agent(也叫协调者/项目经理),作为整个多智能体系统的“大脑”,负责所有的任务拆解、角色分配、任务分发、进度跟踪、结果验收、异常处理;其他的业务Agent(产品、开发、测试等)只需要专注于自己的本职工作,不需要关心其他Agent在做什么,只需要接收调度Agent的指令,完成任务后把结果反馈给调度Agent即可。

架构流程
用户任务 → 调度Agent(任务拆解→角色分配→任务分发)→ 业务Agent执行任务 → 结果反馈给调度Agent → 调度Agent验收→ 循环执行 → 最终结果输出
核心优缺点与适用场景
优势 劣势
架构简单,极易实现和落地,新手友好 调度Agent是整个系统的单点瓶颈,调度能力决定了系统的上限
可控性极强,所有任务都由调度Agent统一管理,执行流程可追溯、可审计 灵活性偏低,所有Agent的沟通都需要经过调度Agent,无法实现自由的点对点沟通
调试成本极低,出问题只需要排查调度Agent和对应业务Agent,定位问题极快 对调度Agent的能力要求极高,一旦调度Agent拆解任务错误,整个系统都会跑偏
完全符合企业的项目管理逻辑,极易被业务方理解和接受 不适合需要高频点对点沟通的复杂协作场景

企业级适用场景:90%的标准化业务流程、固定流水线、中小型项目协作,都优先选中心化调度架构,稳定、可控、易落地。

2. 去中心化通信架构:Agent之间自由沟通、自主协作

去中心化通信架构,也叫“点对点架构”,核心逻辑是没有统一的调度者,所有Agent都是平等的,它们之间可以自由通信、点对点沟通、自主协商任务分配、自主决定下一步动作,完全模拟人类团队的自由协作模式。

它的核心是消息总线/共享内存:所有Agent都可以向消息总线发布消息,也可以订阅自己关心的消息,通过消息传递实现自主协作。比如产品Agent把需求文档发布到消息总线,开发Agent订阅到后,自动开始写代码,写完后发布到消息总线,测试Agent订阅到后,自动开始测试。

架构流程
用户任务 → 所有Agent接收任务 → Agent之间自主协商分工 → 点对点通信协作 → 自主完成任务 → 汇总输出最终结果
核心优缺点与适用场景
优势 劣势
灵活性极强,Agent之间可以自由沟通、自主协作,能应对复杂多变的场景 架构复杂,需要实现消息总线、订阅发布机制、消息路由等核心模块,落地难度极高
支持完全的并行执行,没有调度Agent的单点瓶颈,执行效率极高 可控性极差,Agent之间容易出现消息泛滥、任务重复、互相甩锅、目标跑偏的问题
能模拟更真实的人类团队协作,适合复杂的、创新型的项目 调试成本极高,多个Agent自由沟通出错时,排查问题的成本极高
没有单点故障,单个Agent出问题,不会影响整个系统的运行 对每个Agent的能力要求都极高,需要具备自主决策、沟通协作的能力

企业级适用场景:仅适合大型创新型项目、需要高频点对点协作的复杂场景、多角色自由创作类任务,绝大多数标准化企业场景,不推荐优先使用。

3. 企业级选型建议与混合架构

我们给十几家企业做过多智能体落地,总结出3条选型铁律,新手直接照做,绝对不会踩坑:

  1. 新手入门、标准化场景,优先选中心化调度架构:稳定、可控、易落地、易调试,90%的企业场景都能覆盖;
  2. 只有当中心化架构无法满足灵活性需求时,再考虑去中心化:不要为了炫酷而搞去中心化,绝大多数场景,中心化架构完全够用;
  3. 大型项目优先用混合架构:核心调度用中心化,保证整体可控;细分模块内用去中心化,保证灵活性,比如整个项目由调度Agent统一管理,开发模块内,前端Agent、后端Agent、数据库Agent可以点对点自由沟通协作。

四、主流多智能体框架思想解析(不学API,学底层设计)

现在市面上有很多多智能体框架,比如AutoGen、ChatDev、MetaGPT,很多人上来就对着API文档一顿抄,结果根本搞不懂底层逻辑,稍微改一下需求就不会用了。

这里我们不讲框架的API怎么调用,只拆解这些业界标杆框架的底层设计思想、核心架构、适用场景、优缺点,这些才是能沉淀下来、能用到自己项目里的核心能力。

1. AutoGen:微软出品,最灵活的去中心化多智能体框架

AutoGen是微软推出的开源多智能体框架,也是目前生态最完善、用户最多的框架。

核心设计思想

AutoGen的核心是**“可对话的Agent”**,它把所有能力都封装成了可对话的Agent,Agent之间可以通过自由对话实现协作,没有固定的角色和流程,完全去中心化,灵活性拉满。
它的核心设计亮点:

  • 多角色自由对话:任意两个Agent都可以直接对话,无需中间调度者,支持一对一、多对多的对话模式;
  • 人机协作:支持把人也作为一个Agent加入到协作流程中,人工可以随时介入、修正、终止任务,非常适合需要人工审核的企业场景;
  • 工具调用原生支持:每个Agent都可以绑定自己的专属工具,支持代码执行、API调用、数据库操作等;
  • 流式对话与状态同步:支持流式消息传递,Agent之间可以实时同步状态,动态调整协作策略。
适用场景与优缺点
  • 适用场景:需要高灵活性的复杂协作场景、人机协同场景、科研探索场景;
  • 优势:灵活性极强,生态完善,文档齐全,支持几乎所有主流大模型;
  • 劣势:太灵活,没有固定的流程和规范,新手很容易用成“乱炖”,可控性极差,企业级落地需要自己加大量的规则和约束。
我们学到的落地经验

AutoGen的灵活性是双刃剑,企业级落地时,必须给Agent加上严格的角色边界、对话规则、输出规范,不能让Agent自由对话,否则一定会出现任务跑偏、消息泛滥的问题。我们在落地时,给AutoGen加上了中心化的调度Agent,用它的灵活通信能力,同时保证整体可控性,效果非常好。

2. ChatDev:北邮出品,软件研发场景的标杆框架

ChatDev是北邮团队推出的开源多智能体框架,核心聚焦软件研发全流程自动化,也是目前软件研发场景落地最成熟的框架。

核心设计思想

ChatDev的核心是**“模拟软件公司的完整研发流程”,它把软件研发的全流程拆解成了固定的阶段:需求分析→架构设计→代码开发→测试验收→环境部署,每个阶段对应固定的角色Agent,分工明确、流程固定,是典型的分工型+中心化调度**架构。
它的核心设计亮点:

  • 固定的角色与流程:预设了CEO、产品经理、架构师、程序员、测试工程师、运维工程师等完整的软件公司角色,每个角色有固定的职责和输出规范;
  • 阶段化流水线:把软件研发拆分成了7个固定阶段,每个阶段有明确的输入输出和验收标准,可控性极强;
  • 思维链与代码生成优化:针对代码生成做了大量优化,支持多轮代码审查、bug修复、版本管理;
  • 开箱即用:不需要复杂的配置,只需要输入一句需求,就能自动完成从需求到代码的全流程。
适用场景与优缺点
  • 适用场景:软件研发全流程自动化、小工具/小项目的自动开发、代码生成与审查;
  • 优势:开箱即用,软件研发场景效果极佳,流程固定、可控性强,极易落地;
  • 劣势:场景单一,只能用于软件研发,无法适配其他业务场景,灵活性极差。
我们学到的落地经验

ChatDev的核心精髓,是把企业的标准化业务流程,拆解成固定的阶段、固定的角色、固定的输入输出规范,这是所有企业级多智能体落地的核心。不管什么业务场景,只要能把流程标准化、固定化,就能用ChatDev的思路,做出稳定可用的多智能体系统。

3. MetaGPT:字节跳动出品,SOP驱动的企业级框架

MetaGPT是字节团队推出的开源多智能体框架,核心是SOP(标准作业流程)驱动,也是目前企业级业务适配性最强的框架。

核心设计思想

MetaGPT的核心是**“把人类的SOP固化到多智能体系统中”**,它认为:人类优秀的工作流程、标准作业规范,是多智能体系统稳定运行的核心。它把各行各业的SOP拆解成了Agent的执行规则,让Agent像人类资深员工一样,按照标准流程完成工作,而不是自由发挥。
它的核心设计亮点:

  • SOP驱动:所有Agent的行为都严格遵循人类的标准作业流程,输出质量和稳定性远高于其他框架;
  • 完善的角色体系:预设了产品、架构、开发、测试、项目管理等多个专业角色,每个角色都有对应的SOP和专业知识库;
  • 多模态与复杂任务支持:支持文档解析、图表生成、代码开发、项目管理等多种能力,能完成超复杂的企业级项目;
  • 可扩展的流程引擎:支持自定义SOP、自定义角色、自定义流程,能适配几乎所有企业级业务场景。
适用场景与优缺点
  • 适用场景:企业级全流程自动化、复杂项目管理、标准化业务流程落地、跨领域多角色协作;
  • 优势:SOP驱动,输出质量高、稳定性强,企业级适配性极强,可扩展性高;
  • 劣势:架构复杂,上手门槛高,需要一定的学习成本,自定义SOP需要对业务有极深的理解。
我们学到的落地经验

MetaGPT告诉我们:多智能体系统的上限,不是大模型的能力,而是SOP的完善程度。企业级落地多智能体,第一步不是写代码,而是把业务流程梳理成标准化的SOP,明确每个角色的职责、每个环节的输入输出、每个步骤的验收标准,SOP越完善,多智能体系统越稳定。

三大框架的核心共同点

不管是AutoGen、ChatDev还是MetaGPT,它们的底层逻辑都是完全一致的,这也是多智能体系统的核心三要素:

  1. 角色化的Agent:每个Agent有明确的角色设定、职责边界、专属能力和工具;
  2. 标准化的通信机制:Agent之间有明确的消息格式、通信规则、信息传递方式;
  3. 规范化的任务调度:有明确的任务拆解、分配、执行、验收、异常处理机制。

理解了这三点,你就理解了所有多智能体框架的本质,完全可以不依赖任何框架,手写一套符合自己业务需求的多智能体系统。

五、实战:不依赖框架,手写多智能体协作系统

接下来我们进入实战环节,不依赖任何第三方多智能体框架,基于前7篇我们已经实现的核心组件(ToolManager、MemoryManager、RAGManager、ReflectionManager),手写一套中心化调度的多智能体系统,完全模拟软件研发团队的协作流程,代码可直接复制运行,和之前的内容100%兼容。

1. 架构设计

我们采用中心化调度架构,设计4个核心角色,完全模拟小型软件研发团队:

  1. 调度Agent(项目经理):中心化的大脑,负责任务拆解、角色分配、任务分发、进度跟踪、结果验收、异常处理;
  2. 产品Agent:负责需求分析、产品设计、输出PRD产品需求文档;
  3. 开发Agent:负责架构设计、代码开发、输出可运行的Python代码;
  4. 测试Agent:负责编写测试用例、代码审查、bug测试、输出测试报告。

2. 前置准备

本文代码完全复用前7篇实现的核心组件,无需额外安装依赖,只需要确保之前的ToolManagerMemoryManagerRAGManagerReflectionManager都已实现,大模型配置正常。

3. 核心代码实现

(1)基础Agent基类:所有角色Agent的父类

我们先实现一个基础的Agent基类,封装所有Agent通用的能力:角色设定、记忆、工具调用、反思机制。

from typing import List, Dict, Any, Optional
from datetime import datetime
from doubao_api import Doubao
from dotenv import load_dotenv
import os
import json

# 加载环境变量
load_dotenv()

# 初始化大模型(沿用之前的配置)
llm = Doubao(
    api_key=os.getenv("DOUBAO_API_KEY"),
    secret_key=os.getenv("DOUBAO_SECRET_KEY")
)

# 导入前7篇实现的核心组件
from tool_manager import tool_manager
from memory_manager import memory_manager
from rag_manager import rag_manager
from reflection_manager import reflection_manager

# ---------------------- 基础Agent基类 ----------------------
class BaseAgent:
    def __init__(
        self,
        agent_name: str,
        role_desc: str,
        tools: Optional[List[str]] = None,
    ):
        # Agent基础信息
        self.agent_name = agent_name
        self.role_desc = role_desc
        # 专属工具列表:只能使用指定的工具,None表示可以使用所有工具
        self.available_tools = tools
        # 专属记忆:每个Agent有自己的独立记忆,同时共享全局记忆
        self.memory = []
        # 系统Prompt:角色设定
        self.system_prompt = self._build_system_prompt()

    def _build_system_prompt(self) -> str:
        """构建Agent的系统Prompt,明确角色职责和行为规范"""
        prompt = f"""
        你是{self.agent_name},你的角色职责是:{self.role_desc}
        你必须严格遵守自己的角色职责,只做自己职责范围内的事,不要越权处理其他角色的工作。
        行为规范:
        1.  严格按照调度Agent的指令完成任务,输出内容必须符合角色的专业规范;
        2.  只能使用提供的工具,禁止编造工具和能力,工具列表:{self.available_tools if self.available_tools else '所有已注册工具'};
        3.  输出内容必须结构清晰、逻辑严谨、符合专业标准,禁止编造虚假信息;
        4.  完成任务后,必须明确输出【任务完成】,并附上完整的交付物。
        """
        return prompt

    def add_memory(self, content: str):
        """添加专属记忆"""
        self.memory.append({
            "time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
            "content": content
        })

    def run(self, task: str, context: Optional[str] = "") -> str:
        """
        Agent执行任务的核心入口
        :param task: 调度Agent分配的具体任务
        :param context: 任务上下文,比如前序环节的输出结果
        :return: 任务执行结果
        """
        print(f"\n👤 {self.agent_name} 开始执行任务")
        # 构建对话消息
        messages = [
            {"role": "system", "content": self.system_prompt},
            {"role": "user", "content": f"任务上下文:{context}\n\n你的具体任务:{task}"}
        ]
        # 加入专属记忆
        if self.memory:
            memory_content = "\n".join([f"{item['time']}{item['content']}" for item in self.memory])
            messages.insert(1, {"role": "system", "content": f"你的历史记忆:\n{memory_content}"})

        # 调用大模型执行任务
        response = llm.chat.completions.create(
            model="doubao-pro",
            messages=messages,
            tools=tool_manager.get_tool_definitions() if not self.available_tools else [
                tool for tool in tool_manager.get_tool_definitions()
                if tool["function"]["name"] in self.available_tools
            ],
            tool_choice="auto",
            temperature=0.3,
            stream=False
        )
        result = response.choices[0].message.content.strip()
        # 把执行结果加入记忆
        self.add_memory(f"执行任务:{task},执行结果:{result[:500]}...")
        print(f"✅ {self.agent_name} 任务执行完成")
        return result
(2)实现各个角色的专属Agent

基于BaseAgent,实现产品、开发、测试三个业务Agent,每个Agent有明确的角色职责和专属工具。

# ---------------------- 业务Agent实现 ----------------------
# 1. 产品Agent
class ProductAgent(BaseAgent):
    def __init__(self):
        super().__init__(
            agent_name="产品经理",
            role_desc="专业的互联网产品经理,负责需求分析、用户场景梳理、产品功能设计、输出标准化的PRD产品需求文档,确保需求清晰、完整、可落地",
            tools=["rag_search_tool"]  # 产品Agent只能用知识库检索工具,查产品规范和案例
        )

# 2. 开发Agent
class DevelopAgent(BaseAgent):
    def __init__(self):
        super().__init__(
            agent_name="开发工程师",
            role_desc="专业的Python后端开发工程师,负责架构设计、代码开发、注释编写,输出可直接运行的、规范的、无bug的Python代码,确保代码符合开发规范,可直接落地运行",
            tools=["python_exec_tool", "file_write_tool"]  # 开发Agent只能用代码执行和文件写入工具
        )

# 3. 测试Agent
class TestAgent(BaseAgent):
    def __init__(self):
        super().__init__(
            agent_name="测试工程师",
            role_desc="专业的测试工程师,负责代码审查、测试用例编写、功能测试、bug排查,输出完整的测试报告,确保代码功能正常、无bug、符合需求要求",
            tools=["python_exec_tool", "file_read_tool"]  # 测试Agent只能用代码执行和文件读取工具
        )
(3)实现核心的调度Agent(项目经理)

调度Agent是整个系统的大脑,负责任务拆解、角色分配、任务分发、结果验收、全流程管控。

# ---------------------- 调度Agent(项目经理) ----------------------
class DispatchAgent:
    def __init__(self):
        self.agent_name = "项目经理"
        # 注册所有业务Agent
        self.agent_map = {
            "产品经理": ProductAgent(),
            "开发工程师": DevelopAgent(),
            "测试工程师": TestAgent()
        }
        # 项目全局上下文:存储每个环节的输出结果,所有Agent共享
        self.project_context = {}
        # 项目状态
        self.project_status = "pending"

    def _split_task(self, user_task: str) -> List[Dict[str, Any]]:
        """任务拆解:把用户的原始任务,拆解成按顺序执行的子任务,分配给对应的Agent"""
        print(f"\n📋 {self.agent_name} 开始拆解任务")
        split_prompt = f"""
        你是一个专业的项目经理,需要把用户的软件研发任务,拆解成按顺序执行的子任务,分配给对应的角色。
        可用角色:产品经理、开发工程师、测试工程师
        角色职责:
        1.  产品经理:需求分析、输出PRD产品需求文档
        2.  开发工程师:基于PRD,完成架构设计、代码开发、输出可运行的Python代码
        3.  测试工程师:基于PRD和代码,完成代码审查、测试用例编写、功能测试、输出测试报告

        拆解规则:
        1.  子任务必须严格按照「产品→开发→测试」的顺序执行,前一个任务的输出是后一个任务的输入;
        2.  每个子任务必须分配给对应的角色,一个子任务只能分配给一个角色;
        3.  每个子任务必须有明确的任务描述、交付物、验收标准;
        4.  子任务必须完整覆盖用户的原始需求,不遗漏、不偏离。

        用户原始任务:{user_task}

        输出格式要求:
        必须输出严格的JSON格式数组,每个元素对应一个子任务,字段如下:
        [
            {{
                "task_id": "task_001",
                "task_name": "子任务名称",
                "assign_to": "分配的角色名称",
                "task_desc": "具体的任务描述",
                "deliverable": "交付物要求",
                "acceptance_criteria": "验收标准",
                "pre_dependency": "前置依赖的task_id,无则为null"
            }}
        ]
        只输出JSON数组,不要输出任何其他内容,保证JSON格式完全合法。
        """
        # 调用大模型拆解任务
        response = llm.chat.completions.create(
            model="doubao-pro",
            messages=[{"role": "user", "content": split_prompt}],
            temperature=0.1,
            stream=False
        )
        split_content = response.choices[0].message.content.strip()
        # 解析JSON
        if split_content.startswith("```json"):
            split_content = split_content[7:-3].strip()
        task_list = json.loads(split_content)
        print(f"✅ 任务拆解完成,共生成{len(task_list)}个子任务")
        for task in task_list:
            print(f"  {task['task_id']}{task['task_name']} | 负责人:{task['assign_to']}")
        return task_list

    def _acceptance_check(self, task: Dict[str, Any], result: str) -> Tuple[bool, str]:
        """验收子任务结果,判断是否符合验收标准"""
        acceptance_prompt = f"""
        你是项目经理,需要验收子任务的交付结果是否符合验收标准。
        子任务信息:{task}
        交付结果:{result}

        请判断交付结果是否符合验收标准,输出严格的JSON格式:
        {{
            "is_pass": true/false,
            "message": "验收通过/不通过的原因",
            "suggestion": "优化建议,验收通过则为null"
        }}
        只输出JSON,不要输出其他内容。
        """
        response = llm.chat.completions.create(
            model="doubao-pro",
            messages=[{"role": "user", "content": acceptance_prompt}],
            temperature=0.1,
            stream=False
        )
        acceptance_content = response.choices[0].message.content.strip()
        if acceptance_content.startswith("```json"):
            acceptance_content = acceptance_content[7:-3].strip()
        acceptance_result = json.loads(acceptance_content)
        return acceptance_result["is_pass"], acceptance_result["message"]

    def run_project(self, user_task: str) -> str:
        """项目全流程执行入口,一键完成整个任务"""
        print(f"🚀 项目启动,用户需求:{user_task}")
        self.project_status = "running"
        self.project_context["user_task"] = user_task

        # 1. 拆解任务
        try:
            task_list = self._split_task(user_task)
        except Exception as e:
            self.project_status = "failed"
            return f"任务拆解失败:{str(e)}"

        # 2. 按顺序执行子任务
        for task in task_list:
            task_id = task["task_id"]
            task_name = task["task_name"]
            assign_to = task["assign_to"]
            task_desc = task["task_desc"]
            print(f"\n===== 开始执行子任务:{task_id} - {task_name} | 负责人:{assign_to} =====")

            # 检查前置依赖
            pre_dependency = task["pre_dependency"]
            if pre_dependency and pre_dependency not in self.project_context:
                error_msg = f"子任务{task_id}前置依赖{pre_dependency}未完成,项目终止"
                print(f"❌ {error_msg}")
                self.project_status = "failed"
                return error_msg

            # 获取上下文
            context = "\n".join([f"{k}{v[:500]}..." for k, v in self.project_context.items()])

            # 分配任务给对应的Agent执行
            agent = self.agent_map.get(assign_to)
            if not agent:
                error_msg = f"角色{assign_to}不存在,项目终止"
                print(f"❌ {error_msg}")
                self.project_status = "failed"
                return error_msg

            # 执行任务,最多重试2次
            max_retry = 2
            retry_times = 0
            is_pass = False
            result = ""
            while retry_times <= max_retry and not is_pass:
                result = agent.run(task_desc, context)
                # 验收结果
                is_pass, message = self._acceptance_check(task, result)
                if is_pass:
                    print(f"✅ 子任务{task_id}验收通过:{message}")
                else:
                    retry_times += 1
                    print(f"❌ 子任务{task_id}验收不通过:{message},第{retry_times}次重试")
                    task_desc = f"{task_desc}\n验收不通过原因:{message},请优化后重新提交"

            if not is_pass:
                error_msg = f"子任务{task_id}多次重试仍未通过验收,项目终止"
                print(f"❌ {error_msg}")
                self.project_status = "failed"
                return error_msg

            # 把结果存入项目上下文
            self.project_context[task_id] = result
            # 存入全局记忆
            memory_manager.add_long_term_memory(
                content=f"项目{user_task},子任务{task_id}执行结果:{result[:500]}...",
                business_type="multi_agent_project"
            )

        # 3. 所有子任务完成,生成项目总结报告
        self.project_status = "success"
        print(f"\n🎉 项目全部子任务执行完成,开始生成项目总结报告")
        summary_prompt = f"""
        你是项目经理,项目已全部完成,请基于项目上下文,生成一份完整的项目总结报告。
        项目上下文:{self.project_context}
        报告需要包含:项目需求、执行过程、交付物清单、最终总结。
        """
        summary_response = llm.chat.completions.create(
            model="doubao-pro",
            messages=[{"role": "user", "content": summary_prompt}],
            temperature=0.3,
            stream=False
        )
        summary_report = summary_response.choices[0].message.content.strip()
        self.project_context["summary_report"] = summary_report

        print(f"\n" + "="*80)
        print("📊 项目最终总结报告:")
        print(summary_report)
        print("="*80)
        return summary_report
(4)启动多智能体项目

我们用一个真实的需求,启动整个多智能体系统,完整跑通产品→开发→测试的全流程。

if __name__ == "__main__":
    # 初始化调度Agent
    dispatch_agent = DispatchAgent()
    # 定义用户需求
    user_task = "开发一个Python爬虫工具,用于爬取电商平台的商品评论数据,要求支持翻页、代理IP切换、数据保存到MySQL数据库,代码要规范、带注释、可直接运行"
    # 启动项目
    dispatch_agent.run_project(user_task)

4. 运行效果说明

运行代码后,你会看到多智能体系统的完整执行流程:

  1. 项目经理(调度Agent) 先把用户需求拆解成3个子任务:
    • task_001:产品经理负责需求分析,输出PRD产品需求文档;
    • task_002:开发工程师基于PRD,开发可运行的Python爬虫代码;
    • task_003:测试工程师基于PRD和代码,完成代码审查和测试,输出测试报告;
  2. 按顺序执行每个子任务,每个Agent完成任务后,项目经理会做验收,验收不通过会让Agent优化重试;
  3. 所有子任务完成后,项目经理会生成完整的项目总结报告;
  4. 整个过程完全无需人工干预,自动完成从需求到代码的全流程。

六、企业级落地踩坑避坑指南

我们落地了十几个多智能体项目,踩过了几乎所有能踩的坑,这里把最核心的6个坑分享出来,帮大家少走弯路。

1. 角色边界模糊,导致任务混乱、互相甩锅

这是90%的人都会踩的坑:给Agent的角色设定太模糊,职责边界不清晰,结果就是多个Agent抢着做同一件事,或者该做的事没人做,甚至互相甩锅。

  • 避坑方案:给每个Agent定死“能做什么、不能做什么、必须做什么”,越具体越好,绝对不要用模糊的角色描述,比如“你是一个开发工程师”,要写成“你是Python后端开发工程师,只负责基于PRD开发Python代码,不负责需求分析和测试,代码必须符合PEP8规范,带完整注释,可直接运行”。

2. 没有明确的输出规范,导致环节之间信息传递失真

前一个Agent的输出,是后一个Agent的输入,如果输出规范不明确,就会出现信息传递失真,比如产品Agent写的PRD,开发Agent完全看不懂,导致代码开发完全偏离需求。

  • 避坑方案:给每个环节的交付物定死固定的输出格式和模板,比如PRD必须包含“需求背景、用户场景、功能清单、非功能需求、验收标准”,代码必须包含“功能说明、依赖说明、使用方法、完整代码、注释”,格式越固定,信息传递越准确。

3. 没有验收机制,导致错误层层传递

很多人做的多智能体系统,没有验收环节,前一个环节出错了,后一个环节继续在错误的基础上执行,结果就是整个项目完全跑偏,最后输出的结果完全不可用。

  • 避坑方案:每个子任务执行完成后,必须做验收,验收不通过,必须让对应Agent优化重试,绝对不允许带着错误进入下一个环节。验收标准必须在任务拆解时就定死,可量化、可校验,不能模糊不清。

4. 过度追求灵活性,导致系统完全不可控

很多人一上来就学AutoGen搞去中心化自由通信,结果就是Agent之间乱聊,完全偏离初始目标,甚至陷入无限循环,整个系统完全不可控,根本无法落地到企业场景。

  • 避坑方案:新手优先用中心化调度架构,先把固定流程跑通、跑稳,只有当中心化架构确实无法满足灵活性需求时,再在细分模块内加入点对点通信,绝对不要搞完全的去中心化。

5. 没有角色专属工具和权限,导致安全风险

很多人给所有Agent开放所有工具的权限,结果就是测试Agent不小心执行了删除数据库的操作,产品Agent调用了不该调用的内部接口,出现严重的安全风险。

  • 避坑方案:最小权限原则,给每个Agent只开放完成自己任务必须的工具和权限,比如产品Agent只能用知识库检索工具,开发Agent只能用代码执行和文件写入工具,绝对不要给所有Agent开放全量权限。

6. 没有日志和追溯机制,出问题无法排查

多智能体系统的调试难度远高于单Agent,很多人没有做完整的日志记录,出了问题根本不知道是哪个环节、哪个Agent出了错,排查成本极高。

  • 避坑方案:全流程日志埋点,记录每个Agent的任务、输入、输出、执行时间、工具调用情况,同时把所有执行结果存入记忆系统,保证整个项目的执行过程可追溯、可审计、可复盘。

七、核心总结+下一篇预告

核心总结

多智能体架构,是Agent从“能完成简单任务的工具”升级为“能搞定企业级复杂项目的生产力系统”的核心跃迁。

  1. 多智能体分为三大类型:分工型(流水线,标准化场景首选)、协作型(团队式,复杂项目首选)、博弈型(对抗式,校验/决策场景首选);
  2. 核心架构选型:新手、标准化场景优先选中心化调度架构,稳定、可控、易落地,仅当灵活性需求无法满足时,再考虑去中心化或混合架构;
  3. 主流框架的核心精髓:不是API调用,而是角色化设计、标准化通信、规范化调度,以及SOP驱动的执行逻辑;
  4. 多智能体系统的上限,不是大模型的能力,而是角色职责的清晰度、流程规范的完善度、验收标准的明确度。

下一篇预告

本文我们实现了多智能体的核心架构,下一篇《第9篇:多智能体实战:产品+开发+测试全自动协作,完成完整项目开发》,我们会基于本文的架构,做一个完整的企业级实战,让多智能体团队全自动完成从需求分析、架构设计、代码开发、测试验收、部署上线的全流程,真正实现软件研发全自动化。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐