资讯详情

资讯详情

从古法编程到Agent协同:一场开发范式转移的实践记录

1. 一场让我彻底改掉工作习惯的小项目2026年刚开年我接手了一个内部报表系统的重构。按多年养成的习惯我第一反应是打开IDE梳理数据模型准备从DAO层一路写到接口层。但那天我坐下来之后干的第一件事却是打开Agent编排面板把需求文档拆成十几个任务卡分配给不同的执行Agent然后看着它们各自拉取代码、跑测试、互相评审最后在一个隔离分支上汇合。我一整天手写的代码不到五十行大部分时间在做需求澄清、任务拆解和合入前的代码审查。这个场景放在三年前我自己都不敢信。那时候我写代码的姿态和现在完全不同——全程手敲自己调试自己修bug自己管分支合并。我管那套叫古法编程没有贬义只是想说那是一种完整的手工作坊式工作流。而现在我更多是在做Agent协同人类定目标和边界AI Agent负责执行、验证、迭代多个Agent之间还能互相提意见。身边不少朋友问我这到底是真能干活还是又一个热闹的玩具这篇文章就是我的回答。我会从古法编程的工作模式讲起把Agent协同的技术逻辑、实操流程、常见翻车现场全部摊开给想转型但还在观望的开发者一个真实的参考坐标。2. 古法编程不只是写代码它是一整套心智模式2.1 手工时代的三件事写、查、改古法编程的本质是人类用双手完成从想法到产出的全链路。写代码只占其中一部分更多精力消耗在查和改上。查是查文档、查接口、查历史代码改是改bug、改设计、改需求引发的连锁调整。这三件事循环往复构成了一个开发者的日常。这套心智模式有几个根深蒂固的特征。首先是一切尽在掌握——每一步逻辑都要自己确认过才踏实。其次是线性推进——从入口函数一路往下写遇到问题停下来解决再继续。最后是上下文全靠脑子记——你同时要记住当前函数的目的、调用方的约定、异常处理策略、还有项目里其他模块对你的依赖。这种心智负担其实是古法编程最大的隐性成本。我见过很多资深工程师写代码本身很快但切换上下文、回忆设计约束、追查跨模块影响时消耗的时间往往是写代码的好几倍。当时的工具也都围绕这套模式设计。IDE的智能提示、断点调试、单元测试框架本质上是让人类更好地亲手写代码。它们再强大也只是放大了一个人的手速和记忆力没有改变生产关系的核心产出物从哪来。2.2 AI辅助的第一阶段人写机器补瓶颈还在人真正让很多人产生AI要改变编程这个感觉的是AI补全和对话式助手的出现。代码补全工具能做到按 Tab 生成整段函数对话助手能回答这个报错什么意思还能根据描述生成代码片段。我用了很长一段时间的这类工具确实香写样板代码、查陌生API的速度提升了不止一档。但用过一阵之后我发现一个尴尬的事实这类工具本质上还是人写机器补。核心决策——要不要这个函数、参数怎么设计、模块间怎么交互——仍然需要人逐点决定。AI生成的代码只是一块块更聪明的积木搭积木的人没变搭积木的方式没变。我该写的bug还是写该看的文档还是看该查的上下文还是查。效率提升有但天花板很明显只要每一步都需要人类确认人类的注意力和上下文切换就成了最大瓶颈。这是我理解范式转移的关键分界点。古法编程和第一阶段AI辅助都是人作为执行主体而Agent协同不是让人更快地写代码而是让人从执行者变成定义者和审查者。这不再是一个效率工具带来的量变而是角色分工发生的质变。3. Agent协同的底层逻辑从工具到协作者3.1 单个Agent能做什么不能做什么要理解Agent协同先得搞清楚Agent和聊天机器人的区别。普通聊天机器人只会生成文本Agent则被赋予了行动能力——它能调用工具、读写文件、执行命令、查看运行结果然后根据结果调整下一步动作。它不是一个只动嘴的顾问而是一个手上真的拿着扳手的工人。拿我自己常用的开源Agent框架来说一个基础Agent会经历这样的循环接收任务描述 → 读取相关代码文件 → 生成修改方案 → 执行文件修改 → 运行测试命令 → 读取测试输出 → 如果失败就分析日志、调整方案 → 再次尝试直到通过或达到最大尝试次数。这个循环里没有人类逐行介入Agent自己感知、决策、行动、验证。但Agent远非万能我总结出它最明显的三块短板。第一目标必须足够具体它无法处理模糊的把系统弄好一点。第二上下文窗口有限面对一个大型代码库它不可能装下所有东西需要有人帮它筛选和聚焦。第三会一本正经地犯错——有时候它跑完测试说全绿但代码逻辑其实和需求不符。这三块短板决定了Agent协同里人的位置人负责把模糊变清晰负责喂上下文负责最终把关。3.2 多Agent分工规划、执行、审查的三角结构单个Agent已经能跑通改代码→跑测试→再改的小循环但真实项目不是单文件修改而是跨模块、跨服务的复杂工程。这时候单Agent干活的可靠性会快速下降——它既要理解全局设计又要动手写实现还要自检很容易在中间环节丢掉约束或者陷入局部优化忽略整体结构。多Agent协同解决的就是这个问题。我目前用得比较顺手的角色结构是三足鼎立规划Agent负责拆解需求、生成任务清单、明确模块边界和接口约定。它不写实现代码只产出设计文档和任务卡。执行Agent按任务卡逐个实现功能。可以有多个并行处理互不依赖的模块。审查Agent负责检查执行Agent产出的代码对照需求清单逐条验证检查一致性、异常处理、测试覆盖发现问题就返回给对应执行Agent修改。这个结构熟悉吗其实就是把人类团队里的架构师开发代码评审搬到了Agent世界。它有效的原因不是分工本身多高级而是引入了对抗性视角——写代码的人和审代码的人分开才能发现单视角的盲区。这跟人类开发里结对编程、Code Review的价值是同一个逻辑。3.3 一次完整任务的Agent生命周期在实际运行中一次标准的多Agent任务大致会走六个阶段规划阶段规划Agent读取需求文档输出任务分解清单。任务之间要有明确的依赖关系描述比如订单模块依赖用户模块提供的鉴权接口。上下文准备阶段每个执行Agent拿到上下文包包含相关文件路径、接口定义、约束清单、可参考的已有实现。这个阶段直接决定后面的成功率。执行阶段执行Agent按上下文包写代码自己跑测试自己迭代。交叉审查阶段审查Agent逐条核对需求与实现检查代码风格、边界条件、潜在性能问题输出审查意见。返工阶段执行Agent根据审查意见修改然后再次提交循环直到审查通过。合入阶段人工确认通过后合并到主干分支。这个生命周期听起来顺畅实际跑起来问题不少。我在后续章节会详细讲翻车现场但有一点可以提前说这六个阶段里最容易被低估的是第三步之前的上下文准备——如果这一步偷懒后面五个阶段都会加倍返工。4. 实操记录一次跨模块功能开发的完整Agent协同流程4.1 前置工作需求拆解是Agent协同的命根子我从一个真实项目讲起。某次任务是给系统加一个批量导入外部数据并自动校验的功能涉及数据模型、导入引擎、校验规则、前端结果展示四个模块。放在古法编程里我肯定自己从数据库表开始写但在Agent工作流里我做的第一件事是写一份机器可读的需求说明书。这份说明书不是给产品看的那种PRD而是给规划Agent的任务输入。我会明确写清楚以下几项功能目标一句话说清要达成什么例如支持用户上传CSV文件按配置规则校验后批量入库。边界约束不支持什么、不能动什么例如不修改已有用户表结构校验失败的数据不落库整体事务回滚。技术栈约束指定语言、框架、存储、缓存等。验收标准可验证的条件列表例如5000行数据导入耗时不超过15秒非法行数大于0时整批不入库。写完这个才把输入丢给规划Agent做任务拆分。我一开始也犯过直接丢一句帮我实现导入功能的错结果完全失控——那个Agent自己脑补了一整套与现有架构冲突的设计我花了两倍时间收拾残局。后来我悟了给Agent的输入越模糊输出的意外就越多。这不是Agent笨而是你作为定义者的职责没尽到。4.2 执行环节上下文包和提示词模板的实际写法规划Agent输出任务清单后我不会直接让执行Agent开工而是要构造每个任务的上下文包。这是我从多次失败里总结出来的核心操作。一个完整的上下文包包含四块内容相关代码路径明确列出现有模块的目录和关键文件位置避免Agent满世界乱翻。接口与数据结构约定把要用到的函数签名、数据模型定义粘贴出来防止Agent自己发明类型。约束与规范项目里已有的编码规范、错误处理约定、命名习惯。示例代码贴一小段同类功能的已有实现让Agent模仿风格而不是自由发挥。下面是我一直在用、效果比较稳定的任务提示词模板可以直接抄任务实现[功能名称]满足以下需求 1. [需求点1尽量细化] 2. [需求点2尽量细化] 3. [需求点3尽量细化] 技术约束 - 使用[语言/框架]遵循[项目约定] - 不得修改[边界文件/模块] - 错误处理遵循[统一策略] 上下文 - 相关文件[路径列表] - 关键接口[函数签名和数据模型] - 参考实现[示例代码路径或片段] 验收条件 - [可验证条件1] - [可验证条件2] 请先阅读上下文文件制定简要实现方案确认方案后再开始编码。编码后请自行运行[测试命令]验证并报告结果。这个模板的关键在最后两行。先制定方案再编码能逼着Agent先思考后动手减少直接改错方向的情况自行运行验证则把Agent从代码生成器变成能自我检验的工程单元。我把它用在大多数任务上后一次通过率提升非常明显。4.3 审查环节哪些合入点必须人工把关即使有审查Agent我也保留了人工合入的最终控制权。有些场景我建议任何团队都不要完全放手数据库迁移Agent对表结构的调整可能影响线上数据这类变更必须人工Review。安全敏感逻辑鉴权、权限校验、支付相关。Agent可能会漏掉权限边界默认所有用户可访问。对外接口变更一旦改接口协议调用方全部受影响Agent很难感知全局影响面。我给自己定了一个审查检查清单分享给大家需求核对逐条对照任务卡确认每项都有代码落点。边界检查空值、超长输入、并发调用、异常路径是否处理。兼容性检查老数据、旧版本调用方、历史行为是否被破坏。测试检查新增代码的测试是否真的覆盖了核心逻辑还是只写了空壳断言。风格检查命名、分层、依赖方向是否符合项目约定。这些审查项我一开始想让审查Agent全包后来发现它擅长逐条对照需求做逻辑检查但在经验性判断比如这条SQL在数据量翻倍后会退化这类问题上还是不行。所以我把工作流设成两层审查Agent做第一遍系统性检查我做第二遍针对性能和安全的抽查。人机各司其职效率和安全都保住了。5. 这轮范式转移背后的几个技术关键点5.1 上下文工程喂什么比怎么问更重要范式转移不只是工作流的外壳变化底层的技术重心也跟着换了。最明显的一点是Prompt Engineering的提法正在被Context Engineering取代。什么意思就是怎么把话说漂亮的重要程度已经让位于怎么把正确的信息放进Agent的视野范围。Agent的能力上限很大程度上取决于它能看到的上下文。一个拿到了正确上下文包的Agent和一个什么都没拿到、全靠自己瞎猜的Agent产出的差别是划时代的。我做过对照组测试同样一个模块改造任务给完整上下文包的Agent一次通过率超过七成不给上下文的Agent第一轮产出基本只能当草稿要经过三轮以上返工才能用。成本差距是三倍以上。上下文工程的具体实践就是我上一节说的上下文包。它的核心不是把整个代码库都塞给Agent而是做减法——在正确的位置放上正确的信息。放多了模型会在无关信息里迷失放少了它就开始编造。精确制导比火力覆盖更重要。5.2 结构化输出与约束注入让Agent按协议办事第二个技术关键点是结构化输出。古法编程时函数要按约定的签名返回Agent协同里也一样只不过这个约定要显式地注入到Agent的任务描述里。你不能只说检查一下这个模块的问题你要说请以JSON格式输出检查结果字段包括问题描述、影响范围、严重程度、修复建议。我在实际工作中发现让Agent以结构化格式输出效果远好于自由文本。原因是自由文本容易让Agent在表述里自我合理化——把不确定的地方说得模模糊糊而结构化格式逼迫它给每个问题明确结论模糊地带立刻暴露。另一个作用是方便下游自动化处理审查Agent的输出如果是结构化JSON就能被程序直接解析自动汇入缺陷管理表。我在任务卡里自创了输出协议这个概念就是约定每个Agent返回什么格式、包含哪些字段、达到什么标准算完成。这相当于把公司里接口契约的思路应用到了人机交互上。一旦每个Agent都按协议输出整个协同体系就能像微服务一样被编排、被监控。5.3 记忆与状态跨会话持久化的困境与解法第三个绕不开的技术点是记忆问题。Agent在单次会话里表现不错但项目开发是持续数周甚至数月的事情。如果每次开工都让Agent从头了解项目效率会大打折扣。这个痛点对应的解决方案是持久化记忆层——把Agent在前期任务中产出的关键决策、项目结构认知、常见坑记录成一个可检索的记忆库后续任务自动加载。我现在会在项目根目录维护一份AIRepo.md相当于给Agent看的项目手册内容包括项目结构说明、核心模块职责、约定俗成的编码规范、历史重大决策和原因、已知问题和规避方法。每个新Agent开工前上下文包里都会附带这份手册的最新版。效果是试出来的有了这份持续维护的记忆文件Agent在跨任务时的表现稳定了不少它不再每次都用一种奇怪的新视角破坏之前的结构约定。这个做法还有个额外好处它同时逼着我把项目的隐性知识显性化。以前团队里的核心知识很多只存在资深开发者的脑子里现在被逼着写下来反而成了团队的共同资产。6. 踩坑实录Agent协同开发中的典型问题和排查方法6.1 我遇到过的四类翻车现场Agent协同不可能一帆风顺我把真实项目里踩过的坑整理成一张速查表每个问题都包括现象、原因和我的解法。问题类型典型现象根因分析解决办法需求幻觉Agent实现了需求之外的功能或加入了不存在的接口任务描述里边界约束不清晰在任务卡里显式声明不得做X并给验收标准上下文迷失Agent修改了不应该动的文件破坏了其他模块上下文包缺少禁止修改清单上下文包增加边界保护区块明确禁区测试假绿测试通过但业务逻辑与需求不符Agent只写了满足断言的桩代码审查Agent逐条对照需求人工抽查关键路径重复返工同一任务反复修改仍不收敛任务颗粒度过大Agent难以把握把任务拆小到一个Agent一轮能完成的粒度我单独说下重复返工这个坑因为它最隐蔽。有一次我让Agent实现一个包含十几个步骤的复杂业务流水线它的第一版方案明显有问题但每个环节又看起来合理。我让它一改再改每次都在局部修修补补整体方向却一直不对。后来我把这个任务拆成四段每段单独派一个Agent完成并验证再让审查Agent做拼接审查两天就利索了。教训很直白任务拆得越粗返工越痛拆得越细每个Agent越能做好自己那块。6.2 排查思路先怀疑上下文再怀疑提示词最后怀疑模型Agent协同出问题时很多人的第一反应是换个模型重试。我的经验是别急着换模型按下面的顺序排查一看上下文。检查Agent拿到的上下文包是不是完整、是不是最新的、有没有包含与任务冲突的旧信息。一半以上的翻车都出在这。二看任务描述。看看是否有歧义、边界是否清晰、验收标准是否可验证。如果任务描述里有尽量合理这类模糊词Agent就会替你自由发挥。三看输出协议。检查是否要求了结构化输出以及是否明确规定了完成的定义。没有明确终点的任务Agent会自己找终点而这个终点通常不是你想要的。四看工具链。确认Agent有没有正确调用测试命令日志抓取是否完整。有时候Agent执行测试脚本时权限不对它也会给你报一个成功。五看模型能力。前面四步都没问题时再考虑是不是模型本身在这个领域的推理能力不够此时才值得换模型或调整策略。这个排查顺序我是在一次连续三天的翻车中总结出来的。那个项目里Agent不断产生奇怪行为我一开始疯狂换模型结果问题依旧。后来从上下文包开始一层层查发现是一个AI维护文档里残留了旧的接口定义新的Agent每次都照着旧接口写当然全错。所以现在我的第一条铁律就是Agent行为不对先查它看到的东西而不是抱怨它脑子笨。6.3 给Agent协同配上监理机制踩了足够多的坑之后我给自己定了一套监理机制现在分享出来。第一所有Agent对代码库的修改先在隔离分支上进行绝不直接在主干上操作。第二每个任务卡必须有明确的验收条件和退出标准达不到就不算结束。第三所有Agent产生的重要决策都必须以文档形式沉淀到AIRepo.md里避免下次重复踩坑。第四关键环节设置人工检查点没有人Review的合入不允许发生。这套机制不复杂但非常管用。它本质上把一个看起来全自动的系统改成了有质量门的半自动流水线。自动化的价值在于把人的精力从重复劳动里解放出来而不是把人的判断力一起省掉。这个度怎么把握我觉得是每个团队要在实践里慢慢找的。7. 写在最后我从这次范式转移里悟到的事从古法编程走到Agent协同我最大的体会不是代码写得更快了而是我这个人的角色彻底变了。以前我是工人手里拿的是键盘和IDE现在我是工长手里拿的是任务卡和评审表。我每天问的问题从这行代码怎么实现变成了这个目标怎么拆解这个产出怎么验证这个Agent的判断靠不靠谱。编程的门槛在降低但编程的决策密度在上升——这恰恰是人类最有价值的部分定义问题、设定边界、判断对错。最后分享一个实际在做的小技巧。我现在每周会花一点时间把本周合入的Agent产出统计一遍一次通过率、平均返工轮次、返工的根因分布。这些数据不是为了考核谁而是精准告诉我下一步该优化哪一块——如果返工大多来自上下文不完整我就去改进上下文包模板如果来自任务描述歧义我就去打磨任务卡写法。把Agent协同当成一个持续迭代的工程来运营它才会越用越顺手。2026年的这轮范式转移没有让程序员失业反而让会定义问题、会审查质量、会编排流程的人变得更稀缺。工具在换代但工程思维和判断力依然是这个行业里最贵的能力。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →