☰
从写代码到编排Agent:工程师角色重构与实战经验
2026/10/19 11:24:41 网站建设 项目流程

最近几个月,我明显感觉到自己的工作方式在发生一种不太好描述、但确实存在的位移。以前一个功能排下来,我会先在脑子里过一遍数据结构、接口、循环和边界条件,然后打开编辑器一行一行敲。现在打开最多的反而是对话窗口,工作流逐渐变成:拆需求、写任务说明、给Agent下达指令、看它产出、改它产出的问题、再下达下一轮指令。我慢慢从一个“写代码的人”变成了一个“编排Agent的人”。

这篇文章想记录的就是这种转变本身。我不会去争论哪一代工具更好,也不会站在某个立场上唱衰或者吹捧。我想把这些个月里真实发生的改变、踩过的坑、还有我自己重新梳理过一遍的能力清单摊开来讲。如果你也在经历类似的角色变化,或者你正在犹豫要不要把一部分编码工作交给AI智能体,那这篇文章大概率对你有参考价值。

1. 角色转变不是口号:三个月里我手上的活变成了什么样

1.1 一张典型工作清单的对比

为了让自己能看清变化,我翻了一下三个月前和现在的任务记录。三个月前,我一天的工作里占比最大的是“写代码”:新功能的接口实现、老模块的Bug修复、单元测试补充、联调时的临时调试脚本。每一样都得亲手打开编辑器,盯着语法高亮,一个字符一个字符地敲。

现在的典型工作日变成了另外一副样子:上午是拆需求和写任务描述——把产品给的模糊想法翻译成Agent能理解、能执行、能验收的任务说明;下午是审查Agent的产出,跑测试、看日志、检查它做的方案有没有偏离既定架构;晚上可能还要处理几轮Agent自己改不明白的疑难杂症,把上下文重新整理一遍,换一种方式再让它试一次。

对比之后最直观的感受是:编码时间确实少了,但坐在椅子上的时间一点没少,脑力消耗甚至更大。以前写代码累的是手指和局部注意力,现在累的是全局判断力——我需要持续盯着一个我自己没有逐行写过的系统,去判断它有没有在正确的轨道上。

1.2 什么活还在亲手写,什么活必须交给Agent

我给自己画了一条比较粗的分界线:探索性的、一次性的、上下文极窄的代码,尽量交给Agent;牵涉核心业务逻辑、需要长期维护、或者与资金/权限/数据安全强相关的代码,我会亲手写或者至少亲手审到每一行。

举个例子。一个内部报表页面的查询条件组合筛选,这段逻辑边界清楚、改动范围可控,我会写一段很详细的任务说明让Agent去实现。但如果是一个支付回调的状态机迁移逻辑,哪怕只是加一个状态分支,我也倾向于自己动手,因为这里的历史包袱和隐式约束太多了,Agent从代码里读到的东西远没有我脑子里积攒的经验丰富。

这条分界线不是一成不变的。随着Agent的上下文能力变强、我写任务说明的水平提高,这条线一直在往“交给Agent”的方向移动。但它在短期内不会消失——这不是能力问题,是责任边界问题。

1.3 一个意外的发现:编码时间减少不代表工作量减少

以前我总觉得“不写代码就等于清闲”,这三个月下来我发现这个等式完全不成立。写代码减少之后,空出来的时间立刻被三件事填满:更充分地理解需求背景、更细致地撰写任务描述、更严格地审查Agent产出。

尤其是第一件事。过去写代码时可以带着模糊的需求边写边摸索,代码本身会逼你把细节想清楚。现在做编排时,如果我在任务说明里没有想清楚就下达指令,Agent会非常高效地做出一版同样模糊甚至更跑偏的实现。也就是说,之前模糊需求带来的成本被延迟到了“设计实现”阶段,现在这个成本被前置到了“需求理解”阶段。总成本并没有消失,只是转移了位置。

这个发现对我来说很重要。它让我明白,角色重构不是让工程师变懒,而是让工程师的工作重点从“怎么实现”转移到“实现什么、为什么这么实现、怎么验证实现对了”。

2. 同一个小功能的两种做法:从手写实现到任务编排

2.1 老做法:打开编辑器,逐行实现

我们内部有一个给运营同学用的数据订正工具,前阵子需要在里面加一个“批量导入并预览”的功能。按以前的思路,我会先建一个DTO,写一个文件解析的Service,再加一个预览接口,然后写前端页面的表格和上传组件,最后联调、补测试。

这个过程大概是:列出任务清单、挨个打开文件、接收参数、写逻辑、处理异常、提交。每一步都不算难,但步骤非常多,而且每一步之间没有本质区别——它们都在消耗同样类型的注意力。

如果当时让我预估时间,我会说一天半。实际上遇到Excel格式判断、空行处理、编码识别这些琐碎问题时,往往要拖到两天。这类工作最烦的地方在于:它没有真正的智力难度,但你必须全程在场。

2.2 新做法:写任务说明,编排Agent执行

同样的需求放到现在,我处理的方式完全变了。我会先花半小时把需求重新描述一遍,不是写给产品看,而是写给Agent看:

在现有订正工具中新增批量导入预览功能。输入为.xlsx文件,需解析sheet中指定列的用户ID和订正金额。解析结果返回前20条预览数据及总条数汇总。约束条件:只读数据库连接,不写入任何变更;文件大小限制10MB;解析需兼容标准Excel格式,不做复杂样式支持;输出字段与原导出模板保持一致。

然后我会把这段描述、原型截图、相关实体类的定义一并放进上下文,让Agent自己决定要在哪个模块加文件、用哪个现成工具类、需不需要新增依赖。它给出的实现方案我做成小步验收:先完成解析模块并输出样例,再接入预览接口,最后调整前端。

整个过程我很少打开编辑器,更多是在对话窗口里追问:“这个解析对空行怎么处理”“如果某一行的ID格式非法怎么办”“你用的这个读取方式会不会爆内存”。每一轮追问之后,Agent会自己改代码,我再跑测试验证。

2.3 对比下来,真正省掉的是什么

这个功能最终花的时间大约是一天,和以前差不太多,但结构完全不一样。以前的一天是反复上下文切换消耗掉的,写两行业务代码、切到前端调样式、再切回来处理一个边界条件,大脑一直在切换栈帧。

现在的一天是:集中精力写清楚一段任务描述,然后长时间坐在一个对话上下文里,把Agent的产出当成一个远程同事的代码来评审。真正的节省不是总时长,而是低价值切换的消失。我不需要记住几十个文件的路径和十几个函数签名,只需要理解模块之间的依赖关系,并且能在Agent跑偏的时候及时把它拉回来。

2.4 时间花去哪了:从写代码到写“正确的任务描述”

有一点必须坦白:第一次写任务描述的时候,我写得很痛苦。因为平时跟人对话我们可以依赖共同默认——同事知道我说的“订正工具”是哪个项目,知道我默认不做权限细分,知道历史遗留的某些坑。但Agent没有这些默认。

所以“写正确的任务描述”变成了一项硬技能。它要求我把那些平时脑内自动补全的隐式前提全部显式化:边界条件、性能要求、代码风格、依赖约束、验收标准。一开始我觉得麻烦,后来意识到这正是过去代码评审里最常出现问题的环节——很多Bug不是因为逻辑写错,而是因为需求阶段的理解偏差没有被发现。

现在Agent帮我把这些偏差提前暴露在任务描述阶段,反而倒逼我对所做的每个功能都形成清晰、可验收的定义。从这个角度说,角色重构让我变成了一个更较真的人。

3. 编排Agent需要练的五项基本功

3.1 任务拆解:把需求切成Agent能一口吃掉的大小

我踩过最大的坑就是把一个整体系统级的任务直接丢给Agent。比如“把登录模块重构一下”,这种描述听起来像是一个合理的指令,但实际上等于把一个需要数周工期的项目塞进一个对话里。Agent会怎么做?它会非常有自信地给出一个极其粗糙的框架,看似合理,实际上到处是坑。

现在我遵循一个很朴素的原则:每个任务单元最好能在一个小时内完成,能够独立验证结果,并且不依赖尚未确定的后续决策。拆解粒度比想象的细得多。登录模块重构可以拆成:先抽取会话管理接口、再调整Token过期策略、再改登录日志埋点、再改前端的自动续期逻辑。每个小任务单独描述、单独验收、单独迭代。

这个拆解过程本身就在消耗设计能力,但它产生的价值是可以复用的——如果这次Agent做得不好,我可以换一种描述再试,而不用整个重来。

3.2 描述精确化:上下文、约束、验收标准一次说清

写任务描述和写需求文档不是一回事。需求文档面向的是人,搜索引擎式的阅读习惯让人能在信息缺失时自己去问;任务描述面向的是Agent,它没有“我不确定所以停下来问”的天然机制。

我发明了一个自己的四段式结构:背景信息、目标定义、约束列表、验收标准。背景信息告诉Agent这件事为什么存在;目标定义明确输出什么;约束列表把不能做的事、不能用技术、不能影响的模块写死;验收标准则是我后面用来判断它完成任务的具体指标。

四段里最容易被忽略的是约束列表。举个例子,我上次让Agent优化一个列表接口的查询速度,目标定义写得很清楚,背景也给足了,但忘了说“不要改动现有查询参数兼容性”。结果它为了走索引,直接改了入参结构,把好好的兼容性给破坏了。这完全是我的责任,不是Agent的问题。

3.3 上下文管理:每次对话喂什么、不喂什么

Agent的记忆窗口是有限的,而且它不像人那样会自动筛重点。你把一个十年前的废弃代码文件丢进上下文里,它照样会认真地把它当成参考资料。上下文管理因此变成一个类似“给新来的实习生做交接说明”的活。

我自己的经验是三层递进:全局性的架构文档放最前面,让Agent建立基本盘认知;当前任务相关的最小代码片段放中间,尽量贴出签名和调用关系而不是整个文件;最后才是任务描述本身。如果上下文太长,我会主动做一次“提纯”——把上一轮对话里Agent已经确认过的结论压缩成一个简短摘要,再开始下一轮。

如果Agent开始出现前后矛盾、逻辑混乱,大概率是上下文里塞了太多无关内容。这时候最好的处理不是继续对话,而是新建一个上下文,只把关键信息带过去,重新开一轮。清空重来往往比在已污染的环境里纠缠更有效率。

3.4 结果审查:不信任输出,但也不凭感觉否定

作为编排者,审查Agent产出是这个角色的核心工作。但我发现一个很有趣的现象:初学者要么完全不信任Agent的每行输出,逐字逐句地看;要么过度信任,看到测试通过就觉得万事大吉。这两种都很危险。

现在我采取的方式是“分层抽查”:先看整体方案是否符合任务约束,再看核心逻辑是否有明显漏洞,最后挑几个边界场景在脑子里跑一遍。我不会逐行阅读Agent生成的全部代码,那样我就又变成了个写代码的人。但我也不会只看测试断言通过就放手,因为Agent写的测试往往和代码共享同样的盲区,它会在自己没考虑到的地方同样没考虑到。

线上如果出了问题,我的第一反应也不是去责怪Agent,而是先复盘自己在任务描述里有没有把场景说清楚。在多数情况下,最终会发现问题都能追溯到需求阶段某个没说死的地方。

3.5 失败复盘:Agent翻车时的判断路径

Agent翻车这事几乎每周都会遇到几次。我的复盘路径是固定的一套问题。

先问这是不是一个“理解错了”的问题——描述里有,它没读到,那就是上下文管理的问题;再问这是不是一个“判断错了”的问题——信息都有,它选了一个看似合理但结合系统上下文不合理的方案,那可能是任务拆分时给的背景不够;最后才问这是不是一个“能力不够”的问题——它真的不知道怎么实现某个算法或某个系统调用。

大部分时候答案都落在前两个。这就意味着翻车其实是反馈信号,告诉我是我的编排能力哪里还需补强。当Agent做错一件事,我不会简单换一句提示词去重试,我会把这次翻车的根源找出来,然后调整任务描述的结构或者上下文的构成。这个闭环跑久了,Agent的产出质量会以肉眼可见的速度上升,因为我喂给它的“工作环境”越来越接近一个优秀工程师的工作台。

4. 踩坑实录:编排Agent时容易翻车的几个真实场景

4.1 场景一:任务描述太宏大,Agent“勇敢”地自作主张

有一回我想让Agent帮忙整理一套内部API的鉴权逻辑,看哪些接口漏了权限校验。这是牵涉全局的审计类工作,我之前拆过好几次都没拆好,因为涉及的模块实在太多。最后我想偷个懒,直接写了一句“全面梳理所有API并标记缺失鉴权项”。

结果Agent非常有条理地生成了一张巨大的表格,里面标注了几百个接口的鉴权状况,还贴心地给每个接口写了建议。但其实它把好几个内部回调接口误判成了对外接口,把不需要登录的静态资源接口标成了高危。整个产出看起来详实,实际上需要我重新做一遍审计才能判断对不对,浪费的时间比自己扫一遍还多。

教训是:越宏大的任务,越不能一锅端。Agent适合执行边界清楚的任务,不适合当项目经理。“审计全部API”这种任务,需要我自己先根据路由分组、安全等级拆成十几个小批次,每批单独设置约束条件,单独验收。

4.2 场景二:上下文污染导致的老问题复现

有段时间我为了省事,会让Agent在同一个对话上下文里连着做五六个相关任务。一开始还挺顺,到后来就出现一个很诡异的现象:第四个任务的结果里混进了第一、第二个任务的旧方案思路,甚至出现了已经在第三个任务里被废弃的接口。

原因非常简单——对话是个有记忆的空间,Agent会倾向于利用历史出现过的元素来回答新问题,即使那些元素已经失效。这就像一个长期共事的同事误以为你还记得上周废弃的方案一样,只不过同事会跟你确认,Agent不会。

从那以后我养成一个习惯:一个持续较长的多阶段任务,每完成一个阶段就主动做一次上下文清理。把已经确认的结果提炼成简短摘要,把废弃的方案明确标记“不可再用”,再把新任务目标单独段落般放进去。如果发现Agent开始引用不该出现的旧内容,立即停止,把这个阶段的决策固化后重新开一个对话。

4.3 场景三:在多轮迭代中丢失约束

还有一个很隐蔽的坑:约束条件在迭代过程中慢慢失效。第一次任务描述里我写了“不允许引进新的第三方依赖,所有解析逻辑优先使用项目已有的工具类”,Agent按这个要求做得很好。但进入后续迭代时,我为了赶进度,在某次任务描述里不小心写了一句“这个功能用XX库来实现会很方便”。

这句话一出来,前面的约束就崩了。Agent会默认新指令覆盖旧约束,立刻把依赖引进来,然后在后续任务里继续沿用这个新依赖。一次无心的口头提法,就把最初的架构约束给覆盖掉了。

现在我会把约束写得更死。凡是硬性约束,我会在每一轮对话开头重述一遍,或者放进一个固定的“约束栏”里,不允许它逸散。如果中途必须要放宽某个约束,我会主动说明这是对旧约束的明确修改,否则旧约束仍然生效。

4.4 场景四:审查接口太晚,返工成本放大

另一个让我付出过代价的教训是:审查介入时机太晚。以前我会等Agent把完整方案都做完,再把代码拉下来跑一遍测试。如果整体方案方向错了,这一轮产出基本全废。

后来改成“分批验收、小步推进”。Agent完成第一阶段任务后,我立刻检查这个阶段的产出,确认方向没错,再让它向第二阶段推进。这多花了一些来回沟通的成本,但几乎不会出现“辛苦做了半天,结果地基偏了”的极端情况。

用一句话总结就是:编排Agent和带新人很像,你要在节点上检查,而不是等到最终交付时再不满意。

5. 团队协作方式正在跟着变:信息差变成了主要瓶颈

5.1 交付物从代码变成了“任务包”

角色重构的影响不只在个人工作台上,还渗透到了团队协作。以前我说“某某功能做完了”,大家默认的是代码已经合入、测试已经通过。现在我会习惯性把整个“任务包”交付出来:任务描述、Agent产出的方案摘要、我自己审查时发现并修正的问题记录,以及针对这次实现的潜在风险点。

这个变化刚开始让同事不适应,觉得我交付的东西变“啰嗦”了。但很快大家就发现,这个“任务包”比一段代码更有信息量。它让人知道这个功能是在什么约束下做出来的、哪些边界情况被考虑过、哪些地方是Agent自己想的而我没来得及完全推敲。

团队里甚至开始有人直接拿我的任务描述当需求文档用,因为他们发现任务描述比原始需求更接近可执行的精细规格。

5.2 代码评审变了:从看实现到看意图

我做代码评审的方式也变了。以前我会看每一段新代码的逻辑是否正确、命名是否合理、有没有明显的性能问题。现在我更多会在评审时问一个问题:这段实现在多大程度上忠实于任务描述的意图。

因为Agent生成的代码往往会引入一些我没说但看起来“挺合理”的额外处理。比如我在描述里只说“获取用户信息”,它可能自动加了缓存、加了重试、加了日志。这些看起来都是好事,但每一条额外处理都意味着额外的维护成本和潜在的副作用。

所以在评审时我现在的判断标准是“克制的实现”:严格执行任务目标,不多不少,不做自作聪明的过度设计。如果Agent做多了,我会让它把多余的部分删掉,而不是留着。

5.3 需求文档的质量突然变得极其重要

过去我们团队的需求文档经常是“够用就行”——核心逻辑说清楚,细节依赖口头补充。这种风格在人的协作里能跑得通,因为同事会追问,会凭经验脑补。但当Agent进入工作流后,这种模糊空间变成了最大的风险来源。

以前需求里的“用户可能批量选择多行”这种模糊描述,后端同事会自己判断要不要做成批量接口。现在如果任务描述不写清楚,Agent会做出一版只支持单选的前端加一版批量接口的后端,两边都对,但拼不到一起。

为此我干脆把需求评审的标准往上调了一档:任何Agent将要执行的任务,它的输入输出、边界行为、错误处理方式,必须在任务描述里有明确答案,不允许留白。这相当于把以前在代码评审阶段才会暴露的问题,提前到了需求评审阶段去解决。表面上看流程变重了,实际上返工率降了很多。

6. 工程师能力模型的重估:哪些技能在升值,哪些在被替代

6.1 升值的能力:判断力、语境理解、系统思维

如果你问我,在编排Agent的时代,什么能力最重要?我的答案不是提示词技巧,而是判断力。提示词技巧会在很长一段时间里被工具自动优化掉,但判断力不会。

判断力表现在很多地方:判断一个任务适合交给Agent还是亲手做;判断Agent给出的方案是否真正契合当前系统;判断某次翻车是描述问题、上下文问题还是能力问题;判断哪些约束必须坚持、哪些约束可以放宽。这些东西没有任何提示词框架能替代,它来源于对业务、技术栈、代码历史和团队目标的整体理解。

其次是语境理解能力。我说的不是理解Agent的语境,而是理解业务需求背后的真实意图。以前这个能力体现在你能否跟产品经理有效沟通;现在它体现在你能否把真实意图翻译成Agent能执行的精确指令。翻译得不好,Agent就会用最简单的字面意思执行,最后做出一个“需求里写了但用户不想要”的东西。

系统思维也在升值。写代码时可以盯着局部文件,但编排Agent必须眼观全局——这个模块改了会影响哪个依赖、新增一个依赖会带来什么维护成本、这条数据链路中间哪个环节容易出边界问题。越是能站在全局做判断的工程师,越是能把Agent编排得高效且安全。

6.2 贬值的能力:语法细节、快捷键熟练度、样板代码手写速度

反面清单也很明显。我发现自己过去引以为傲的一些能力正在快速贬值。比如对某个框架API的细节记忆——以前这是本事,现在我只需要知道“这里应该用什么功能”,Agent会补齐具体的函数签名和用法。

还有写样板代码的手速。以前写CRUD接口、写配置类、写常规测试,谁敲得快谁显得厉害。现在这些几乎成了Agent的输出默认值,手速再快也没有意义。快捷键的熟练度、调试器的高阶用法也一样,在纯手写场景里它们是高效利器,在编排场景里它们只是辅助工具而不是核心竞争力。

我不是说这些能力完全没有用了,而是说它们从“立身之本”降级成了“基础素养”。如果现在的工程师还在把时间花在背API、练快捷键、比谁CRUD写得快,那确实要警惕了。

6.3 给正在转型的工程师的几个具体建议

如果你正在经历或者准备经历这种角色重构,我个人的体会大概可以浓缩成几条建议。

第一,不要抗拒“写任务描述”这件看起来不像技术工作的事。我一度觉得这像是在写文档、做管理,不像工程师。但经历了这几个月后发现,这份工作需要的技术深度比写代码只多不少——它要求你在动手之前就已经想清楚约束、边界、验收标准,这本身就是设计能力。

第二,刻意练习“任务拆解”。哪怕你现在的团队还没规模化使用Agent,你也可以把每个需求先在纸上拆成原子任务,拆完后问自己:这个任务交给一个聪明但缺乏背景知识的新同事,他能独立完成吗?拆到“能”为止。

第三,保留一个“亲自动手”的后花园。现在我还是会定期找一些探索性的、新框架的实验项目亲手写代码,不是为了刷手速,而是为了保持对代码细节的敏感度。如果完全脱离手写,你会慢慢丧失对Agent产物的品味,这是很危险的。

第四,多复盘翻车案例。每次Agent做砸了,都是一次免费的编排课。别急着骂工具,也别急着对工具失望,先从描述、上下文、约束三个维度去找原因。这套复盘做久了,你的编排水平会像滚雪球一样变大。

从我个人的体感来看,工程师的“角色重构”不是什么遥远的趋势,它正在以我们这一波人作为样本真实地发生着。那个整天埋头写代码的工程师形象还会存在很长时间,但它会越来越像手工艺人,而更多人会走向调配AI劳动力这条路。这条路好不好走?说不上轻松,但它确实是一条更靠近问题本质的路——代码从来只是手段,解决问题才是目的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询