2026年7月3日 1 分钟阅读

AI 编码 Agent 写代码太多管不住?Piggy 的”懒人资深开发者”模式直降 80% 冗余代码

tinyash 0 条评论

你有没有遇到过这种情况——让 Claude Code 实现一个简单的字符串校验,结果它给你造了一个 80 行的 Validator 类,带抽象接口、工厂方法、单元测试框架,甚至还留了个”未来扩展”的 TODO?或者让 Codex 加一个排序功能,它引入了 Lodash,尽管 Array.prototype.sort() 完全够用?

AI 编码 Agent 的能力越强,”过度工程化”的问题就越突出。它们像年轻的全栈工程师,什么模式都见过、什么框架都想用,唯独缺少一个见过世面的资深开发者在背后说一句:”这个需要吗?”

Piggy 就是那个资深开发者——一个开源的 AI 编码技能(Plugin),在所有主流 AI 编码 Agent 中注入”懒人模式”。它不教 Agent 写更聪明的代码,而是教它写更少的代码。实测数据:代码量降低 80–94%,Token 成本降低 47–77%,速度提升 3–6 倍。

问题:AI Agent 为什么总爱写多余代码?

这不是 Agent 的”性格问题”,而是训练数据和激励机制决定的。AI 编码模型的训练数据来自 GitHub 上大量生产级代码库,这些库普遍过度使用设计模式、抽象层和第三方依赖。模型学到的是”生产级代码就该这样写”——接口要抽象、错误要分类、配置要外置、未来要做好扩展准备。

但真实世界的开发需求往往是:

  • 一个简单的 debounce 函数,不需要 DebounceManager 类
  • 一个 CSV 求和,不需要 pandas
  • 一个日期格式化,不需要 moment.js
  • 一个 email 校验,不需要 validator 库加正则解析器

Piggy 的核心洞察就在这里:Agent 不是学不会简单代码,而是缺少一个约束层来压制它的”过度工程化本能”

Piggy 是什么?一个”反过度工程”的行为约束层

Piggy 的工作原理很简单——它用一个 7 级阶梯(The Ladder)在 Agent 动笔之前先做决策,只允许走到满足需求的最短路径:

  1. 这东西真的需要存在吗? 推测性需求?跳过(YAGNI)
  2. 代码库里已经有现成的了? 复用已有工具、辅助函数或模式
  3. 标准库能搞定吗? 用标准库
  4. 平台原生能力覆盖了吗? HTML 胜过一个日期选择器库,CSS 胜过 JS,数据库约束胜过应用层校验
  5. 已安装的依赖能解决吗? 用已有的,绝不为了几行功能加新依赖
  6. 能不能一行搞定? 一行。
  7. 以上都不行? 写最少能跑的代码。

这个阶梯听起来简单,但对 AI Agent 的行为影响巨大。它的设计哲学可以概括为:“先理解问题,再懒惰”——理解问题这一步从不偷懒,但解决方案要尽可能短。

安装:一行命令,所有 Agent 通用

Piggy 覆盖了几乎所有主流 AI 编码 Agent:

/plugin marketplace add piggy/piggy

codex plugin marketplace add piggy/piggy

/plugin marketplace add piggy/piggy

安装后默认激活 full 级别——阶梯完全生效,Agent 使用标准库和平台原生能力优先。

三档强度:lite / full / ultra

Piggy 提供三个级别,适应不同场景:

级别行为适用场景
lite按需求写代码,但每处改动用一行附上更懒的替代方案团队协作,你决定是否采用
full(默认)阶梯完全执行,标准库和原生优先,最短 diff日常开发
ultraYAGNI 极端模式,先删再加。直接挑战需求本身清理技术债务、重构遗留代码

用实际需求举例——”给 API 响应加缓存”:

  • lite缓存已加。顺便说一句,functools.lru_cache 一行搞定,如果你不想维护一个缓存类的话。
  • full@lru_cache(maxsize=1000) 用到 fetch 函数上。跳过自定义缓存类,等 lru_cache 真的不够用时再加。
  • ultra不加缓存,直到 profiler 数据说了算。等到需要缓存时:@lru_cache。手写 TTL 缓存类是一个自带 bug 率的农场。

核心命令:不只是”少写代码”

除了主要的 /piggy 模式开关,Piggy 还有一套审查和治理工具:

  • /piggy-review:对 diff 做”过度工程化审查”。每条一行,标注行号:

“`

L12-38: stdlib: 27 行的 Validator 类。”@” in email,1 行。

L4: native: moment.js 只为了一个 format 调用。Intl.DateTimeFormat,零依赖。

L88: yagni: 只有一个实现类的 AbstractRepository。直接内联。

L52-71: delete: 对幂等的本地调用套了重试包装器。没东西能替它失败。

“`

结尾给出 net: -N lines possible. 的净减行数。

  • /piggy-audit:全仓库扫描,按可删除/简化幅度排序。只读,不修改代码。
  • /piggy-debt:收集中所有 piggy: 注释形成债务清单,防止”回头再修”变成永不修:

“`

src/cache.js:42, global lock. ceiling: serializes all requests. upgrade: per-account locks if p95 > 200ms.

“`

结尾显示 N markers, M with no trigger.

  • /piggy-gain:显示基准测试面板,直观对比启用前后的代码量、成本和速度:

“`

Lines of code no-skill ████████████████████ 100%

piggy ██▌················· 6–20% ▼ 80–94%

Cost no-skill ████████████████████ 100%

piggy █████▌·············· 23–53% ▼ 47–77%

Speed piggy ▸ 3–6× faster

“`

Piggy 不会偷懒的地方

Piggy 虽然叫”懒人模式”,但它对以下场景从不偷懒

  • 信任边界的输入验证
  • 防止数据丢失的错误处理
  • 安全措施
  • 无障碍基础
  • 用户明确要求的任何功能

非平凡的逻辑必须留下一个可执行的检查——能验证逻辑正确的最小代码片段。没有测试框架、没有 fixture。一行能验证的 trivial 代码不需要检查。

配置自定义

Piggy 支持环境变量和配置文件设置默认模式:

export PIGGY_DEFAULT_MODE=ultra

或写入 ~/.config/piggy/config.json

{ "defaultMode": "lite" }

设置为 "off" 可完全禁用自动激活。优先级:环境变量 > 配置文件 > 默认 full

值得一试吗?

Piggy 的 7 级阶梯和三条纪律(无未请求的抽象、无”为以后准备”的脚手架、删除优先于添加)看起来是常识——但正是这些常识性约束,在 AI 编码时代变得稀缺。Agent 每 session 产生 300+ 行代码的速度,让人类的审查能力只能覆盖其中一小部分。与其事后 reviewer 一处处说”这个不需要”,不如让 Agent 在写之前就想清楚。

Piggy 适合以下团队:

  • 已经用 AI 编码 Agent 写生产代码,但觉得代码量不可控
  • 代码审查中发现大量”Agent 自己加的抽象层”
  • 项目中有大量技术债务来自 AI 生成的过度工程化代码
  • 希望在不牺牲质量的前提下控制 API 调用成本

MIT 许可证,零依赖,安装即用。

GitHub 仓库adamyasingh-12/Piggy- 安装命令/plugin marketplace add piggy/piggy(Claude Code / Codex / OpenCode) 配置~/.config/piggy/config.json

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。