首页 / 资讯中心 / 文章详情

多Agent协作编程实战:5个AI角色如何分工写代码

多Agent协作编程实战:5个AI角色如何分工写代码 ★ FEATURED ARTICLE
5个Agent同时帮我写代码这件事我最近连续干了一个多月说实话体验很魔幻。你在聊天框里发一条需求然后看着规划Agent把需求拆成任务卡架构Agent画出模块边界编码Agent开始逐个文件生成代码测试Agent补用例跑测试最后审查Agent把问题清单甩回来——整个过程就像凭空多了一支远程外包小队只不过这支小队由AI组成而且24小时不休息。这篇文章我想把这段实操经验完整讲清楚。这个“第四纪元”到底是什么为什么是多Agent而不是一个更聪明的Agent5个Agent具体怎么分工、怎么配合以及我踩过的坑和排查方法。如果你已经在用AI编程助手写代码但觉得单靠聊天窗口做不了太大、太完整的任务那这篇内容应该能帮你看清下一阶段的工作方式。1. AI编程的四个纪元从补全到协作我不太喜欢把工具的进化叫“革命”因为每次所谓革命其实都是围绕同一个核心问题在转人类怎么把脑子里的需求低成本地变成机器能理解、能执行的代码。1.1 第一纪元智能补全边缘化最早期的AI编程本质就是“更懂你的自动补全”。它是基于当前光标位置和附近代码预测下一个token是什么。它不会理解你的业务逻辑也不知道这个函数会被谁调用更不会主动帮你重构一个大类。它就是盯着你刚刚写的那一行给出最可能的后续。这个纪元的体验特点是你依然要自己写绝大部分代码AI只是帮你多敲几个字母。它的价值很明显——减少机械性输入但能力上限也很明显——它没有“全局视角”。你可以让它补全一个getter/setter但不能让它凭空设计一套权限模型。你可以把它当成一个输入法但不可能把它当成搭档。第一纪元的技术内核是“概率补全”。它甚至谈不上理解程序它只是语言模型预测力强推理能力基本用在局部场景。那段时间我见过不少同事对它的补全结果迷信结果API调用的括号被补错函数签名被自动改掉最后编译都过不了。它不是坏工具但它的唯一正确用法就是辅助纯手写过程。1.2 第二纪元对话式生成的转折对话式AI编程的出现才真正让“用AI写代码”变成“跟AI说需求”。你不再一行一行补全而是用自然语言描述“帮我写一个读取Excel并生成报告的脚本”AI会给你一段完整代码。这个纪元带来两个核心变化。第一从“填空”变成“生成”。第二从“局部推断”变成“上下文对话”——你可以在聊天框里追问、纠错、让它重写形成一个交互闭环。但对话式生成有致命短板没有记忆边界外的行动力。它生成了代码却没法自己打开终端运行它写出了函数却不知道项目里已经有了同名工具类它给出了方案却不会主动检查这个方案是否破坏其它模块。你依然要自己把代码粘贴回编辑器自己跑测试自己去修编译错误再去人工对照逻辑。整个流程等于AI当文案你当搬砖工。这个阶段我开始感受到一个更麻烦的事当需求足够复杂对话模式会失控。你让AI写个登录模块它可能写到一半就忘了第一轮对话时说过的约束条件。你提醒了三次“不使用某个旧库”结果第四次让它修改别的文件时它又给加了回来。对话长度超过上下文之后模型的行为就会像金鱼记忆——永远只记得最近几条消息。1.3 第三纪元单Agent接管任务Agent这个词在不同语境下被用得烂大街了但我这里说的Agent指的是具备“感知-决策-行动”闭环的AI程序。它不只是跟你对话而是能自己决定下一步做什么读取哪个文件、运行哪条命令、修改哪个类、查看测试结果然后根据结果决定下一步。第三纪元的标志就是你可以丢给它一个相对完整的任务比如“给订单模块加一个取消功能”然后看它自己操作。不需要你贴代码它自己知道去查order相关文件找到状态机看懂现有流程然后修改代码并补测试。你只需要在最后验收结果。这个纪元的体验有了质的变化。它不再是一个问答工具而是一个“实习生”——理解需求后自己列清单自己动手遇到问题会回头查。但也正是到了第三纪元一个关键瓶颈暴露了一个Agent同时承担多个角色时质量会急剧下滑。我曾经用一个通用的Agent去完成一个大需求既要设计数据库表结构又要写业务逻辑还要保证代码风格统一最后还要自己审查自己。结果它确实全干了但中间的逻辑混乱让我改了两天。它在设计表的时候没有考虑到业务层要按订单维度统计它在写业务代码时又把表结构改了它在自测时因为对需求理解偏了所有用例都是按它自己写的逻辑去验证的——测试看起来全绿但根本测的不是我的需求。这个经历让我意识到单Agent像是一个全栈工程师但它没有“同事之间互相检查”的机制。一个人从设计到测试全包会陷入自我确认的循环里。1.4 第四纪元多Agent协作分工第四纪元的本质是把“一个全能的Agent”拆成“多个专职的Agent”让它们像一支开发团队那样协作。每个Agent有明确的角色、职责边界、输入输出格式用标准化的中间产物需求文档、架构图、任务清单、测试报告、审查记录来传递信息。我在实践中跑熟了的多Agent流程是这样的规划Agent先把需求嚼碎产出任务清单和验收标准架构Agent基于清单确定技术方案和模块边界编码Agent按方案逐块实现测试Agent独立编写和执行用例审查Agent最后做一轮代码评审找出规范问题、安全隐患和设计瑕疵返回给编码Agent修改。这套模式的直接收益是任务的每一步都有明确的“上下文窗口”。规划Agent不需要看代码细节编码Agent不需要纠结需求大方向审查Agent只看差异和模式。每个Agent面对的信息空间小了注意力反而集中了。而且多Agent会天然产生“对抗性反馈”。编码Agent想赶紧完成测试Agent想找出漏洞审查Agent挑毛病。这种分工制衡恰好治好了大模型“自己写自己检查”时的那种盲目自信。2. 多Agent架构的核心思路为什么是5个而不是1个超级Agent很多人第一次听到多Agent就问为什么不直接把一个Agent变得更强增加上下文窗口、增强推理技能、给足工具权限一个Agent不就能干所有事了吗理论上可以现实里做不到。这里面的原因值得拆开细讲。2.1 单Agent的失控注意力、上下文与角色冲突大语言模型有token上限那是硬边界。但在没到上限之前模型已经会因为“早期上下文衰减”而遗忘了。你让一个Agent处理几千行代码库的改动需求前几轮对话里确定的业务约束在它修改到第20个文件时早就被后续的新内容挤到注意力边缘了。这是模型架构层面的特征不是靠提示词技巧就能解决。另一个更隐蔽的问题是角色冲突。同一个Agent一会儿扮演“架构评审”一会儿扮演“编码工程师”它的行为会在不同模式之间摇摆。让它最后“自己审查自己的代码”时大多数模型会有一种倾向为了保持一致性倾向于说自己写得好。我在第三纪元的项目里让Agent自测失败用例被打上了“非必要错误”的标签直接忽略了。多Agent把角色物理隔离后这个问题大幅减少。我私底下把单Agent模式比作一个既当运动员又当裁判的选手。你可以说他能力强但比赛结果一定让人不放心。多Agent至少让裁判坐在另一个房间。2.2 5个Agent的角色划分与职责边界选了多Agent后下一个问题就是不搞5个Agent行不行为什么是5个因为经过我跑通了3套实验配置后最终收敛到这一套最稳的组合规划、架构、编码、测试、审查。五个角色共同覆盖了软件开发里决策、设计、实现、验证、制衡五个关键职能。五个角色的职责一览Agent角色核心职责关键产出需要读的上下文规划Agent拆解需求、明确范围、定义验收标准任务清单、验收标准原始需求、项目背景说明架构Agent确定技术路线、模块划分、接口约定技术方案、接口定义任务清单、现有项目结构编码Agent按方案实现功能代码代码变更技术方案、任务卡、已有代码测试Agent设计并执行测试、发现缺陷测试代码、测试报告任务卡、代码变更审查Agent代码规范、安全审查、缺陷复核审查问题清单代码变更、测试报告如果项目小两个Agent也能跑规划和编码。如果项目大5个之后还可以扩出第四纪元更多成员比如专门负责重构的Agent、专门查数据的Agent。但核心思想一致角色边界越清晰协作越稳定。2.3 协作拓扑串行流水线与反馈闭环5个Agent之间怎么协作我实际用得最多的拓扑是“串行为主反馈闭环为辅”。第一步启动时规划Agent的输出会直接交给架构Agent这叫串行流水线。编码完成后测试Agent和审查Agent的结果会回传给编码Agent形成一个反馈迭代。这种结构的好处是主路径简单清晰反馈路径聚焦在变化点上。也有并行方案比如把一个大项目拆成三个互相独立的模块同时让三个编码Agent分别实现最后再由审查Agent统一合并检查。并行可以大幅提高速度但代价是冲突风险指数增加。两个Agent同时改同一个公共类大概率产生死锁。我的建议是第一次尝试多Agent的开发者先跑纯串行。串行模式里所有缺陷都能追溯到明确的Agent和中间产物排查容易。等到运行稳定了再考虑把互不依赖的模块交给多个编码Agent并行。3. 实操落地搭建一套5Agent协作的编码工作流讲完了原理接下来是实操部分。我会按“底模选型 → 角色提示词设计 → 工作流编排 → 人工介入节点”的顺序展开。3.1 工具选型什么底模适合做多Agent先明确一点多Agent不是提示词就能解决的。它需要底模支持工具调用也就是Agent执行到某一步时能主动发起“读文件”、“写文件”、“执行命令”、“搜索代码”这类操作。如果你用的对话模型只能输入输出纯文本那多Agent跑不起来顶多是“五个窗口分开聊”。底模选型我会关注四点一是是否支持结构化输出方便把中间产物落成JSON或Markdown二是上下文窗口是否够长虽然分了角色但单个Agent还是可能读几十个文件三是工具调用的准确率尤其是“什么时候该搜索、什么时候该读文件”四是稳定性多Agent每一步依赖上一步输出任何一个Agent抽风后面全乱。我实测下来主力Agent坚决用能力强的通用模型测试Agent和审查Agent可以用参数稍小的模型。原因很简单测试和审查的关键是“看穿问题”不需要太多发散创作但需要高度细心。这类任务对模型要求没那么高用中小模型能省不少成本。反过来规划Agent和架构Agent绝对不能吝啬因为它们的输出直接影响后面所有环节的走向。3.2 角色提示词模板每个Agent的系统提示词要包含四块角色、输入格式、输出格式、约束条件。约束条件是最容易被忽略的一块却是保障协作秩序的关键。我分享一个我实际在用的模板结构以架构Agent为例你是一名软件架构师。你的任务是分析需求文档输出一份可直接指导编码的技术方案。 【输入】你会收到一份结构化需求文档格式为JSON包含字段 - requirement: 需求描述 - acceptance_criteria: 验收标准 - constraints: 业务约束 【输出】你必须输出JSON包含字段 - modules: 模块划分列表 - data_model: 数据模型定义 - interfaces: 模块间接口约定 - risk_notes: 你识别出的风险 【约束】 1. 基于现有代码库结构做出设计不得凭空创建不存在的公共层。 2. 新增依赖库必须给出理由禁止引入重复功能的库。 3. 接口定义必须考虑向后兼容。 4. 如果你发现需求文档有歧义在risk_notes中标出不自行假设。结构化输出是刚需。人读文本没问题但下一个Agent去读自由文本容易跑偏。统一用固定的JSON格式后面解析、存档、查问题都非常顺手。我用这种方式之后Agent之间传递信息出错的概率至少降了一半。3.3 工作流编排从需求到合并的完整闭环最后是完整的工作流我记录的当前版本有8个节点需求输入我把项目背景和需求描述给规划Agent。这里的关键是“背景信息”要够多比如代码仓库根目录、技术栈、已存在的模块列表。规划产出规划Agent返回任务清单每项任务包含工作量估计、依赖关系、验收标准。我会先人审这一关发现任务拆解有偏差就立刻改。架构设计架构Agent读取任务清单结合现有代码库输出模块划分、接口定义和数据模型。编码实现编码Agent按任务卡逐个实现。每个任务卡包含“对应架构模块说明”和“验收标准”编码Agent需要标出自己改动的文件清单。测试补充测试Agent基于任务卡和代码改动编写测试用例然后运行整个测试套件记录失败项。代码审查审查Agent读取代码diff执行规范检查、安全扫描、逻辑缺陷分析输出问题清单每个问题标严重级别。反馈迭代测试报告和审查问题清单回到编码Agent编码Agent按问题逐项修复。修完后回到测试和审查步骤循环。人工验收循环之后我把所有改动拉到一个新分支人工跑一轮冒烟测试确认没问题再合并主分支。实际跑下来的时间比例大概是规划架构占20%编码占30%测试审查占30%修复迭代占20%。有意思的是以前我单方面依赖AI直接写代码时编码部分看着快但后面修Bug的时间特别长。多Agent流程看起来多了规划和设计环节总时间反而更短因为设计环节的深思熟虑省掉了后面大量的返工。3.4 人工介入的时机节点多Agent不是说人完全撒手。设定人工介入的关键节点这在生产级环境里是不可省略的安全网。我在以下节点绝不缺席需求输入时必须人工确认规划Agent是否把需求理解对了架构方案产出后必须人工看一遍接口定义和技术选型因为架构决策会影响后面所有代码高优先级问题修复后必须人工确认修复方案是否引入了新问题最后一个节点是全流程结束前的人工代码走读不能完全交给Agent。还有一个安全习惯给每个Agent指定工作目录用git分支隔离。比如编码Agent在feature/ai-coding分支上干活审查Agent用只读模式访问代码。Agent只能操作它该操作的范围这避免了很多意外文件修改。如果你的Agent框架支持权限控制尽量用上。4. 常见问题与排查技巧实录多Agent流程跑起来之后真正的挑战才出现。下面是我踩过且解决了的问题每条都带排查思路你可以直接对标参考。4.1 上下文漂移Agent A不知道Agent B改了什么东西现象规划Agent早期定的验收标准是“支持批量退款”编码Agent实现时却只做了单笔退款。代码却通过了测试原因在于测试Agent也没看过规划文档里的验收标准。根因在于Agent之间传递的信息流断裂。规划Agent把验收标准写进JSON后架构Agent和编码Agent之间的任务卡只保留了“模块接口”字段但没有保留“验收标准”。等到测试Agent写用例时它参考的是编码Agent的代码实现等于用小猫咪定标准。解决中间产物必须作为规范落盘。我从那次之后强制规定规划Agent输出的JSON所有字段必须在后续任务卡中引用不允许自由改写。编码Agent的任务卡必须包含验收标准原文测试Agent的测试计划必须引用任务卡中的验收标准编号。排查方法当出现“代码实现了但完全不对需求”这类情况先查全流程里哪个环节丢弃了字段。用grep搜验收标准关键词看它流转到了哪一步。4.2 多重写冲突两个Agent改同一个文件现象我把三个互不依赖的模块交给三个编码Agent并行处理结果三个Agent都改了公共的util.py。合代码时冲突一堆而且冲突还不是简单的文本冲突——第三个Agent碰巧改了某个函数的默认参数第一个Agent完全不知道测试直接崩。根因我判断“互不依赖”只看了业务层没看公共代码层。并行Agent对公共文件的写操作没有锁机制。解决并行模式下编码Agent只能写它任务卡里指定的文件路径。任何涉及公共文件的修改必须走“单独队列”不允许并发。我后来的做法是先让其中一个Agent做公共层改造其余Agent等它完成后再基于新版本开发。串行公共层、并行业务层井水不犯河水。排查方法合并冲突的第一现场看文件列表凡是多个Agent都碰过的公共文件回退之后单独重新做。4.3 无休止的反馈死循环现象审查Agent指出编码Agent代码里有个helper函数命名不符合项目规范。编码Agent修改后测试Agent发现它改了功能逻辑相关测试失败。编码Agent修复测试后审查Agent又发现新改动里有重复代码。三四个来回下去问题越修越多。根因反馈循环里的“修复”动作没有控制边界。Agent在修复问题时倾向于顺手把看起来不顺眼的代码也改了。这样的“顺手动手术”引入了大量新变更点。解决设置最大迭代次数超过4次就人工接管。同时在修复指令里明确约束只允许修改审查问题清单里的内容不允许顺带重构。如果审查Agent反复提出低优先级、风格类问题我会把它的问题清单按“必须修复/建议修改/不处理”三层分级强制它不要纠缠第三层问题。排查方法每轮迭代保留一份diff记录。连续三轮的核心改动路径无法收敛到同一批文件时立刻切人工。4.4 Token成本膨胀现象5个Agent干活快账单涨得更快。某次两周的项目Token费用比之前纯人工加单Agent翻了四倍。大头在测试Agent反复运行测试套件时要读取大量日志和上下文。根因没有控制“观察窗口”。测试Agent每次运行测试都要把完整输出塞进上下文哪怕输出里只有最后几行是有用的。审查Agent也是全量读diff而diff在多次迭代后会膨胀。解决压缩观察数据。测试Agent只接收失败用例的堆栈摘要和退出码完整日志落盘但不在上下文里读。审查Agent只读“新增/修改”的代码块不读全量diff。如果Agent工具支持“字典缓存”开全局函数签名索引就不用每次重新扫描整个仓库。我建议在每轮跑之前先估计Token预算。比如说规划阶段预算总预估的10%架构20%编码35%测试审查35%。每次实际跑完对账偏差超过20%就检查是不是某一轮丢了上下文导致重读文件。4.5 大模型的盲目自信测试全绿不代表产品没问题现象最危险的坑。测试Agent写了200条用例全绿但需求里有一条“手机号脱敏”根本没被测到。原因是测试Agent和编码Agent对“脱敏”都理解为“数据库里不存明文”实际上需求是“日志里不允许出现明文”。两个Agent达成了一致的错误共识。根因如果测试用例由同一个上下文里生成的代码决定它就很难跳出代码的思维方式。测试结果只能说明“代码本身运行符合预期”甚至这个预期可能本身就是错的。审查Agent同样受限于它看到的代码范围——它没看到需求方最初的澄清记录。解决让测试Agent独立于编码实现来写测试。我会把测试需求单独发给测试Agent它不需要看编码Agent的具体实现只需要根据任务卡里的验收标准去设计用例。如果测试Agent写出某条用例后发现在代码里找不到这个场景的实现它会主动报“验收标准未落地”而不是默默跳过。人工在这里必须敏感如果测试报告里所有用例全绿但没有一条涉及安全、边界值、异常输入的用例那基本可以认为测试Agent只是在“照着实现写测试”。5. 一些想提醒同龄开发者的心里话跑了一个多月多Agent协作之后我不太认同“AI会取代程序员”这种说法。多Agent并没有让我从开发的每个环节里抽身出来反而把“想清楚再动手”这件事提到了前所未有的高度。以前我可以边写边想写错了再改多Agent逼着我在调度Agent之前把所有验收标准写清楚把模块边界画出来。这套流程对我的正向价值远比代码生成本身更大。另一点实在的建议任何团队第一次做多Agent从2个Agent开始最稳妥。先让它跑通“规划→编码”的短链路积累一套稳定的结构化输出模板再加测试Agent最后加审查Agent。一上来5个Agent全开你会同时面对角色割裂、上下文冲突、成本失控等问题很难定位是哪个环节出了问题。多Agent编程的“第四纪元”并不是一个终点。我预期未来半年到一年会出现更成熟的Agent协作协议Agent之间可以自组织地盘活上下文资源任务分配也会由Agent们自己协商完成。到那时5个Agent可能变成50个Agent组成的小型虚拟研发组织。但万变不离其宗一个团队的质量取决于它的角色定义是否清晰、信息传递是否通畅、反馈闭环是否有效。这些规律跟用不用Agent无关。如果你也想试试这种工作方式别急着找最酷的框架先从一张纸开始把五个角色和它们的输入输出画清楚再研究技术方案。这一张纸就是你的第一个多Agent团队章程。
阅读完成 · 觉得有帮助?
咨询建站