文章目录前言这项目到底在搞什么7级决策梯子三档强度从温柔到核威慑同一个需求三种输出80个文件核心就两条线效果数据砍了54%的代码三个值得偷的设计1. 把品味问题变成决策流程2. 给简化留审计线索3. 不懒清单减法比加法更安全哪些场景不该用不用装也能搬走的设计P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01前言最近GitHub上有个项目叫Ponytail两周干了6万Star趋势榜第一。我第一反应是现在GitHub用户都这么闲吗一个教AI写代码的项目居然比某些程序员写的代码还火。后来一看人家核心思想就一句话让AI学会偷懒。不是那种能躺着绝不坐着的偷懒是那种能用一行绝不写两行的高级偷懒。你别说这思路跟我老板挺像的——他永远希望我用最少的工作量交最多的活。只不过Ponytail真的做到了而我老板只是想想。这项目到底在搞什么Ponytail给AI塞了一个懒惰高级工程师的决策树。注意啊是懒惰的高级工程师不是懒惰的高级工程师——前者是褒义后者是简历。这个决策树有7级AI写任何代码之前必须一级一级往上爬哪一级站住了就停。我打个比方这就像你点外卖第一级先问自己我真的饿吗不饿就跳过。第二级冰箱里有没有剩菜有就热一热。第三级泡面能不能解决能就泡。第四级楼下便利店有没有有就下楼。第五级能不能让室友带能就发微信。第六级能不能一口吃完能就点小吃。第七级实在不行了才打开外卖APP。Ponytail就是这个逻辑只不过它管的是代码不是夜宵。7级决策梯子第1级这东西真的需要做吗不需要就跳过。第2级代码库里已经有了有就复用。第3级标准库能做用标准库。第4级平台原生能力能覆盖用原生。第5级已装依赖能解决用现有依赖。第6级能一行搞定就写一行。第7级实在不行写最少能工作的代码。看到第1级我就笑了。“这东西真的需要做吗”——这要是放在我们公司的需求评审会上产品经理能当场掀桌。但人家Ponytail是认真的AI真的会在动手之前先问一句“老板这个需求是非做不可吗”如果答案是不需要AI直接跳过连代码都不写。这效率比我开会时假装记笔记高多了。三档强度从温柔到核威慑Ponytail不是简单的开和关它有三个档位。第一档叫liteAI正常写代码顺嘴提一句其实有个更懒的写法。就像你同事路过你工位看了一眼你的代码说“其实这里可以用map”然后走了。你追出去问他怎么写他说自己查——这就是lite模式。第二档叫full默认档位AI严格爬梯子输出最短解法。你让它加个缓存它直接给你一行lru_cache连自定义缓存类都懒得写。第三档叫ultraYAGNI极端主义连需求本身都质疑。你让它加个缓存它说“不加等profiler说了再加。”这态度像极了我那个干了十年的老架构师——你找他加功能他先问你这个功能的ROI是多少。我说用户想要他说用户还想要世界和平呢。同一个需求三种输出lite“Done, cache added. FYI: lru_cache covers this in one line.”full“lru_cache(maxsize1000) on the fetch. Skipped custom cache class.”ultra“No cache until a profiler says so. When it does: lru_cache.”ultra模式这个回复我读完都想给AI鼓掌。“不加等profiler说了再加”——这哪是AI这分明是混了十年职场的老油条。建议以后面试的时候把ultra模式的回复打印出来贴在会议室墙上让产品经理进来之前先读三遍。80个文件核心就两条线Ponytail整个项目80个文件看着挺唬人其实核心就两条线。一条是AGENTS.md所有AI都能读的静态规则一条是SKILL.md完整版带三档调节。剩下的全是适配器给Cursor的、给Windsurf的、给Cline的、给Copilot的……我数了一下16种Agent都能用。这感觉就像你写了一篇爆款文章然后把它发到了公众号、知乎、头条、小红书、CSDN、掘金……哪里有人看哪里就有你。只不过Ponytail发的是代码规则你发的是焦虑。最骚的是人家用了一个指令构建器所有适配器都调同一个文件。你改SKILL.md里一句话16种AI下次启动自动生效。这设计比我公司那个改一个配置要发五个邮件的系统强多了。而且人家还有CI检查确保所有静态副本跟主文件保持同步。不是给每个AI写一份规则而是一份规则多种注入方式。这思想深度建议某些写PPT复制粘贴的PM来学习一下。效果数据砍了54%的代码Ponytail在真实项目上跑了一下数据挺吓人。代码行数砍了54%token消耗省了22%成本降了20%时间快了27%。安全性100%。我盯着这个数据看了半天终于明白了一个道理原来我写的代码里有一半都是废话。不是功能废话是那种明明一行能解决非要写个类的废话。就像你去饭店点碗面厨师非要给你摆个盘、撒个金箔、配个故事——最后面还是那碗面。Ponytail就是那个在后厨喊别摆了直接端上去的人。而且人家作者特别诚实早期benchmark跑出来只有4%的差距差点就发布了。后来发现是bug——Ponytail的规则在baseline上也偷偷触发了。修掉之后才看到真实的-54%。这种自己推翻自己的勇气在开源圈不多见。大多数项目都是我们的数据天下第一Ponytail是我们之前算错了这是新的。建议某些发布会PPT也学学这种精神。三个值得偷的设计1. 把品味问题变成决策流程大多数让AI写简洁代码的prompt都是模糊的——“write clean code”、“keep it simple”。AI哪知道什么叫简洁它只知道这行代码能跑。Ponytail的解法是不给定义给决策树。每一级判断标准极其具体——标准库有没有是grep一下就能回答的问题。原生input能不能用是查MDN就能回答的问题。AI不需要品味只需要逐步排除。这就像你教女朋友拍照别说拍好看点要说站窗边、脸朝光、手机举高点。具体指令永远比抽象要求管用。2. 给简化留审计线索Ponytail要求每个简化都要写注释格式是ponytail: 当前简化的上限 什么时候该升级。比如ponytail: global lock, per-account locks if throughput matters。三个月后你看到这行注释知道为什么这里只有全局锁也知道什么时候该换成细粒度锁。这设计太贴心了比我公司那个TODO: 优化的注释强一万倍。那个TODO挂了三年没人知道优化什么、什么时候优化、谁优化。Ponytail的注释是有借有还我们的是有借无还。3. 不懒清单梯子爬得再高这几样绝对不能砍输入校验、错误处理、安全措施、可访问性。这叫不懒清单——你可以懒但不能在这些地方懒。就像你可以懒得洗碗、懒得叠被子但不能懒得冲厕所。底线就是底线跟懒不懒没关系。这个清单可以按项目类型定制做支付的加幂等性检查做前端的加键盘导航。清单越长AI在不能砍的边界上越可靠。建议某些公司也给自己列个不砍清单比如不能砍测试、“不能砍文档”。虽然他们可能根本不会看。减法比加法更安全Ponytail跟那些给AI加记忆的项目有本质区别。加记忆是加法——给AI塞偏好、塞历史、塞规则。这些东西过时了AI基于错误前提写代码你很难发现。就像你三个月前跟AI说我喜欢React Query三个月后你换团队用tRPC了AI还在按旧偏好写。你花了半小时才发现它在做一个你早就不做的决策。Ponytail是减法——告诉AI少写代码。减法的副作用是代码不够——功能不完整一眼就能看出来。加法规则的失败是隐性的减法规则的失败是显性的。这道理放在职场也适用给你加活你累死了领导可能看不出来把你活减了你闲得发慌全公司都知道。所以减法虽然看起来不积极但风险落在明处你修得快。以后你再往AI的系统提示里塞东西的时候先问自己这是加法还是减法失败了我是马上能发现还是三个月后才发现哪些场景不该用虽然Ponytail很香但有些地方不能乱用。比如支付场景“能一行就一行可能变成能吞错误就吞错误”。fetch().catch(() null)也是一行但你的钱可能就没了。还有跟项目现有规则冲突的时候AI会随机选一边。你的CLAUDE.md写所有公开函数必须docstring 单元测试Ponytail说不需要框架一个assert就够了。两条矛盾指令同时存在AI自己判断优先级——有时候选对有时候不。这就像你同时听两个领导的一个说往东一个说往西最后你站在原地两边都不讨好。每轮注入还占上下文约1500个token。在200K上下文里不算什么但在小模型里每轮被抽走空间读规则也挺心疼的。就像你请了个高级顾问每次开会他都要先花十分钟念一遍公司章程——有用但费时间。不用装也能搬走的设计就算你不装Ponytail这五个设计也能直接搬走第一在自己的AGENTS.md里加写代码前先问这东西真的需要吗标准库有吗能一行吗——3级就够用。第二简化标记约定“// lean: 上限, 升级路径”——任何简化必须带注释。第三不懒清单明确写以下东西绝对不能简化。第四多档强度给AI的规则不要只有开和关至少加一档提醒但不强制。第五输出格式代码先然后最多三行解释。解释比代码长就删掉。这第五条我特别喜欢——“解释比代码长就删掉”。建议某些技术文档也按这个标准来尤其是那些前言写了三页正文两行的文档。Ponytail是个好工具但它是刹车不是方向盘。如果你决定装从lite开始。任何往AI系统提示里塞东西的操作都应该带着我什么时候会关掉它的预案。毕竟再聪明的AI也架不住你给它塞一堆互相矛盾的指令。就像再强的发动机你同时踩油门和刹车它也只会冒烟。P.S. 无意间发现了一个巨牛的人工智能教程非常通俗易懂对AI感兴趣的朋友强烈推荐去看看传送门https://blog.csdn.net/HHX_01