你按完 Tab,代码“哗”地出来了,然后呢?改个全局字段名,它帮不上忙;换一个历史包袱很重的模块,它只能在你写完之后补几个凑数的注释;团队让你评估一次跨 30 个文件的依赖升级,你反而要花大量时间去和 AI 解释背景。
去年我在团队内部做了一期 Agent 工程化与 AI 编程的实战训练,目标很直接:带着一群早就熟悉代码补全、但没真正碰过 Agent 开发的人,从“编辑器帮我补全”走到“多智能体协同完成一个软件工程任务”。
说实话,这两者之间的差距比大多数人想象的大得多。代码补全是在预测“下一个 token 和下一段代码”,而 Agent 是在思考“目标是什么、先做什么、做完拿什么验收”。后者才是软件工程的日常。这篇文章就把我在训练过程中反复被问到、也被反复验证过的内容梳理一遍,偏实战,不讲虚的。
1. 从按一个 Tab 到让 AI 自己干活:代码补全与 Agent 的真实差距
1.1 代码补全的边界:它在预测“下一行”,不是理解“下一个目标”
有一类场景特别能说明问题:假设项目里要把订单表的status字段从字符串改成枚举,改动范围横跨数据库访问层、业务校验、接口 VO、前端展示。你在编辑器里打开一个 Service 文件,光标停在一个if (order.getStatus().equals("PAID"))上,补全插件顶多帮你把equals("PAID")补全成equals(OrderStatus.PAID),它不会主动去查哪些地方用了魔法字符串、哪些接口的返回结构需要跟着变。
这不是补全工具“笨”,而是模型的工作机制决定的。代码补全类功能本质上是基于左侧代码上下文做续写,它看到的是一个文件内的几百行内容,对仓库里其他模块的引用关系感知很弱。哪怕今天的大模型训练语料非常多,只要项目里的业务概念、命名约定、框架封装是自己的,补全就大概率在“假装懂你”。
所以第一个认知必须建立:AI 编程能力不是一条平滑上升的曲线,而是分层的台阶。补全在最底层,它服务的是“人已经把思路想清楚、正在逐行落笔”的阶段。想往上走,首先要做的不是换一个更贵的工具,而是意识到你自己正在哪个层级工作。
1.2 中间等级:可以替人类执行一个短任务
比补全高一层的 AI 编程形态,是“给定一个明确的局部任务,AI 自己完成代码修改并验证”。很多主流编辑器里的 Agent 模式已经具备这个能力:你给它一个 issue 描述,它能自己搜索相关文件、修改代码、跑测试、修复报错。这类工具适合三种场景。
第一种是跨文件的小重构。比如把某个工具函数从utils/a.ts迁移到utils/b.ts,同时更新所有引用它的文件。第二种是“照着已有模式新增功能”,比如项目里已经写了五个列表页,第六个列表页的增删改查流程高度相似,Agent 可以把前五个的实现风格抽出来直接套。第三种是修复已知报错,把编译错误、单测失败信息贴给它,让它循着报错栈去定位并修改。
我把这个层级称为“AI 实习生模式”或“单任务 Agent”。它和补全的关键差异在于:它具备了一个简单的感知-行动循环,能读到错误信息,也能调整自己的行为。但它能守住的目标范围很小,一个任务超过一小时人工工作量、牵涉超过十几个文件时,它的表现会急剧下降。
当时训练里有位学员很典型,他让单 Agent 去执行“把订单创建流程从 v1 接口切换到 v2 接口”,结果 Agent 改了接口调用、改了参数映射、也改了单测里的 mock 数据。看起来都改了,但 v2 的鉴权方式不同,代码提交之后联调才发现漏了网关层的 token 透传。问题出在哪?任务“看起来是一个”,实际上需要同时理解网关、控制器、聚合服务、调用方四个层面的约定,这已经突破单 Agent 的安全边界了。
1.3 多智能体解决的是“分工问题”而不是“生成能力问题”
那是不是把所有任务交给一个更聪明的 Agent 就行?我当时在训练营里的回答是:不行。大模型单次能承载的上下文和工作记忆有限,一个能搞定“全栈改造”的超大 Agent,大概率会在任务后半段忘掉前半段的约束,或者把互相冲突的经验混在一起。
多智能体系统真正解决的不是“AI 会更聪明”,而是“如何让多个有限能力的 AI 像团队一样协作”,把复杂度拆到互相隔离的上下文里,用工程手段管理连接和反馈。
你可以把单个 Agent 想象成一个能力很强、但只有短期记忆的开发人员。你让他一个人做整个项目,他做着做着会把 4 天前你确认过的“不改支付状态机”忘得一干二净。但你给他配一个架构师 Agent 负责维护约束清单、一个开发 Agent 专注写实现、一个测试 Agent 专门找茬,每个角色的记忆被限定在更窄的范围里,出错率反而更低。
这个认知是整个实战训练的地基,后面所有工程方案都从这个思想出发。
2. Agent 工程化的三座山:上下文管理、工具调用与失败恢复
把 Agent 当玩具跑通很容易,但要想把它用在真实软件工程里,必须解决三个问题。我给训练营的学员起了个名字叫“Agent 工程化三座山”,顺序基本就是踩坑的順序。
2.1 上下文管理:模型窗口是工作记忆,不是仓库硬盘
很多第一次做 Agent 开发的人会犯一个直觉错误:既然模型看得懂代码,那就把整个代码库都丢给它。结果 prompt 还没写完,token 配额先爆了;就算没爆,模型也经常被无关代码干扰,给出泛泛的、模板化的方案。
上下文管理的第一性原理是:模型的工作记忆有限,它适合处理压缩后的摘要、判断依据和局部细节,而不是把整个仓库背下来。和人类新同事入职一样,你需要先给它一份“项目地图”,告诉它各模块职责、关键入口文件、测试命令在哪里,等它实际要改某个模块时,再按需加载那部分的真实代码。
实践中我建议每个 Agent 任务开始前都维护三份上下文:
- 项目地图(Project Map):500 行以内的仓库结构说明,包含模块职责、边界、常用命令。这是一个静态文件,由有经验的工程师维护,Agent 每次启动先读它。
- 任务状态(Task State):当前任务的目标、已完成事项、未完成事项、关键决策记录。相当于给 Agent 一张便利贴,防止它做着做着忘了自己在哪。
- 局部代码视图(Local View):真正涉及修改的文件内容,按引用链展开,而不是按目录展开。
有一次我们让 Agent 重构一个历史模块,它自己跑去读了十几层import链,最后把完全不相关的图片上传工具函数也读进去了。任务彻底失控。后来在 prompt 里加了一条硬性约束:每当需要了解一个新的函数时,先说明“为什么这个函数与当前修改目标相关”,再决定是否读取,情况才好转。
2.2 工具调用:Agent 不能只写代码,还得会“用手”
Agent 和纯大模型问答的根本区别在于它能调用工具。一个写代码的 Agent 至少需要四类工具:文件读写、终端命令执行、代码搜索/语义检索、测试运行。如果你的 Agent 只能生成代码文本、不能自己去跑一下验证,那和代码补全没本质区别。
工具调用层最容易犯的错是把工具返回结果原样塞回模型上下文。终端一跑测试,输出 3000 行日志,Agent 的上下文瞬间就不够用了。我在项目里通常会做一层“工具结果瘦身器”:
- 只保留最后的错误摘要和退出码;
- 匹配已知错误模式并转换成简短提示,例如“编译失败:类型不匹配,位于文件 X 第 Y 行”;
- 把完整日志落盘,供后续 Debug 查证,但不进模型上下文。
这一层看起来简单,实际影响巨大。同样的任务,不做瘦身时 Agent 经常在中途“迷失”,做完整之后,任务成功率提升非常明显。
另外要注意工具调用的权限边界。让 Agent 自由执行终端命令很爽,但它可能把整个/tmp目录清掉或者在/etc里做实验。工程上一定要给 Agent 划定一个工作区目录,只允许它在这个目录下读写文件和执行命令。训练营里有人让 Agent 跑测试,它发现测试环境缺依赖,直接执行了pip install往系统 Python 环境里装包,把同事的开发环境搞坏了。从那以后,我再也没让 Agent 碰过工作区之外的任何东西。
2.3 失败恢复:从“一把梭”到“带护栏的执行循环”
Agent 开发的常见死法有三种:无限循环、错误叠加、提前放弃。写死循环是因为没有给它设定最大步数;错误叠加是因为它第一次出错后没有复位局部状态,带着错误结论继续往下做;提前放弃则是因为模型“畏难”,遇到一次编译错误就觉得任务不可行。
后来我们给 Agent 的执行循环装了几层护栏。第一层是步数限制。每个 Agent 在执行任务时明确标注最大尝试次数,比如单文件修改超过 5 次仍然失败,就停下并把现场保存给人类。第二层是错误分类。把报错分成“可自动修复”和“需要升级处理”两类,只有前者允许 Agent 自主重试。第三层是阶段检查点。每完成一个关键步骤,把产物摘要写到一个固定文件里,下次重试时先恢复检查点再继续,而不是从头再来。
打个比方,这就像开车不能只装油门,还得有刹车和保险带。Agent 的创造力是油门,护栏才是决定它能否上路跑长途的工程基础。
3. 单打独斗还是组队编程:多智能体协作模式的选择逻辑
3.1 四种主流交互模式,别再选了最重的那个
聊多智能体时经常有人问:到底有几种交互模式?业界常见的分类是四种:流水线模式、编排者-工人模式、分层模式、黑板/协作模式。
流水线模式最好理解,像工厂流水线一样,A Agent 的输出是 B Agent 的输入。当前一阶段产出文档,后一阶段按文档写代码,再下一阶段跑测试,每个环节只负责一个固定步骤。优点是职责清晰、易于理解;缺点是如果上游输出有问题,下游会一路错下去,纠错成本高。
编排者-工人模式是目前写代码场景里最常用的。一个 Orchestrator Agent 负责拆解任务、分发子任务,多个 Worker Agent 并行干活,再把结果汇总回来。它更像一个项目经理带着一组开发。
分层模式适合超大规模任务,顶层 Agent 管战略和资源分配,中层 Agent 管理子模块,底层 Agent 写具体实现,本质是编排者-工人模式的树状扩展,但每一层都有独立的上下文和评估逻辑。
黑板模式比较有意思,所有 Agent 读写一个共享空间,谁有结论就往上写,谁发现问题就来改。它很灵活,适合探索性问题,但最大的问题是缺乏明确的责任边界,经常出现两个 Agent 同时改一个设计决策的情况,在软件工程里容易造成混乱。
3.2 写代码时到底选哪种?我的判断标准
在实战训练里,我带学员用一张小表做选择,这里也放出来给你参考。
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 需求明确,产物可按阶段验收 | 流水线模式 | 上游产出文档,下游实现,天然符合软件工程流程 |
| 任务可在文件/模块级别拆分 | 编排者-工人模式 | 并行度高,上下文隔离清晰 |
| 目标是探索性方案设计或架构权衡 | 黑板模式 | 需要多视角碰撞,结论开放 |
| 大型多模块长期演进项目 | 分层模式 | 控制力度强,每层各司其职 |
但作为一个被多 Agent 系统坑过的人,我要额外泼一盆冷水:不是任务越复杂就越该上多 Agent。如果你手里的任务一小时以内能完成、上下文只要十几个文件,老老实实用一个单 Agent 跑,反而更快、更稳。
多 Agent 的额外成本很隐蔽,Agent 与 Agent 之间需要传递信息、需要协调一致性、需要处理彼此的失败。如果任务本身没有清晰的并行单元,引入多 Agent 只会给你增加几倍的问题定位难度。
3.3 Agent、Skill、工作流到底什么关系
训练中总有学员分不清 Agent 和 Skill 的区别,我常用一个比喻解释。
Agent 是一个“执行主体”,它有目标、会思考、能调用工具,像一位员工。Skill 是这位员工掌握的一项“能力包”,比如“如何写符合项目规范的单元测试”“如何做数据库迁移”,是可复用的行为模板和知识片段的集合。一个 Agent 可以装备多个 Skill,同一个 Skill 也可以被不同 Agent 共享。
工作流(Workflow)则更像“业务流程”,把这些员工和技能组织起来,定义谁先做、谁后做、什么条件触发下一步。简单说:Agent 决定“由谁做”,Skill 决定“会做什么”,Workflow 决定“按什么顺序做”。实际项目里,不要一上来就去追逐复杂的 Agent 框架,先把手头的工作流梳理清楚,再判断哪些环节适合用 Agent,哪些环节只是需要挂一个 Skill,这个顺序能省掉大量无用工作。
4. AI 编程环境搭建与 MCP 连接:把代码库变成模型可持续调用的服务
4.1 让 Agent 拥有“项目感”,需要一套组合而非一个插件
单靠编辑器里的智能补全插件无法支撑真正的 Agent 工程化。要支撑前两章说的能力,你需要搭一套由四个部分组成的 AI 编程环境:
- 代码检索服务,负责语义检索和符号跳转;
- 命令执行沙箱,负责安全的终端操作和测试运行;
- 变更工作区,负责隔离文件操作;
- Agent 运行框架,负责调度模型、调用工具、管理任务循环。
这套组合在不同团队里可能有不同实现方案,但思路是共通的。很多编程工具的 Agent 模式之所以比单纯补全强很多,就是因为它内部集成了代码检索和终端执行能力,而不只是背了一个更大的模型。
4.2 MCP:把各种能力封装成 Agent 能即插即用的工具接口
MCP(Model Context Protocol)是这段时间绕不开的词。它的价值和 USB 接口很像:过去你想让 AI 连接数据库、调用内部 API、读公司 Wiki,每个工具都要单独开发一套适配逻辑;有了 MCP,工具提供方只要实现一个标准协议的服务端,任何支持 MCP 的 Agent 都能直接发现并调用这些工具。这让 Agent 工程化的集成成本大幅降低。
实际应用中,我给一个内部运营分析 Agent 接了三类数据源:代码仓库(查实现细节)、内部接口文档(查参数)、数据库查询网关(查线上数据分布)。如果不用 MCP,我可能要分别写三个自定义工具插件,再用不同的参数格式硬塞进模型;用 MCP 之后,每个数据源只需要一个 server 描述文件,Agent 通过统一的工具发现机制就能使用。
不过也要注意,MCP 只是连接协议,它不解决权限和治理问题。给 Agent 配了一堆 MCP Server 不等于万事大吉,你必须为每个 Server 规划清楚“谁能连、能访问哪些数据、是否有写权限”。把只读数据库账号配给 Agent 和把管理端账号配给 Agent,造成的风险是数量级的差异。
4.3 我给实战营学员的推荐配置单
这部分写出来给大家抄作业,里面没有任何“唯一标准答案”,只是我目前跑下来比较稳的组合。
| 能力项 | 选取原则 | 说明 |
|---|---|---|
| 代码检索 | 优先选择支持仓库级语义索引的 | 提升跨文件改动的成功率 |
| 命令执行 | 必须做目录沙箱 | 不允许访问工作区之外的路径 |
| 测试反馈 | 关注“错误摘要”而非“完整日志” | 控制模型上下文消耗 |
| MCP Server | 按最小权限原则逐项开放 | 只读优先,写操作要人工审批 |
| 人工介入 | 固定检查点留人 | 自动跑没问题,提交前必须人工 REVIEW |
有个容易被忽略的细节是“所有 Agent 共享配置”还是“每个 Agent 独立配置”。初期图省事,所有 Agent 共用一套配置,结果架构 Agent 和代码 Agent 都调同一个数据库写接口,差点把演示环境的表结构改了。后来改成每个 Agent 根据职责加载不同工具集,架构 Agent 只有读取权限,代码 Agent 才能写临时文件,才真正安心。
5. 一次组件库迁移实验:用多智能体流水线替代单个大任务 Agent
5.1 原始任务的复杂度:为什么单 Agent 必然失败
理论说多了容易飘,讲一个我们实战营里真实跑过的多智能体项目,任务是把团队前端项目的旧组件库从legacy-ui迁移到v2-design-system的兼容层。听起来不复杂,但这个项目有几个特点:涉及页面文件超过 200 个,组件 API 变化点超过 40 处,期间不能破坏线上功能,而且代码风格必须与团队既有规范保持一致。
刚开始我们让一个单 Agent 直接处理这个任务,它启动之后先读了一堆设计文档,然后开始批量替换组件引用,跑了二十多分钟之后报错了。查日志发现问题出在任务范围太宽:前 50 个文件的替换还好,到第 80 个文件时它已经忘了前面总结过“名称变化映射表”,开始按自己的理解发明新写法,导致后续所有改动风格都不统一。这是一个典型的上下文饱和型失败。
而且单 Agent 必须顺序执行所有验证任务,改完一批文件之后要等它跑完测试、修复、再继续下一批。整个流程串行化,效率也很低。
5.2 重新设计:把一个人干的大活拆成一队人的活
后来我们把方案改成多智能体流水线。分工如下:
- 设计 Agent负责读取新旧组件映射表,产出高精度的“替换规则手册”,这个手册不以自然语言为主,而是以结构化映射表和边界情况清单为主。
- 映射 Agent负责扫描仓库里所有用到旧组件的文件,生成一个分组后的文件清单,确保不遗漏、不重复。
- 执行 Agent负责任务卡片中规定的文件批量修改,严格按映射规则处理,禁止自行“创新”。
- 验证 Agent负责运行类型检查、单元测试和视觉回归冒烟测试,把失败信息归类后反馈给执行 Agent。
- 调度 Agent作为总控,持有项目级上下文,处理各个 Agent 之间的异常升级和临时任务调整。
这套设计的核心不是“代码能自动写了”,而是“上下文被有效降维了”。执行 Agent 不再需要理解整个迁移目标,它只需要处理一张任务卡片:目标文件某某、替换规则第某章、验收命令是什么。每个 Agent 的工作记忆被压缩到很小的范围,反而更容易把事做对。
5.3 跑起来之后,质量反而来自于任务卡片的工程化
方案跑完后,最终结果还不错。实际执行过程中,我们不断在优化任务卡片的写法,最后沉淀出一个模板,这里分享给你。
一个有效的 Agent 任务卡片至少包含五个部分:
- 目标描述(不超过 50 字,必须说明“成功”的定义);
- 涉及路径(明确的文件或目录白名单);
- 可参考的历史案例(先展示一两个已经改完的文件,让 Agent 模仿风格);
- 禁止事项(例如“不能修改公共 API 的签名”“不能改动无关文件的格式”);
- 验收命令(能让 Agent 自我检查,比如
npm run typecheck)。
当时发现一个有意思的现象:多智能体系统里,流程规范化的价值甚至大于模型本身的聪明程度。任务卡片写得好,即使用普通模型执行,正确率也能接受;任务卡片写得含混,最强模型也会自由发挥到失控。所以别总想着换更强模型,先把你的“需求文档”写规范。
6. 多 Agent 一跑就崩?我的报错排查链路与上下文防爆经验
6.1 一种高频错误的拆解:Agent execution terminated due to error
训练中大量学员第一次跑多 Agent 都会遇到一个提示:某个 Agent 执行到一半,状态变成了 terminated due to error。很多人第一反应是“哪里写错了”,然后无从下手。这背后通常不是一种原因,而是几类问题之一。
最典型的是工具返回数据处理不当。比如 Agent 调用了一个文件查找工具,工具返回了不符合模型预期格式的内容,模型无法从中提取下一步信息,任务只能终止。其次是子 Agent 的非零退出码没有被上层捕获,调度 Agent 看到子任务失败就默认整体失败,而没有做重试或反馈机制。还有可能是上下文被截断,长任务跑太久,关键约束被挤出窗口,模型开始瞎猜。
你可以在本地模拟复现:给一个 Agent 挂一个故意返回错误格式 JSON 的工具,观察它是不是会突然“失智”。大多数情况下,模型不是不会解决这个任务,而是它拿到的信息彻底把它绕晕了。
6.2 一套可以复用的排查链路
我建议任何团队刚开始接触多 Agent 时,都建立一条固定的 Debug 路径,而不是每次靠直觉瞎试。
第一步:定位报错的 Agent 名称和所在环节。不要一上来就怀疑模型能力,先确认是哪一步断的。第二步:翻出该 Agent 的完整 trace 日志,看终止前最后一次工具调用的输入输出,八成问题出现在信息传递上。第三步:手动重放这次工具调用,确认工具本身没问题。第四步:把最后几个回合的对话上下文贴到一个新会话里,问另一个模型“此刻执行者缺了哪些核心信息”,通常会发现上下文里丢了任务约束或验收标准。第五步:修正流程设计后重跑,而不是只换一个更贵的模型。
这条链路帮我们解决了大半的终止类错误。其实多数情况下模型没错,是我们没有把 Agent 执行过程中应具备的信息与反馈闭环设计好。
6.3 上下文膨胀:日志越看越懵的根源
做多 Agent 项目大概率会遇到另一个问题:看着看着,Agent 开始说胡话。常见原因是 Agent 为了“谨慎”,把越来越多日志、上下文塞进了自己的视野,最后满窗口都是噪音,真正有效的任务约束反而被淹没。
我见过最夸张的一次,一个执行 Agent 在改一个文件时,因为反复失败,把每次终端输出全部堆到上下文中,累积了两万多 token 的无关日志。到后面它已经忘了自己是按哪个映射表在改文件,开始自己造规则,产出一堆完全不符合要求的代码。
应对办法有两个方向。一是限制单次工具输出的最大长度,终端输出超过 200 行就只保留首尾摘要。二是强制 Agent 阶段性“清空重来”,每个子任务完成后,只把“产物路径、结论摘要、未决事项”传递到下一个阶段,而不是把完整执行过程都传下去。这就像开会要写会议纪要,而不是把三小时录播全程给每个人看一遍。
6.4 可观测性还是要靠老办法:日志、追踪与检查点
多 Agent 程序出问题时最痛苦的是你不知道它在哪一步做了什么决定。后来我们借鉴分布式系统的老经验,给整个流程加了可观测性三件套:结构化日志、调用链追踪和检查点保存。
结构化日志要求每个 Agent 在关键节点输出固定格式的记录,包括当前任务 ID、输入摘要、输出摘要、耗时、退出码。调用链追踪则是记录“哪个调度 Agent 在什么时间派发了哪个任务给哪个执行 Agent”,出了问题能回溯到源头。检查点保存则表示每隔几个步骤就把当前进度写到磁盘,你可以随时恢复到某个历史节点,而不用每次从零开始。
这套体系加完之后,学员反馈排查时间少了一半以上。很多 Agent 项目跑着跑着就像一锅粥,其实不是模型不行,而是它们缺乏工程系统里最基本的追踪和恢复能力。Agent 工程化,重音在“工程化”三个字上。
7. 软件工程的新分工:从逐行评审到检查 Agent 的越权与验收
7.1 代码评审正在变成“目标评审”与“越权评审”
当 Agent 开始批量产出代码之后,原来逐行 review 的节奏会被彻底打乱。一个晚上量级的改动量,靠人逐行检查不现实;但不看又不敢合入。实际带训练营时,我发现高效的评审方式已经变成两个新问题。
第一个问题:Agent 有没有偏离任务目标。先看它这次改动的范围是不是任务卡片要求的范围,有没有顺手“修复”无关代码的问题。越权修改是 Agent 最常见也最危险的毛病,它可能在你没注意时把一个公共工具函数的逻辑改了,理由仅仅是“它觉得原实现不够优雅”。第二个问题:验收标准是否真的被满足。人工 review 时不要只读代码逻辑,要让 Agent 把它的验证命令输出都附上:类型检查、相关单测、性能影响评估,都过了再讨论代码质量风格。
7.2 任务拆解能力正在成为新的核心工程能力
软件工程多年来的核心命题之一是控制复杂度,Agent 时代这项能力不仅没有消失,反而权重更高了。过去优秀程序员的核心竞争力可能体现在“一个人能 Hold 住多复杂的模块”,今天 AI 编程普及后,越来越体现在“一个人能不能把一个大任务拆成边界清晰、验收明确、人机都可执行的小任务”。
这不是空话。在我们团队里,同样一个 200 文件规模的迁移,有人指挥多 Agent 运行得井井有条,有人则频繁遇到 Agent 冲突和返工。差别几乎不在代码能力上,而在于拆分出来的任务之间是否正交、上下文是否隔离、验收命令是否可执行、异常升级机制是否完善。
AI 只会让“会拆解、会定义验收标准”的人产出越来越高,也会让“只会执行、只把 AI 当搜索引擎用”的人变得焦虑。想清楚这一点,比争论哪个模型更强有用得多。
7.3 在一个分支上练兵,在合入前设防
多 Agent 写代码是有风险的,所以推进节奏也很重要。我们团队现在的做法是给 Agent 开独立分支或者独立工作区,AI 在分支里折腾,跑完测试后通过 Merge Request 提交。人在合入前看改动概览、看 Agent 的自我总结、抽查几个风险点,确认没有越权后再合入。
这套流程看似比原来多了一步,但它把 Agent 的“创造力”圈在了安全网里。你可以放心让 Agent 在分支上反复试验、试错、并行跑多个方案,而不会干扰主干的稳定性。合入前再有人把关,既保效率又保安全。
把 AI 当真正的团队成员对待,它就需要正规团队该有的研发流程意识。给它开小灶可以,但不能让它直接改主干。
8. 给和我一样边踩坑边往前走的人
如果让我用一个词总结这一轮 Agent 工程化实战下来的感受,应该是“祛魅”。代码补全让人以为 AI 写代码很简单,Agent 工程化则让人重新看到软件工程本身的复杂。它没有消灭需求分析、任务拆分、代码评审、质量保障,只是把工程师的精力从逐行打字挪到了更高层的定义和判断上。
在实战营的收尾阶段,我给每个成员留了一个作业:选一个自己最常写的重复性任务,把它从“写一个函数”改造成“定义给 Agent 跑的任务卡片”。那位最初问“补全和 Agent 有啥区别”的同学,后来反馈说作业做完最大的收获不是跑通了一个多智能体流水线,而是他发现,当自己能够把验收标准写清楚、把边界约束说明白时,哪怕不用 AI,他手写的代码质量也明显提升了。
这大概就是 Agent 工程化最有价值的一部分:它在训练 AI,也在重新训练我们这些写软件的人。