WHY YOUR AI KEEPS OVER-ENGINEERING
为什么你的AI
越改越乱?
改一个 bug,冒出三个新的。
不是你运气差,是「过度工程」在作祟——你没给改动画边界。
下面这个实验你可以亲手点一下,一眼看出差别。
这些场景,你是不是很熟?
- 让它修个登录报错,它顺手重构了三个模块。
- 上次修支付接口,第三天测试发现订单模块也跟着崩了。
- 说"顺便优化下性能",结果整个系统你都不认识了。
于是很多人得出结论:
"AI 越用越乱 / AI 不靠谱"。
但真相常常是——你没给它画
改动边界,它就把"改一处"理解成"顺手把相关的都动一遍"。改动像滚雪球,复杂度自己膨胀。
这也常源于前一步的需求没说清——如果入口就没划清楚,改动时边界更模糊。见专题01·为什么AI总在瞎编。
🔑 第一次验证
同一个 bug,两种吩咐
下面是修同一个报错的两种说法。分别点一下按钮,看看 AI 会怎么做——
不用懂技术,看"结果"就够了。
放任说法
你对 AI 说:
"帮我修一下这个登录报错,顺便把相关的都优化一下,性能也提一提。"
AI 的做法:
好的!我先定位到 login.js 的报错,顺手把整个认证流程重构了(加了中间件、缓存层、重试机制),又把 user 表加了索引、session 改成了 Redis……重构时引入 2 个新问题,等待你确认 🙃
⚠️ "修一个"做成了"翻新半个系统",还捅出新 bug
清晰说法(用基本法①②③)
你对 AI 说:
"只做一件:在 login.js 第 42 行,给那个可能为空的 user 字段加个空值判断 return null。别动其他文件。改完只跑 login 相关的测试,跑通就停。"
AI 的做法(范围锁死):
// login.js — 最小改动,只碰这一处
if (!user) return null; // 第42行,加一行
// 没动其他文件、没加新依赖
// 只跑 login 测试:PASS ✔
✓ 范围锁死、单点改动、只跑相关测试、不冒新坑
✨ 你刚刚感觉到的差别,就是"过度工程"的全部秘密
左边不是"AI 爱炫技",是它没有改动边界——你说"相关的都优化一下",它就理解为"能碰的都碰"。每多碰一层,就多欠一份复杂度债,bug 自然冒出来。
右边你只多说了一句:只改这一处、别碰其他、改完只跑相关测试。AI 立刻从"翻新狂魔"变回"精准维修工"。
你不需要精通代码,但你需要学会说一句话:"只改这一处,别的别动。"这句话值三个通宵。
证据:本站AI输出修改规范就是为此而生——"不许自己编默认值、改完先自测、贴截图给我看"。专门写给非程序员的约束。
为什么会「越改越乱」?三句话讲透
1 · 改动不守恒,每加一层都欠债
没有边界的改动会
连锁膨胀:改 A 牵动 B,顺手"优化"了 C,雪球越滚越大。你限制范围,膨胀就停。
软件工程有一条经典原则叫 YAGNI(你不会需要它)——没明确要的东西别做。这和"最小改动"是同一思路。
2 · "顺手优化"是过度工程的开关
"顺便""相关的也搞下""性能提一提"这类词,等于授权 AI 自由发挥。想要最小改动,就别说"顺便"。
3 · 你管范围,它管填空
最省力的分工:
人划"改哪、不改哪、怎么算改好",AI 只填那一块。这不是技术活,是"把边界说清楚"的活。改完别忘了让 AI
自己先检查一遍——这是
本站协作方法写死在流程里的工序。
参考:Karpathy 在《Software 2.0》等文章中多次强调,AI 协作需要明确的流程约束才能避免 scope creep(范围蔓延)。
📋 拿走就能用:最小改动模板
下次让 AI 改东西前,把这段套进去填一填。把橙色的地方换成你的内容即可。
只改这一处:〔具体文件 + 具体位置,如 login.js 第 42 行〕。
别碰其他文件,不加新依赖。
改完只跑 〔相关测试 / 相关页面〕,跑通就停,不用我做别的。
范围说清楚了,AI 就是精准工具;没说清楚,它就是个翻新狂魔。你选。
🔑 瞎编 | ✅ 不验证 | 🎮 证据 | 🧭 方法总览 | 📋 基本法
🔑
看专题 01:为什么AI总在瞎编?
另一个高频痛点,同样亲手点一下
→
✅
看专题 03 · 为什么做完了不等于做对了?
做完只是上半场,验证才是交付
→
📦
新手引导 · 三步让AI开始靠谱地干活
不会写代码也能用——30分钟上手
→
🧩
看专题 05 · 为什么AI总是答非所问?
层混一起——AI 被迫猜坐标系
→
🎮
看证据:这些游戏就是这么造的
规则先定义好,加内容只花几分钟
→
🧭
看完整方法:协作基本法七条
从"说清楚"到管住安全、让成果被记住
→
📋
把这套规则打包带走
一键复制 / 下载,粘进你自己的 AI 就能用
→