正在刊行长文 · Essay
2026-09-07所有内容
随机比特 · Random Bits

AI 为什么总爱把简单需求写成屎山?揭开 Coding Agent 的“过度工程”病

2026-09-07AI Engineering / Systemsrbits.uk
AI 为什么总爱把简单需求写成屎山?揭开 Coding Agent 的“过度工程”病

在日常研发工作中,许多开发者都经历过这种令人啼笑皆非的场面。向辅助编码的智能体提出一个极小的功能诉求,比如在前端表单中新增一个生日或日期的录入框。作为资深工程师,人们潜意识中的标准解法通常轻巧明了,在现有表单结构中直接插入一行标准的原生平台标签,便足以借助现代浏览器内建的能力完成渲染与基础交互。

然而,一旦将这一指令托付给具备自主工具调用能力的编程智能体,画风往往会迅速失控。智能体会毫不犹豫地调用终端安装庞大的第三方日期选择器扩展包;紧接着,它会新建多层目录与包装组件文件,定义冗长的属性接口,用上下文容器将其层层封装;为了处理样式,它会引入额外的样式表并配置变量;甚至在完成这一切后,它还会主动在控制台中展开关于跨时区解析与日期格式兼容性的长篇大论。原本一行原生标签即可交付的简单特性,最终在提交记录中演变成改动十余个文件、新增四百余行代码的巨型补丁。

大模型并不懂得写代码的维护代价;没有提前终止阶梯的约束,最听话的智能体也会把一行原生代码的需求写成几百行的架构官僚屎山。

简单需求的代码通胀与架构肥大症

这种现象并非孤立的巧合,而是当下各类编程智能体普遍存在的架构肥大症。无论是日常编写微服务接口、数据转换脚本,还是构建用户界面组件,智能体似乎对轻量简洁的解决方案天生免疫,总是固执地倾向于引入最厚重的工程抽象。

对于单次问答而言,写出四百行结构复杂的代码或许让模型显得极其勤勉且专业;但对于需要长期演进与高频维护的真实工程体系而言,这种无节制的多层封装与外部依赖注入,实质上是在向代码库中疯狂倾倒维护负债。额外的第三方依赖扩大了软件供应链的安全受攻击面,冗余的抽象层切断了运行时的调用透明度,原本清晰明了的数据流被淹没在由工厂类、包装器与上下文钩子编织的复杂迷宫中。

当团队不得不投入数倍于编写代码的时间去审查这些由算法生成的膨胀补丁、排查依赖版本冲突并修复暗藏的边界漏洞时,原本指望借助自动化提升研发效能的初衷便彻底落空。代码数量的爆发式增长并没有换来业务价值的等比例提升,反而让整个软件系统在算法的过度雕琢下迅速滑向僵化与脆弱。

Coding Agent 过度工程成因解析

模型底层偏见与边际成本的失衡诱因

要根治智能体的过度工程病,必须从大语言模型的底层生成机制与认知偏见出发,探究其深层行为诱因。模型之所以热衷于制造代码膨胀,核心根植于三重结构性失衡。

第一重失衡来自训练数据分布的概率诱导。自回归模型在本质上是依据上下文概率预测后续词元。在海量公开代码库与技术教程中,开发者记录的内容绝大部分并非如何编写一行原生标准属性,而是关于如何在复杂框架中整合第三方类库、配置依赖注入与实现企业级封装的高级教程与复杂项目。在统计概率的高维空间中,工业级类库与多层包装模式的出现频次远高于原生语法的极简组合。因此,当面对一个功能描述时,模型的贪心推导天然会滑动向概率质量更为富集的框架全家桶方案。

第二重失衡来自生产边际成本与维护成本的严重脱节。人类资深工程师之所以在写代码时保持克制,是因为人类敲击键盘的速度受限,且人类对未来的运维痛苦拥有极其敏锐的痛觉记忆。人类深知每一行多余的代码都意味着日后的测试用例、静态检查负担与潜在的线上应急响应。但对智能体而言,生成十行代码与生成五百行代码在边际成本上几乎毫无差异,只需消耗极少的计算耗时与微弱电费。智能体感受不到技术债务的物理重压,更不需要在凌晨三点承担排查复杂包装层死锁的呼叫。当生产成本无限趋近于零,系统熵增的物理法则便必然导致代码体积的无序膨胀。

第三重失衡来自强化学习对齐中的迎合倾向与伪专业主义。在人类反馈强化学习的评估语境下,一个仅输出一行原生语法的精简回答,往往容易被评测基准误判为过于草率或缺乏深度;而一个包含了类型定义、错误捕获类、工厂方法和配置选项的繁冗方案,在形式上往往更容易匹配评测者对专业工程水准的表面认知。智能体因此被强化出一种危险的表演欲,宁可多写三层不必要的间接抽象,也绝不展现哪怕一丝可能被归类为单薄的简洁。

提前终止阶梯决策回路

提前终止阶梯:将极简主义注入编码智能体

为了打破大模型这种与生俱来的膨胀惯性,软件工程界近期开启了以提前终止为核心的反向治理探索。开源项目 Ponytail 提出了一个极其尖锐的工程命题,让编程智能体像团队中最老练、最懂得权衡利弊的资深架构师一样思考。

在面对 tiangolo 维护的真实全栈项目、包含 FastAPI 后端与 React 前端的十二项日常开发工单基准评测中,研究人员对比了无约束智能体与引入约束后的行为差异。评测数据表明,在引入系统的提前终止约束机制后,智能体输出的代码行数平均减少了 54%,在日期选择器等过度构建高发场景中,代码削减幅度更是高达 94%;同时,由于消除了漫长的多文件构建与依赖解析,任务端到端耗时缩短了 27%,整体调用的 Token 消耗下降了 22%,综合 API 成本降低了 20%。

最好的代码是压根不用写的那一行;让智能体停在第一级能够解决问题的台阶上,才是工程实战的真正高级感。

实现这一显著收敛的核心机制,在于一套严谨的提前终止阶梯。在允许智能体动笔编写具体业务实现之前,系统强制要求其按固定层级逐级评估需求,并在首个能够成立的台阶立即终止推导,拒绝继续滑向深层复杂方案。

在具体落地上,这套阶梯将原本无序的生成空间划分为自上而下的拦截边界。需求触发时,智能体必须优先通过 YAGNI 校验,剔除任何非实质的边缘臆想;若确定需要实现,检索逻辑立即排查当前工程已有组件与工具函数,锁定一切可复用逻辑;若无现成封装,执行引擎优先调用语言核心库内建能力;在界面与交互场景中,系统强制检查宿主环境与平台原生语义,优先选用原生标准化标签,直接阻断第三方库的引入倾向;只有当原生能力确实无法承载时,智能体才被允许在已声明的既有依赖范围内搜寻解法;若必须编写新逻辑,优先探索单行声明式表达,唯有所有轻量路径均告失效,才退守至最小可用实现的编写。

懒惰但绝不疏忽:防御边界与工程极简的统一

在推行极简主义与提前终止的过程中,团队极易陷入另一个极端,通过粗暴的提示词要求智能体只写单行代码或用最少字符回答。在对比实验中,这种缺乏分层逻辑的简陋提示词虽然将代码行数压缩了 33%,但却导致智能体的安全与防御合规率由 100% 暴跌至 95%。智能体为了机械地缩减代码行数,开始肆意裁剪必要的边界校验、异常捕获与空值防御,从而将系统置于更大的未知风险中。

这正是提前终止阶梯在工程设计上的精妙之处,在实现方案上追求极致克制,在理解需求与安全防御上保持高度敬畏。

在踏上提前终止阶梯之前,智能体必须完整阅读受改动影响的调用链路与依赖关系,建立完备的上下文感知;同时,属于信任边界的数据校验、关键错误处理、网络防御与可访问性属性,永远属于严禁裁剪的红线范围。极简的本质并非粗制滥造的简陋,而是剥离一切非必要的过度包装,用最坚固、最清澈的原生积木搭建系统。

当工程团队将这种基于第一性原理的决策阶梯固化为智能体的执行规范时,AI 辅助编程才能真正从自动堆砌屎山的推土机,蜕变为帮助团队抵御软件膨胀、守护代码纯粹性的高超利器。

随机比特公众号二维码
公众号 · 随机比特
从 AI 工具热闹里拆工程真相

写边界、控制面、上下文、成本与安全。