大家好,我是蓝戒。本篇我们来聊聊:“让AI像老架构师一样偷懒”。
不知道大家最近用 Cursor、Claude Code 或者 Codex 写代码的时候,有没有产生过一种隐隐的“恐慌感”:
你让 AI 加一个小小的日期选择框,它二话不说,立马安装了第三方日期库,套了三层工厂模式与上下文封装,加了一堆 CSS 样式,顺便还贴心地手写了跨时区转换逻辑。
短短两分钟,AI 狂敲了 400 多行代码,新建了 4 个文件。
乍一看:效率真高,太神了!
但等你做 Code Review 的时候,后背却直冒冷汗:
明明只是个普通表单,怎么平白无故多了几百行维护负担?下周这个库版本冲突了谁修?这里面的状态同步出 Bug 了谁去排查?
AI 现在的状态,特别像一个刚学会所有设计模式、极度渴望表现自己的实习生。
只要你给一句话,它就恨不得把毕生所学全都倾倒在你的代码库里,把原本简单的项目硬生生堆成难以维护的“技术债务屎山”。
最近,GitHub 上出现了一个突破 12 万 Star 的超级爆款开源项目——DietrichGebert/ponytail。
它的核心宗旨只有一句话:“The best code is the code you never wrote(最好的代码是不写的代码)。”
它把那种常年坐在办公室角落、戴着椭圆眼镜的资深老架构师思维,注入到了 AI Agent 内部。
实测显示:它能让 AI 少写 54% 的冗余代码,代码缺陷率直接暴跌 60%!
今天蓝戒就带大家拆解这款反内卷神器,看看怎么给用力过猛的 AI “踩踩刹车”。
代码膨胀危机:为什么 AI 写得越快,技术债堆得越厚?
在传统软件工程里,写代码是有“物理摩擦力”的,程序员打字累、想逻辑累,天然会倾向于克制。
但在 AI 时代,生成的边际成本几乎归零。
这就导致了严重的代码通胀危机:
- 过度设计泛滥:AI 极度热衷于新建文件、手写工具函数,哪怕标准库一行就能搞定,它也要手搓 50 行。
- 重复造轮子:你项目里明明已经封装好了
formatDate和http请求客户端,AI 根本不搜本地代码库,转头又在别处重写一套。 - 维护成本转移给人类:AI 敲完回车拍拍屁股走了,留给人类的是成千上万行需要长期维护、打补丁、写单测的代码。
老架构师常说:不写的代码永远不会有 Bug,不需要写测试用例,更不需要半夜爬起来线上运维。
Ponytail 的出现,正是为了治一治 AI 的这种“代码亢奋症”。
Ponytail 核心哲学:敲键盘前的“7 级思考阶梯”
Ponytail 并不是去修改底层大模型,而是作为一个精巧的 Agent 行为规范(Skill),在 AI 动手敲代码前,逼它先爬一遍 7 级决策阶梯:
1. 这玩意儿真的需要存在吗?(YAGNI 原则)
如果用户的需求本身可以通过现有流程绕过,或者属于过度提前设计的无用功能,直接砍掉,根本不写。
2. 本地代码库里是不是已经有了?
强制 Agent 在新建任何逻辑前,必须在当前项目中检索是否有现成的工具函数或组件,严禁在不同文件夹重复造轮子。
3. 编程语言标准库能不能搞定?
比如在 JavaScript/TypeScript 中,原生 Array.prototype.flat 或 Intl 能干的活,坚决不准手写递归或者额外安装 Lodash。
4. 原生平台与浏览器有没有现成特性?
这就回到了文章开头的经典案例:当要求添加日期或颜色选择时,普通 AI 写了 400 行组件;而加了 Ponytail 的 Agent 只会写下一行优雅的原生代码:<input type="date" />。从 400 行直降到 23 行!
5. 现有的依赖包里有没有?
如果 package.json 里已经安装了 Axios,就绝不允许它再去引入 Request 或原生乱揉一套。
6. 能不能一行代码搞定?
如果简单的一行三元表达式就能解决,不要去写多层嵌套的工厂类。
7. 只有前面都走不通,才写最少量的核心代码!
必须保证代码行数尽可能精简,且绝不牺牲健壮性、边界校验与安全性。
动手实操:把老资深思维装进你的 Cursor / Claude Code
配置 Ponytail 非常简单,因为它遵循通用的 Agent Skills 规范:
方式一:一键安装技能包
在终端中执行以下命令(以常用的 Agent 环境为例):
Bash
# 通用 Agent Skills 引入
npx skills add DietrichGebert/ponytail
# 或在 Claude Code 中直接挂载
claude-code skill add https://github.com/DietrichGebert/ponytail
方式二:直接注入核心 Prompt 约束
如果你使用的是 Cursor 或本地自研智能体,也可以直接在系统提示词(Rules)中注入其精髓:
Markdown
[Role: The Laziest Senior Dev]
The best code is the code you never wrote.
Before writing ANY new code, you MUST evaluate:
1. Does this already exist in the codebase? (Search before writing)
2. Can standard library or native platform features handle this? (Prefer native <input>, built-in APIs)
3. Do not add new files or dependencies unless strictly necessary.
4. If you can solve the issue by DELETING dead code or changing 1 line, do that first.
Always prioritize code deletion and reuse over code creation.
对比实测:400 行屎山 vs 150 行清爽实现
在真实的业务重构场景中,让两个不同的 Agent 接入同一段用户身份校验需求:
- 未加 Ponytail 的普通 Agent:新建了一个
AuthManager单例、加了一整套中间件代理层、自作主张手写了 JWT 解码逻辑,还引入了额外的加解密辅助文件,改动波及 5 个文件,新增 420 行代码。 - 装上 Ponytail 的 Agent:检索了整个项目,发现项目中早已有校验 Token 的公共函数,仅仅在核心入口处复用了该逻辑,顺手删除了 30 行已经废弃的旧逻辑,全过程只改动了 2 个文件,新增 15 行代码,净减少 15 行代码!
最终测试完全绿标,逻辑不仅一清二楚,而且没有给代码库增加任何冗余包袱。
避坑指南:什么时候该让 Agent“偷懒”,什么时候该彻底重构?
虽然 Ponytail 极度推崇“偷懒”,但在实际工程中,我们依然要有清晰的边界感:
- 适合开启“极懒模式”的场景:
- 日常业务迭代与小需求增补;
- 局部 Bug 修复与异常排查;
- 维护历史悠久、经不起折腾的核心成熟项目。
- 不应该盲目“偷懒”的场景:
- 从零起步的全新绿地项目(需要打好底层架构地基);
- 遇到严重的架构坏味道,必须彻底推倒重构的模块;
- 对性能有极限严苛要求、必须手写底层高性能数据结构的场景。
思考:Vibe Coding 之后,我们比以往任何时候都需要“克制”
AI 降低了写代码的门槛,让“产出代码”变得无比廉价。
但很多人忽略了一个基本事实:代码资产是资产,但代码本身其实是负债。每一行被写入项目的代码,都在不断消耗着未来的维护成本。
Ponytail 之所以在开源社区引起海啸般的共鸣,是因为大家终于从“看 AI 疯狂敲代码的爽感”中冷静了下来。
一个优秀的程序员,价值从来不在于他一天能敲出几千行代码,而在于他能在关键时刻一针见血地指出:“这里不需要写任何新代码”。学会用老架构师的克制与远见约束 AI,才是高段位开发者在这场技术浪潮中的生存底牌。
文章评论