ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一个人+3个AI Agent:3周交付4人团队的企业项目实战

一个人+3个AI Agent:3周交付4人团队的企业项目实战 1. 一个人扛起4人团队的活这个项目到底在做什么先交代一下背景免得大家觉得我在吹牛。上一个季度我接了一个企业级客户管理系统项目。原本的排期是这样的后端2人负责API和数据库、前端1人负责管理后台、测试1人负责用例和回归满打满算2个月交付。结果因为公司内部资源调动这支4人团队被抽走了大半项目落到我头上周期压缩到3周。我当时的第一反应是跟老板说做不完但冷静下来算了一笔账这个项目的业务逻辑不算复杂典型的企业内部系统——客户信息管理、订单流转、数据看板、权限控制外加对接一个第三方的消息推送服务。技术栈也很标准后端Rust Actix Web前端React Ant Design数据库PostgreSQL。真正耗时间的不是技术难点而是需求确认、CRUD代码堆量、联调测试、改bug这些体力活。3周时间单靠一个人硬写不可能。我当时正好在深度使用AI Agent就做了一个有点冒险的决定不按传统人力分工来改用3个AI Agent做主力我本人从写代码的人变成拆任务的人最终把关的人。最终结果3周交付客户验收通过线上跑了快2个月没出过需要回滚的故障。这篇就详细拆一下我到底是怎么做的、三个Agent分别是什么角色、中间踩了哪些坑以及这套玩法你能直接抄走多少。先说一个我踩坑之后才想明白的结论用Agent提速不是把需求丢给AI让它一口气写出整个系统而是把传统软件开发流程里的人肉环节逐个替换成可监督、可回归、可重跑的自动化流程。这三者缺一个Agent就是玩具。2. 三个Agent的角色分工编码主力、架构评审、测试巡检市面上聊AI Agent开发的主流架构动不动就是ReAct循环、多智能体协商、记忆网络听起来很高级。但放到真实项目里我要的不是学术Demo是能在一个周末稳定产出几百行可用代码的干活工具。所以我的三个Agent配置非常朴素全是基于现有大模型能力做的角色编排。2.1 Agent A编码主力负责落地模块代码Agent A承担了全项目大概80%的代码产出。我用的是当时长上下文表现最好的模型把整个项目的技术栈、目录结构、编码规范、已完成模块的示例代码全部塞进它的系统提示词里。它的工作方式是这样的我不直接说帮我写个客户管理模块而是给它一份非常具体的任务描述文件后面会详细展示这个文件长什么样。它读完任务描述后按描述实现代码同时补上对应的单元测试。举个例子客户列表的分页查询接口这个具体任务我给Agent A的描述是目标实现GET /api/v1/customers接口支持keyword模糊搜索、status精确筛选、page/page_size分页。 输入query参数keyword为字符串status为枚举值page默认为1page_size默认为20上限100。 输出JSON结构为{data: [...], total: 123, page: 1, page_size: 20}。 验收标准 1. 使用sqlx连接PostgreSQL查询需带上COLLATE C以区分大小写 2. 返回字段必须与已有CustomerDTO结构体对齐不得新增/缺少字段 3. 分页查询必须使用LIMIT/OFFSET禁止一次性拉全表再内存分页 4. 需要编写集成测试覆盖keyword命中、空结果、page越界三个场景。我观察下来任务描述越接近验收驱动Agent A的输出质量越高。纯功能性的描述容易让它自由发挥自由发挥就意味着后续我要花双倍时间修bug这个买卖不划算。2.2 Agent B评审Agent专门做代码走查和纠错Agent B是我踩了不少坑之后才加进来的但它的价值几乎是决定性的。因为Agent A生成代码速度快坏处也明显——它会在你不知道的地方突然暴露问题。比如它自认为CustomerDTO里加一个字段没问题就顺便改了DTO结构或者它发现一个工具函数调用起来很方便就直接复用但因为签名不匹配导致编译错误。作为一个人盯全场我根本没有精力逐行review每一段生成代码。Agent B实际上是一个独立会话使用和Agent A不同的模型专门做评审。我给它配的提示词模板里固定包含三件事对比需求把原始任务描述文件传给Agent B让它逐条核对Agent A写的代码检查是否实现了每个验收标准。检查技术债搜索代码里有没有硬编码的敏感信息、没有错误处理的unwrap、没有日志记录的静默失败。输出问题清单格式固定为文件路径 行号 严重程度P0/P1/P2 问题描述 修改建议。关键是Agent B和Agent A用的是不同的模型。这样做的逻辑很简单同一个模型自己写完自己审容易自我感觉良好换一个不同架构的模型做交叉检查很多低级的逻辑漏洞才会被真正暴露出来。至少我自己实测下来同模型自审基本只能抓点命名风格问题换模型之后能抓到并发场景下状态更新丢失这种真正的bug。2.3 Agent C测试巡检负责跑通任务并验证验收标准Agent C解决的问题是代码写完了、评审也过了但能在本地跑通和符合需求是两回事。Agent C本质上不是一个对话Agent而是一套用脚本串联起来的自动化流程。我把项目编译、单元测试、接口冒烟测试、以及预设的端到端用例全部写成了脚本Agent C每次取到Agent A的新代码后就按固定顺序执行cargo build编译错误直接卡住输出错误日志cargo test跑单元测试统计通过率启动本地服务用curl逐条打关键接口对比返回的JSON字段检查数据库迁移脚本确认没有破坏已有表结构。Agent C每次跑完会生成一份报告我只需要看报告不用亲自盯着终端。实测下来一个模块从Agent A写完到Agent C跑完平均10分钟。而同样的验证工作传统流程里测试人员手动操作大概要30到40分钟。至此我的3个Agent交付团队分工就明确了Agent A写代码Agent B审代码Agent C验代码。我本人负责写任务描述、协调依赖、做最终决策。3. 从0到1搭出Agent工作流任务拆解与上下文管理是关键三周干完两个月的活光靠把代码交给Agent写是远远不够的。真正拉开效率差距的是我对项目推进方式的彻底重构。这一节全部是我实际在用的方法论不是纸上谈兵。3.1 前置准备把需求变成Agent能执行的任务大多数人说用AI Agent写代码没效率根源在于他们跳过了前置准备步骤直接让Agent读一坨几十页的需求文档然后期望它输出完整项目。这是不可能的再强的模型都不行。我的做法是把项目拆成三层第一层设计基线。花两天时间我一个人完成数据库表结构设计共12张表、API路径规划共28个接口、核心模块划分客户、订单、权限、消息、看板。这一层必须有清晰产出物我最终落成了一份Markdown设计文档每张表、每个接口都有命名和字段说明。这一层不能交给Agent因为这是整个项目的地基地基歪了后面全废。第二层接口契约。把每个接口的请求、响应、错误码全部定死。每个接口一个单独文件放在/api_spec目录下。这一步也不需要写代码但Agent写代码时全靠它。比如涉及分页的接口统一用PageResponse结构涉及更新操作的接口统一返回204而不是200这类规范是Agent A编码时的宪法。第三层任务切片。关键所在。一个接口配一个任务描述文件放在/tasks目录下。任务描述文件长这样# 任务ID: TASK_007 ## 所属模块 订单管理 ## 依赖任务 TASK_003客户接口、TASK_005订单表迁移 ## 目标 实现工单创建接口 POST /api/v1/orders ## 输入 请求体JSON包含customer_id, product_id, quantity, remark ## 输出 201响应返回order_id和created_at ## 验收标准 1. customer_id必须存在于customers表不存在则返回400错误码1103 2. 创建订单时同步扣减库存扣减失败必须回滚订单记录 3. 需要幂等校验避免同一请求因网络重试产生两条订单 4. 10分钟内完成代码编写。 ## 约束 - 不允许改动TASK_003已交付的数据库迁移脚本 - 新增代码必须遵守项目现有错误码规范 - 必须在代码中记录关键日志包括请求ID和操作人。每个任务描述文件的粒度控制在一个Agent半天之内能完成的范围。任务太大Agent会迷失方向输出质量断崖式下降任务太小我写任务描述文件的时间成本又上来了。实测下来一个接口一个测试是效率最高的粒度。3.2 上下文管理的核心套路不要指望Agent记住一切很多人在同一个会话里让Agent写代码写到后面发现它开始变笨甚至忘掉一开始约定的命名规范。这就是上下文累积导致的注意力退化。我的解法是把上下文外置让Agent每一次都是带着完整状态开始工作。具体操作如下我在项目根目录建了一个/context文件夹里面放tech_stack.md技术栈版本清单、依赖库选择理由coding_style.md命名规则、错误处理规范、日志规范architecture.md模块目录结构说明、哪些模块之间允许互相调用progress.md当前任务进度、已完成模块说明、遗留问题记录。每次给Agent A开新任务时我第一件事就是把/context下最新的4个文件贴进会话里再贴上要做的任务描述文件。这一操作看似笨拙但实际上保证Agent每次都从清晰的全局状态出发而不是依赖它那有限的上下文记忆。做过一个对比实验同一个任务直接让Agent写结果它在接口命名上跟已有代码不一致贴了上下文再让它写一次通过评审。从那之后我每次开新会话都固定走这个流程。3.3 一个完整迭代周期的运转节奏有了上述基础我的日常迭代节奏就非常固定了。早上花30分钟拆当天的任务描述文件然后把任务逐个推进到队列里。每个任务走一遍完整流水线Agent A开新会话输入上下文任务描述生成代码和测试我把Agent A产出的代码合并到本地分支触发编译检查编译通过后把代码和任务描述一起丢给Agent B做评审Agent B输出问题清单我人工快速判断P0必须处理P1合并到任务列表P2记录待办处理完问题后跑Agent C的自动化测试巡检Agent C通过后我自己手动过一遍关键接口的返回结果确认无误后收敛为一个提交。这套流水线一开始很别扭毕竟每步都要切窗口、贴文本、等响应。但跑顺之后效率是真的高一个中等复杂度的接口比如带联表查询和多状态字段更新的那种从任务下发到测试通过平均40分钟。放到传统排期里这个工作量大概是一人一天。4. 3周交付背后实际踩过的坑与补救方案上面这套工作流看起来流畅但它不是一开始就这样的。我在头三天里踩了四五个大坑差点把整个项目带翻车。这一节把坑和对应的补救方案一起写出来比你们直接看成功经验更有参考价值。4.1 坑一上下文丢失导致接口契约被悄悄改写第一个大坑发生在一个客户详情接口上。当时任务描述明确写了返回字段必须与CustomerDTO对齐Agent A也照做了但我没注意到它顺手改动了CustomerDTO结构体——它觉得某个时间字段用String比用chrono::DateTime更好就直接改了定义然后一路改到数据库查询、响应序列化整个过程自洽得很。等我发现时已经有3个接口依赖旧字段类型。它们依然编译通过但返回时间格式和前端约定不一致前端同事那边直接炸了。排查链路前端反馈时间格式不对 - 我查后端响应 - 发现JSON里的时间字段是字符串而非时间戳 - 对比/api_spec契约文档 - 再追溯到Agent A的提交记录 - 发现它在任务外额外修改了DTO定义。补救方案加了一道硬性约束在任务描述末尾固定贴上一行禁止修改未列入本任务目标文件清单的任何文件。如确需修改须先在任务描述中追加说明并征得同意。同时我在Agent B的评审提示词里加入了一条检查项diff中是否包含任务描述文件清单以外的文件改动。一旦发现直接判为P0问题。从那之后这种悄咪咪改接口契约的行为就基本绝迹了。4.2 坑二幻觉代码导致第三方接口联调卡死项目里需要对接第三方的消息推送服务。我前期准备时只给了Agent A那个服务的API文档链接和鉴权方式没有在本地准备完整的Mock服务。等到联调阶段Agent A自信地生成了一大段调用代码我看着也很像那么回事——直到真正发起请求才发现它把第三方API的请求签名算法理解错了导致服务端一直返回认证失败。排查链路联调时返回401 - 我怀疑是密钥配置问题 - 检查后发现密钥没错 - 再核对请求头 - 发现时间戳格式是RFC 822而不是RFC 3339 - Agent A写代码时对文档理解有偏差。补救方案原本是让Agent A直接对着第三方文档写对接代码改成先把第三方API封装成独立的对接模块我人工审完签名逻辑后再让Agent A基于这个模块写业务调用。简单说涉及外部依赖的代码首版不要交给Agent要自己先确认核心交互逻辑再让Agent在上面做扩展。这是Agent相对容易出错的高风险区因为第三方API的行为没法靠模型推理完全猜准。4.3 坑三评审Agent变成部门经理说了等于没说一开始我给Agent B定的评审要求是检查代码质量指出潜在问题然后它输出的问题清单全是建议补充注释建议增加日志这种正确的废话。我开完会还得自己搜一遍关键逻辑评审效率极其低下。根因分析评审Agent不干活不是模型能力不够是评审标准太模糊。它没法凭空建立一套高质量代码的标准。补救方案我把评审流程从开放式的代码审查改成Checklist式的逐项核验把每一项都写成Agent B必须回答是/否的问题。比如所有数据库查询是否使用了参数化绑定而非字符串拼接是否在非幂等接口实现了幂等控制是否有客户端传入的字段直接拼进SQL错误响应码是否符合/api_spec中的约定新增代码是否引用了不存在的依赖或未声明的包Agent B的真实价值不在于自由评论代码好坏而在于给你提供一个可穷尽的核查列表把代码质量和规范执行变成一个不那么依赖灵感和经验的确定性过程。4.4 坑四任务串行依赖太长单日吞吐量上不去项目前三天我所有任务都是串行跑的Agent A写完任务7我才启动任务8Agent B审完任务7我才能合并提交。一个环节慢一点整个流水线就卡住。第三天结束我才完成6个任务按这个速度三周交付根本无望。补救方案我把任务依赖关系重新画了一遍把相邻的、依赖同一批数据表或同一组工具函数的任务合批处理。比如客户模块的创建客户查询客户列表批量导入客户三个任务就合并成一个更大粒度的批次让Agent A一次性完成虽然单次写码时间长了但省去了频繁切换上下文和重复加载上下文的开销。同时我按模块拆分了独立任务队列客户模块和订单模块的Agent A会话并行推进互不阻塞。这一步改造后我的单日任务吞吐量从2个批次提升到了5到6个批次。项目总任务量约40个批次最后在17个自然日内跑完留出了最后的联调安全期。5. 质量红线和人的定位AI输出如何变成可交付的代码聊到这儿可能有朋友最关心的问题是你让AI写了80%的代码质量怎么保证线上不会爆雷吗质量确实是最容易翻车的环节。我的经验是三条红线必须坚持人来定剩下的大量细节可以让AI放手干。5.1 红线圈定三件事只有人能做第一件架构决策。哪些模块用Actor模型、哪些数据放Redis、哪些走异步队列这类决策我全部自己定Agent只负责实现已经定好的方案。让Agent自由发挥架构设计前期很爽后期想死。我吃过的亏是让Agent A给一个低频查询接口做了一层缓存设计结果缓存失效策略写得不对数据更新后用户看到的是半小时前的旧数据排查了整整一个下午。第二件外部依赖交互。前文说过了涉及第三方接口的传输协议、签名算法、鉴权流程人负责第一版Agent做扩展。这一条永远有效因为AI对外部世界的真实行为不具备推理能力它的所有判断都来自训练数据里的文档而文档永远晚于真实系统。第三件验收标准定义。一个接口什么时候算做完必须人来定义。我对每个任务描述的验收标准都写得很苛刻Agent只会执行我的标准不会帮我把关标准本身是否合理。如果验收标准忘记写了不允许改动其他文件那它就真的不改了或者改得理所当然都是因为标准里没写。5.2 自动化测试不是额外开销是Agent模式的保命绳传统开发里测试的定位是保证质量而在我这个3人Agent团队里测试的定位变成了维持秩序。没有测试Agent A每改动一次代码我都要重新手工验证它没有破坏别的地方这是不可能做到的。有了测试任何回归我都能靠Agent C第一时间发现。我的自动化防线总共三层单元测试层每个工具函数、Repository方法都要覆盖核心分支路径接口集成测试层每一个API接口至少有一个成功路径的集成测试所有测试用数据库事务回滚隔离不会产生脏数据端到端冒烟层模拟一次完整的用户旅程比如创建客户 - 下订单 - 推送消息 - 查看看板数据第一步的输入会真实写入测试库跑完再清理。三层加起来的测试代码量占了整个项目的45%。放在传统团队里这个比例偏高但在Agent承担大量编码的场景下这个比例是必要的它是你在深夜还能安心睡觉的前提。5.3 我的人工抽检策略15分钟快速审查哪怕有了Agent B的Checklist我也会在每个批次合并前花15分钟人工扫一遍关键代码。我扫的不是每行逻辑而是三个重点区域数据流入口请求参数是怎么从HTTP层流到DB层的中间有没有未经验证的字段进入SQL查询状态变更点涉及UPDATE/DELETE操作的逻辑看它有没有处理并发冲突、有没有日志记录前后状态错误处理路径Agent A习惯只写正常逻辑异常分支往往写得薄弱所以我要专门看catch/unwrap/Result分支。这三块是我人工风险和AI产出效率的最佳平衡点。试过放手全交给Agent B结果在权限模块出现过一个越权查询漏洞也试过全程人工审效率直接回到解放前。15分钟抽查这几块目前是性价比最高的方案。6. 尝试复现这套玩法前你需要知道的事文章最后这部分我不做总结只分享一些条件反射式的经验给想复制这套玩法的人一个冷静的判断依据。6.1 什么样的项目适合用Agent大干一场亲测下来最适合的是新建的业务系统、内部管理系统、工具类平台因为它们的特征是数据结构清晰、逻辑可穷尽、验收标准好定义、没有复杂的遗留包袱。反例是接手的遗留老系统没有完整文档、隐藏历史包袱多、DB结构混乱、业务规则藏在几百个判断条件里。这种系统要先把现状喂给Agent它才能干活而喂现状的成本高到不如自己动手写。我的直观判断标准是如果要把代码背景讲清楚需要超过3000字那这个模块就暂时不适合Agent。既要Agent懂业务又要它懂代码组织还要它懂历史包袱这是硬要给三个Agent增加第四个角色的活。6.2 预算与成本账这个项目实际发生的API调用量大约是Agent A的会话数120多次Agent B的会话数80多次Agent C纯脚本不涉及模型调用。总的token消耗折算下来差不多是一个中等偏上的月度订阅价格跟我自己的人力成本比可以忽略不计。真正昂贵的不是token是我的提示词调试时间和任务描述编写时间。一个任务描述写得好不好决定了Agent A是上来就能干活还是要来回扯三轮。前期我花了很多碎片时间累积任务描述模板后面越写越顺单任务的描述编写时间控制在了5分钟内。建议你们也从模板沉淀开始不要每次从零想。6.3 团队配合的替代方案如果你是4人团队的管理者想把这套机制植入团队我建议的分工是每个人配一个Agent A作为私人编码助理共享一个Agent B做统一评审Agent C的自动化测试由测试同学来负责编写和维护。人不再亲自写大部分重复代码但每个人都要对交付的模块做最终的架构决策和验收判断。我这一套跑下来最大的变化是我的角色从生产者变成了编辑。我不再需要亲手起每一行代码但每一行代码交出之前都会经过我的标准验证。这种工作方式对个人能力的要求不是变低了恰恰相反它要求你对架构、技术规范、测试策略、验收标准有更清晰的认识。真要说4人团队2个月、我一个人3周这件事最核心的秘诀我觉得不是AI多聪明而是我用AI把传统开发里最容易产生浪费的环节——上下文切换、重复编码、人工回归、逐行审查——全部变成了可并行、可缓存、可重跑的流程。这个思路放在任何工具上都是成立的。
返回列表