0. 背景:我亲手把项目写成了"屎山"
我是做业务系统的,最近重度使用 AI 编程工具(Claude Code / Cursor 一类)做 Vibe Coding。前三周体验拉满:说一句需求,十分钟出页面、出接口、建表。
直到我要加一个"导出报表":AI 改了三处,另外五处报红;它说"已修复",刷新又炸。我 grep 了一下,发现同一个校验函数被复制了 8 份,分布在 8 个文件,改一处忘七处。表单状态管理那块更离谱——AI 自己绕晕了,回头问我"这个字段当初怎么设计的",而我压根没看过它生成的代码。
这是一个典型的 Vibe Coding 失控案例。最近恰好看到两个视频把它讲透了,而且里面说的是同一波人:视频一用"赛博擦屁股"概括这门新生意,举的例子是那个三人、一周、一万美元的团队;视频二把这个团队扒开复盘,它就是真实存在的 Slopfix(三个做过 4 年+ Rust xx合约框架的资深工程师),还搬出了大规模实证研究。下面把技术要点和我的护栏实践整理出来。
1. 为什么 Vibe Coding 容易堆出"屎山":技术根因
核心问题:AI 智能体在大型项目里"看不清全貌",不会主动复用已有代码,只会复制粘贴。
类比盖房子:工人忘了哪面墙砌过,看到空地就再砌一面,最后满屋都是重复的墙,想加个房间一拆就塌。我那 8 份重复校验函数,就是"重复砌的墙"。
更危险的是"人类幻觉"(比模型幻觉更隐蔽):当 AI 反过来问你"用哪个数据库、怎么设计"时,如果你答不上来只会说"你看着办",冗余代码就会像棉花糖一样膨胀,最后 AI 自己都收拾不了。
2. 数据:这不是感觉,是 6299 个仓库的实证
《AI 繁荣背后的债务:野外 AI 生成代码的大规模实证研究》追踪了:
- 6299 个仓库、302579 次已验证的 AI 提交;
- 约 22.7% 的 AI 引入问题在最新版本中仍存在,部分躺了超 9 个月;
- 五类工具每次提交引入问题比例均 >15%:Copilot 17.4%、Claude 24.4%、Cursor 25.7%、Gemini 29.1%、Devin 23.8%;
- 共识别 484366 个 AI 引入问题,代码异味占 89.3%(宽泛
try/catch、未用变量、重复代码),正确性 6.0%、安全 4.7%; - 关键结论:AI 能修简单异味(删无用导入、格式化),但涉及程序逻辑、状态管理、安全时,引入多于修复——"解决一个,带来两个"。
一句话:AI 写代码快几倍,攒技术债也快几倍。
3. Slopfix 的护栏,值得直接抄作业
Slopfix 三个资深工程师接活时,交付物不止"瘦身后的代码",还有一套防再次失控的工程护栏。我把可落地的部分抽出来:
3.1 写一份 CLAUDE.md(或对应工具的 AGENTS.md)
明确技术栈、目录规范、红线。示例:
# 项目工程规范(AI 必须遵守)
## 技术栈
- 后端:Node.js + Express + TypeScript
- 数据库:PostgreSQL,ORM 用 Prisma
- 前端:React + Vite
## 目录约定
- 业务逻辑放 src/services,禁止在路由里写业务
- 校验函数统一在 src/utils/validators.ts,禁止重复定义
## 红线(Agent 无投票权)
- 不得新增重复校验逻辑,复用 src/utils/validators
- 不得用宽泛 try/catch 吞异常,必须明确错误类型
- 状态管理改动必须列出受影响组件,经人工确认
- 每次改动保持功能不变,不得顺手"重构"无关代码
核心理念:Slopfix 自己也用 AI,但 "Agent 没有投票权",逻辑/状态/安全的最终拍板是人。
3.2 lint + CI 自动拦"异味"
用 scc 量化代码量,配合 ESLint 禁重复/未用变量。CI 片段(GitHub Actions 示例):
name: guardrails
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npx eslint . --max-warnings=0 # 有异味直接红
- run: npx scc --exclude-ext json,md # 打印代码行数,监控膨胀
3.3 按效果付费的"代码瘦身"心智
Slopfix 用 scc 只算非空非注释行,合同禁止"代码高尔夫"(不靠删注释、不把多行塞一行凑数)。定期用 scc 看增量,重复逻辑一冒头就清,别等堆成屎山再花一万美元擦屁股。
npx scc src/ -i js,ts,jsx,tsx # 看各语言代码量与重复度
4. 我的 Vibe Coding 护栏清单
- 先画架构草图再开嘴:前后台 / 数据库 / 复用边界写清楚,AI 是螺丝刀不是设计师。
- CLAUDE.md 锁规范:技术栈、目录、红线写死,强制 AI 按同一张图纸施工。
- lint + CI 兜底:每次提交自动拦重复代码、未用变量,零容忍。
- 逻辑 / 状态 / 安全,人工拍板:这三块 AI 最易"解决一个带来俩",必须 review diff。
- 定期 scc 瘦身:监控代码量增量,重复逻辑即清。
- 禁止"你看着办":AI 反问架构问题时,自己给答案,别把决策权让出去。
5. 结论
"赛博擦屁股"(AI 代码清理)这门生意有争议,但它点破了一个事实:AI 降低了写代码的门槛,没降低交付的责任。 Vibe Coding 的价值在"把想法快速变产品",风险在"技术债以几倍速度累积"。
护栏比补救便宜。与其等项目炸了找 Slopfix 花一万美元,不如现在就把 CLAUDE.md、lint、CI 这三道缰绳套上。
AI 可以替你写,但不能替你负责。