说实话,第一次听到“开发者不用写代码”这个说法时,我第一反应是嗤之以鼻。干这行十几年,从汇编写到 Python,从单体架构拆到微服务,哪一次“革命性工具”不是嘴上说得天花乱坠,上手之后发现该加班还是加班?直到我自己搭了一套 AI 代理工厂,把手里几个重复度极高的业务需求丢进去跑了一周,看着它自己拆任务、改代码、跑测试、提合并请求,我才意识到这次可能真的不一样了。
这篇文章不聊概念,就聊我实操搭建 AI 代理工厂的过程。我会把工厂里的角色划分、工具底座、完整的产线配置、真实项目的测评数据、以及踩过的五个大坑全部摊开讲。如果你目前一个人维护两三个系统,或者在一个小团队里整天被零散需求淹没,这篇文章能帮你省下大量重复劳动。
1. 从“补全代码”到“交付任务”:Agent 编程到底改变了什么
1.1 你还在用 AI 补全,别人已经在用 AI 交付
我用过很长一段时间的 AI 辅助编程工具,说实话,那种体验更像是“高级版的自动补全”。我写一个函数头,它帮我把函数体猜个大概;我写一个正则,它帮我补边界情况。确实省了不少打字时间,但整个开发流程的核心——理解需求、拆解任务、设计数据模型、写测试、排查失败——还是压在我自己身上。
但 AI 代理完全不是同一个物种。它不再等你在文件里敲出代码才接话,而是接收一个完整的任务描述,然后自己去翻代码库、定位相关文件、生成多个文件的修改方案、执行测试命令、查看失败日志再迭代修复。整个过程是“任务驱动”的,你验收的是结果,而不是每一行代码。
我举个例子你就明白了。以前我接到一个需求:把用户模块的密码重置逻辑从“发送临时密码”改成“发送重置链接”。我自己动手,从梳理接口到改测试,差不多要两个下午。现在我只要把需求描述清楚丢给代理工厂,它会自己找到 user_service.py、auth_controller.py、email_template.html 这三个文件,把校验逻辑改掉,更新接口文档,跑一遍单测,然后把一个合并请求草稿推给我。我只需要看 diff、补几个边界条件的注释,就能点合并。这就是本质区别:从“写代码”变成了“验收任务”。
1.2 代理工厂里的三个角色:规划者、执行者、审查者
搭建代理工厂之前,我建议大家先建立一个认知:不要把代理当成一个无所不能的超级程序员,而是要把它当成一支小型研发团队。我的工厂里固定设了三个角色:
- 规划代理(Planner):负责把模糊的需求变成可执行的开发计划。它会先读代码库,找出需要改动的文件清单、风险点、涉及的外部依赖,然后输出一份任务拆解方案。
- 编码代理(Coder):根据规划方案实际写代码。它工作在具体项目目录里,写代码、跑测试、根据报错修 bug。
- 审查代理(Reviewer):负责对编码代理的输出做 code review。它检查代码风格、潜在 bug、安全漏洞,还会模拟用户场景做一轮自测。
这三个角色对应到真实团队里,其实就是技术组长、开发工程师、代码审查人。角色分开之后,每个代理的系统提示词可以做得非常聚焦,不会出现“又要写代码又要自己审查自己”导致的盲区。我强烈建议不要只用单个代理干活,因为单个代理很容易出现“自己写出来的 bug 自己看不出来”的问题,跟人一样,需要外部视角。至于三个角色之间的衔接,我下面会讲具体的配置方法。
1.3 为什么叫“工厂”而不是“工具箱”
我一直强调“工厂”这个概念,是因为它和工具箱有本质区别。工具箱的意思是:你需要哪个工具,就手动调起哪个。而工厂的核心是流水线:任务从一端进去,经过拆解、编码、测试、审查、输出,自动流转。
这个区别在真实使用中特别明显。工具箱模式下,我要自己把需求拆成一个一个小的编码请求,再逐个丢给 AI 去执行;工厂模式下,我只需要输入一条需求描述,剩下的拆解和排期全部由规划代理完成,编码代理和审查代理会自动接力。尤其是需求一多的时候,工厂模式的批量处理能力会把你从“人肉调度员”的角色里解放出来。
我在本地搭工厂的时候,给每个角色挂了不同的模型配置和工具权限。规划代理用的是推理能力更强的大模型,给的权限比较保守,只能读代码、不能写;编码代理可以用速度快一点的模型,权限是读和写,但要限制它不能随便执行网络请求;审查代理用的模型,我会把上下文窗口调大,方便它完整读取所有改动文件和历史记录。这种精细化调度才是“工厂”这个名字真正的含义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 搭建代理工厂的底座:工具选型与最小闭环
2.1 底座选型:托管 API 与本地模型怎么选
搭工厂第一步是选底座。市面上能承载多代理协作的框架不少,但真正跑得稳的,我认为还得看底层模型和环境配置。我试过三种不同路线,给你做个参考:
- 纯托管 API 路线:所有代理统一调用云端大模型接口,配置最简单,效果最好,适合不想折腾硬件的人。缺点是有费用、数据要过第三方服务,对保密要求高的项目要慎重。
- 本地模型 + 代理框架路线:用本地部署的模型跑代理,数据不出内网,隐私最稳。缺点是模型能力上限明显不如云端,编码代理处理复杂多文件任务时经常“转不过弯来”。
- 混合路线:规划代理和审查代理用云端强模型,编码代理用本地中型模型跑重复性高的改代码任务。成本、隐私、效果三者平衡得最好,这也是我自己现在用的方案。
工具方面,我推荐支持自定义多代理协作的客户端或框架,我在用的主力是开源的 OpenCode 以及 Cline。OpenCode 的好处是支持灵活的多代理配置和任务队列,适合做流水线;Cline 的强项是能直接读写项目文件、调用终端命令,Plan/Act 两种模式可以直接映射成规划代理和编码代理。两个工具搭配起来,一个做流程调度,一个做具体执行,效果非常理想。
2.2 最小闭环的四个环节
所谓最小闭环,就是我不管后续玩出多少花样,都必须先跑通这个基础链路:
- 需求进入:我写一条结构化需求描述,丢进项目根目录下的一个
tasks/文件夹,代理工厂会监听这个目录。 - 方案生成:规划代理读取需求文档,扫描代码库结构,输出一份
plan.md,列出改动文件清单、技术方案、测试计划。 - 代码执行:编码代理依据
plan.md逐文件修改,每改完一个模块就自动运行对应的单元测试,失败就继续迭代。 - 审查合并:审查代理比对改动前后的代码,检查风格、安全、边界情况,确认无误后生成合并请求。
闭环跑通之后,我再往上加各种增强功能,比如自动生成提交信息、自动更新变更日志、对接 CI 流水线。但核心永远是这四个环节,它们缺一个,工厂就跑不转。
2.3 一组可落地的配置参考
给你看看我配置文件里的核心逻辑,不一定照抄,但可以帮你理解调度关系:
json复制{
"agents": {
"planner": {
"model": "claude-sonnet-4-20250514",
"permissions": ["read"],
"system_prompt": "你是一名资深架构师,任务是把需求转化为可执行开发计划。输出必须包含:改动文件清单、技术风险、测试方案。你不写代码,只输出计划。"
},
"coder": {
"model": "gpt-4.1-2025-04-14",
"permissions": ["read", "write", "run_terminal_command"],
"system_prompt": "你是一名严谨的工程师,必须严格按照规划文档执行。每完成一个文件的修改,立即运行相关测试。不要擅自扩大改动范围。"
},
"reviewer": {
"model": "claude-sonnet-4-20250514",
"permissions": ["read", "run_terminal_command"],
"system_prompt": "你是一名高级代码审查员,检查改动是否存在逻辑错误、安全隐患、性能问题。模拟边界条件执行验证。发现问题时输出修改建议。"
}
},
"workflow": {
"listen_dir": "./tasks",
"output": "./output",
"max_iterations": 5
}
}
这段配置的精髓在于:每个代理的权限和职责互相咬合。规划代理只能读不能写,编码代理能写但不容许擅自扩需求,审查代理只看不写、但能执行命令验证。权限收紧之后,代理之间的“信任边界”就建立起来了,不会出现同一个代理既当运动员又当裁判导致问题被掩盖的情况。max_iterations 我建议设成 5,防止代理在某些复杂问题上死循环浪费 token。
3. 我的代理工厂产线:从需求到合并请求的全链路配置
3.1 需求描述模板:写清楚才能干明白
很多人觉得代理工厂不靠谱,其实一半的问题出在需求描述太模糊。AI 代理没有读心术,你说“优化一下登录页面”,它就真敢给你重写整个页面。所以我给自己的工厂定了一个需求模板,凡是进 tasks/ 目录的需求,必须按这个格式写:
markdown复制## 需求背景
(为什么要做这个改动?当前现状是什么?)
## 期望行为
(改动完成后,用户/系统的行为应该是什么?列出可验证的具体要求)
## 非目标
(这次明确不做什么?防止代理扩大范围)
## 相关文件
(如果能定位到相关文件,可以直接指出来,加速规划代理的分析)
## 验收标准
(满足什么条件算完成?比如:单测通过、接口返回码正确、无数据库迁移等)
你可能会觉得这个模板有点啰嗦。但实际上,写清楚一份需求文档的时间,远小于和代理来回扯皮的时间。我自己的经验是:需求写得越清晰,代理越少问你问题;你越是敷衍,代理就越是在错误的方向上努力。尤其是“非目标”这一栏,简直是防跑偏利器,我亲眼见过一次没写“不需要改动缓存策略”,结果编码代理把 Redis 缓存层顺手重写了,吓得我赶紧把这个关键词写进模板第一行。
3.2 编码代理的工作协议:系统提示词的写法
系统提示词是代理工厂的“公司规章制度”。我见过太多人随便写一句话“你是编码助手”就交给代理干活,这种配置很难输出稳定结果。我给编码代理写的协议是这么几条:
- 所有代码改动必须基于规划文档,禁止自主扩大范围。
- 每完成一个文件,立即运行该文件相关的测试用例;测试失败时先读日志,再改代码,禁止盲目重试。
- 如果实现过程中发现原计划有问题,先停下来,输出遇到的问题,等待用户指令,不要自行绕路。
- 提交代码前必须执行一次代码格式化工具。
- 所有对外部服务的调用必须走统一封装接口,禁止在业务代码里直接构造 HTTP 请求。
这些规则听起来特别像“给人定的开发规范”,但正是这种规范让代理的行为变得可预期。尤其是“禁止盲目重试”这一条,我踩过坑:代理遇到测试失败,经常不读报错日志就开始反复改代码,越改越乱,最后把原本能跑的功能也改坏了。强制它先读日志再动手之后,这类问题少了一大半。
审查代理的检查清单我整理成了固定条目,跑完一个任务就按这个列表过一遍:
- 接口是否处理了空指针和空数组的边界情况?
- 是否在事务里调用了外部 HTTP 请求(阻塞事务的风险)?
- 新增依赖是否声明了版本锁定?
- 日志中是否可能打印敏感字段(手机号、密码、token)?
- 改动是否覆盖了原有的回归测试?
- 数据库迁移脚本是否包含回滚方案?
你会发现这份清单解决的主要是“代码基础素质”问题,不是功能有没有实现。因为功能的正确性可以靠测试去验证,而代码风格、安全隐患、架构一致性,往往才是 AI 代理最容易翻车的地方。
3.3 一个完整任务案例:登录模块从密码改为重置链接
空谈配置没有感觉,我拿上周跑过的真实需求给你走一遍流程。需求文档是这样写的:
需求背景:当前系统在用户点击“忘记密码”后,会生成临时密码发送到用户邮箱。但用户反馈临时密码经常被邮箱拦截,导致无法登录。
期望行为:改为发送重置链接,点击链接后进入设置新密码的页面,链接有效期设为 30 分钟。
非目标:不修改注册流程,不改变短信通知渠道。
验收标准:本地测试环境模拟通过邮件发送链接;链接过期后访问返回 403;用户成功设置新密码后可用新密码登录。
这份需求丢进 tasks/ 目录后,规划代理在 40 秒内输出了 plan.md,里面列出了需要改动的 6 个文件,标出了两个潜在风险点:一个是邮件模板变量名需要同步改,另一个是旧的重置 token 在数据库里仍存在,需要兼容处理。编码代理接着按这个方案执行,第一次跑测试失败了一个,原因是邮件模板里的链接域名用的是测试配置的 localhost,代理自动读取了环境变量文件后修正了这个问题。最后审查代理补了两条建议:给重置链接加上 Referrer-Policy 头、把 token 过期时间统一收敛到配置中心。
整个流程耗时约 18 分钟,期间我唯一做的一件事是最后的 diff 确认。这个需求要是放在以前,我光写代码就得大半天。
4. 真实项目实测:效率、返工率与需要人兜底的地方
4.1 我让工厂跑了一周,数据长这样
理论说得再多都不如拿数据说话。我挑了一个真实的后端项目,跑了完整的一周,记录了 15 个中等复杂度任务的表现:
| 指标 | 数据 | 备注 |
|---|---|---|
| 总任务数 | 15 | 包括接口改造、bug 修复、依赖升级、日志优化 |
| 平均单任务耗时 | 22 分钟 | 从需求文档进入队列到合并请求生成 |
| 一次通过率 | 8/15 | 剩余 7 个任务在首次合并前被审查代理拦截 |
| 人工返工率 | 5/15 | 审查通过后仍需人工补充修改,主要是需求理解偏差 |
| 回归测试全绿 | 13/15 | 两个任务因测试环境数据库冲突导致失败,重跑后通过 |
这个数据说明什么呢?代理工厂不是一个“拿来就能完全撒手”的工具,它更像一个非常聪明的初级工程师——能把 80% 的螺丝钉工作干得很快,但还有一部分任务需要你在关键时刻把关。一次通过率只有一半出头,这其实是好事,说明审查代理真的在起作用,而不是走走过场。如果哪一天你发现所有任务都一次通过,那反而要警惕,可能是测试覆盖太弱或者审查代理被“带偏”了。
4.2 翻车现场:三个经典失败案例
我挑三个印象最深的翻车案例,给各位提个醒。
第一个案例是“过度设计”。有一个任务是给列表接口增加分页参数。这个功能我预期就是加 page 和 size 两个参数、改一下 SQL 的 LIMIT。结果编码代理不知道哪根筋搭错了,直接把查询改成 ES 全文检索方案,硬生生引入了两个新的依赖包和一大段索引同步逻辑。幸好它提交的合并请求被我看到了,否则整个项目的复杂度凭空上涨一个档次。这也是我在需求模板里强化“非目标”字段的直接原因。
第二个案例是“把自己绕晕”。一个 bug 修复任务涉及三个文件之间的循环依赖。代理改到第二轮的时候,反复在 A 文件加一个常量、在 B 文件删同一个常量、在 C 文件又 import 回来,五个迭代轮次全浪费在这件事上,最后我不得不在 plan.md 里手动指定了依赖方向,它才恢复正常。教训是:遇到多文件循环依赖,最好在规划阶段就讲清楚,否则代理会陷入迷宫。
第三个案例比较隐蔽,是“静默换库”。我让代理把缓存中间件从 Redis 客户端 A 切换成客户端 B,计划文档明确说了只替换客户端初始化代码。但它顺手把另一个模块里的序列化协议也改了,因为它在读代码时“发现”原协议和 B 客户端不兼容。这个改动本身没问题,但完全在需求范围之外。如果不是公司有严谨的 code review 流程,这种隐性问题很容易溜进去。
4.3 哪些环节我坚持人工干预
数据摆出来,你可能会问:到底哪些环节一定要人工盯?我不想给你打鸡血说“全自动一切搞定”,那是不负责任的。根据这一周的实测,我定了三条“人工干预红线”:
- 需求边界必须人工确认。代理可以对需求描述做合理的细节补全,但涉及接口契约、数据模型变动、第三方服务切换这类改变架构边界的决定,必须由人拍板。
- 涉及安全策略的改动必须人工复核。比如权限校验逻辑、支付回调、用户数据导出,这些地方我会逐行看 diff,绝不全权交给代理。
- 测试失败超过 3 轮的任务必须人工介入。这说明问题可能不在代码逻辑,而在环境配置或者需求本身的矛盾,代理再怎么迭代也是白费力气。
我现在的节奏是:早上到岗先把 tasks/ 目录里的需求统一整理一遍,让工厂自己跑;下午集中精力看合并请求、处理必须人工介入的复杂问题。这样的工作流让我从“一直写代码”变成了“上午分配任务、下午审查成果”,注意不是真的躺平,而是把精力花在更值得花的地方。
5. 避坑清单:代理工厂最常挂掉的五个位置
5.1 上下文污染:昨天的废物决定今天的行为
代理和人类一样,会被早期的信息带偏。我做过的任务里,如果前面 30 次交互都在讨论方案 A,后面即使要求它切换成方案 B,它也很容易在细节里不自觉地回到方案 A 的老路。这就是上下文污染。解决思路是:尽量让每个任务的上下文保持独立。我改造后,每个任务会有一个独立的临时对话空间,任务完成后自动销毁,不跨任务复用。别小看这个细节,它直接影响了代理输出的稳定性。
5.2 空转与“假完成”:看似在干活其实在绕圈
你可能遇到过这种情况:代理连续输出了好几轮代码,看日志好像一直在工作,但你仔细一看,它其实是在同一个问题上原地打转——改一行代码、跑测试,失败;改回去,再跑,还是失败。这种空转会消耗大量 token,却解决不了问题。我在切到混合路线之前,本地模型发生过几次这种空转,最长一次连续转了 10 轮都没发现失败原因是测试环境没启动。因此,max_iterations 建议设置 5,达到上限后强制停住,让规划代理重新评估问题,或者人工介入检查环境状态。
5.3 环境权限:改文件很积极,跑测试却摸鱼
代理的权限配置里,如果只给了读写文件的能力,没有给它跑命令的能力,它就永远只能“纸上谈兵”——写完代码不能验证,空有改动的表象。反过来,如果权限过宽,它可能一上来就乱跑全局命令,把不该动的东西都碰一遍。我的经验是:给编码代理绑定一个 pre-approved 命令白名单,包括 pytest、npm test、go test、python manage.py makemigrations --check 这几类安全的测试类命令。其他命令必须通过人工确认才能执行,这样既能保证测试闭环,又不会被它折腾出幺蛾子。
5.4 幻觉式自信:它说没问题了,恰恰是最大的问题
代理在输出总结时,经常会出现“上述改动已完成,测试已通过”这类偏乐观的描述。这时候千万不能直接信。我遇到过写单元测试时,代理把断言逻辑写错了,导致测试本身就是“假阳性”——哪怕真正的代码全是 bug,测试报告依然全绿。应对办法很简单:审查代理必须抽查测试代码本身的正确性,而不是只看“测试通过”这个结果。我甚至会让审查代理专门做一件事:故意改坏一行业务代码,看测试能不能正常失败。这个手段对付“自嗨型测试”非常有效。
5.5 提示词工程没有死,只是换了形式
很多人觉得提示词工程已经过时了,现在的模型随便聊聊就能干活。但我观察下来,完全不是这么回事。在代理工厂的体系里,提示词不但没过时,反而升级成了“组织架构文档”。你在系统提示词里写清楚角色权限、工作边界、汇报对象,代理的行为就稳定;你写成玄学风格的“帮我好好干”,代理的随机性就飙升。
我习惯把提示词分成三个层次:第一层是全局约定(所有人都遵守的规范,比如“不允许伪造测试结果”),第二层是角色职责(不同代理各自的分工),第三层是单任务约束(每个需求文档里的非目标)。这三层提示词互相配合,才构建出一个可靠的代理组织。如果你把三个层次混在一起写,代理很容易顾此失彼。
提示:最后提醒一点,代理工厂会让你的代码产出速度大幅提升,但它不会提升你思考业务本质的能力。我现在的习惯是,把重复性工作交给工厂,把“这个系统为什么要这样设计”“这个接口未来的演进方向是什么”留给自己。毕竟,工具越强,人对方向感的判断就越值钱。
如果你也想搭一套自己的代理工厂,我建议不要一上来就追求大而全。先找一个重复度最高、边界最清晰的小模块——比如日志系统改造、接口参数校验统一、配置项收敛——做出一条最小产线,跑顺之后再逐步扩展。这个领域现在还远没到终点,我甚至怀疑再过半年,我们讨论“代理工厂”的方式会像今天讨论微服务一样习以为常。到那时候,真正拉开差距的,不是谁代码写得快,而是谁更会用工具重构自己的工作方式。
