rami0291@tokyo:~/analysis/vibe-coding-failure$[zh|ja]
cat analysis/vibe-coding-failure.md

为什么 Vibe Coding 会失败

· 信息最后核实于 ✓

序言:三个刺眼的幻觉

“能跑不代表能上线。” 当一个项目组里,没有任何人的认知词典里存在“输入校验(Input Validation)”、“服务端鉴权(Server-side Auth)”和“幂等性”这些要素时,项目的结局在写下第一行 Prompt 时就已经注定了。

🔍来瞧瞧几个案例:

  • “我明明给 AI 交代了,但它还是违背了我的指令!”–– SaaStr 创始人 Jason Lemkin 在用 Replit Agent 进行 Vibe Coding 实验时,明明在对话框里三令五申“代码冻结,严禁触碰生产环境”,AI 依然转头清空了包含上千家企业数据的生产数据库。(eWeek 报道,2025 年 7 月)

  • “我们将 5,000 万的开发预算削减到了 3 万!” 社交媒体上到处是这种令人热血沸腾的成本神话。但没人追问下半句:当你把架构师、产品经理、项目经理、DBA 和安全顾问全部“优化”掉之后,谁来为系统崩溃、数据裸奔和架构死锁买单?

  • “功能呢?AI不是说已经完成了吗?” AI告诉你他已经将你描述的新功能开发完成并投产,可翻遍了git记录也没找到对应的那份提交。

病根在于:把自然语言的 Prompt 当成了“硬约束(Hard Constraint)”,却根本不知道什么叫物理环境隔离与数据库只读权限(IAM)。


失败的 Vibe Coding,都有这四个共同特征

我们目睹了大量 Vibe Coding 项目从“三天火速上线”到“一周惨烈暴死”的案例,它们无一例外都踩中了以下四个深坑:

1. “快乐路径(Happy-Path)”假象

演示 Demo 时无比丝滑,UI 精致、核心流程一气呵成。但掀开引擎盖就会发现,代码里只有理想状态下的顺风局逻辑,完全没有考虑网络超时、并发读写冲突、支付回调重试、退款逆向状态机以及特殊字符输入等边界情况(Edge Cases)。只要真实用户稍微不按套路出牌,整个系统就会直接陷入数据脏写或白屏崩溃。

2. 前后端安全防线形同虚设

大量本该在服务端(Server-side)强制执行的权限校验,被 AI 随手写在了前端组件里;本该严密托管的 API 密钥或数据库高权凭证,被直接硬编码暴露在客户端 JS 包中(比如 2025 年 3 月,号称“零手写代码”的 Enrichlead 上线后几天内就被攻破,最终关停;以及大量因未配置 Supabase 行级安全策略 RLS 而导致用户数据互通裸奔的应用)。

数据不会说谎:

  • 根据安全机构 GitGuardian 2026 年 3 月发布的报告,借助 Claude Code 提交的代码,密钥泄露率为 3.2%,是全部公开 GitHub 提交基准(1.5%)的两倍多。问题不全在工具本身:用 Agent 提交代码的过程过于丝滑,反而让操作者更容易忽视密钥泄露的风险——这一点我亲身经历过。
  • 安全机构 Escape.tech 在 2025 年 10 月扫描了 5,600 多个公开部署的 Vibe Coding 应用后,查出了超过 2,000 个漏洞、400 多个暴露密钥以及 175 起真实个人敏感数据(PII)泄露。而且这只是被动扫描得出的下限估计。

3. 打地鼠式的“补丁死循环”

项目一旦越过几千行代码的规模,修改 A 功能几乎必然导致毫不相干的 B 功能崩溃。因为没有自动化测试(Unit/E2E Test)兜底,也没有清晰的模块边界约束,不懂技术的开发者只能沦为**“报错信息搬运工”**——机械地把终端里的红字复制给 AI,换回一段拆东墙补西墙的新代码,在无限回归 Bug 的死循环中耗尽耐心与 Token。

4. “局部合理,全局精神分裂”的黑箱架构

由于代码是在不同对话轮次、甚至不同模型之间碎片化拼接生成的,单看每一个函数都写得像模像样,但合在一起却逻辑自相矛盾:同一个业务实体在三个模块里有三种不同的数据结构,前脚刚定义的公共工具函数,后脚在另一个文件里又被重新造了一遍轮子。最终,代码库迅速坍缩成一座连作者自己都不敢多看一眼的屎山黑洞。


为什么 Vibe Coding 会走向失控?

如果只把问题归咎于“现在的模型还不够聪明”,那就彻底看错了方向。Vibe Coding 在复杂工程上的失败,是由大模型的底层机制与软件工程的客观规律共同决定的:

1. 奖励函数的错位:“能跑”不等于“正确”

有研究者曾指出:“Coding Agent 的优化目标是让代码跑起来(Make code run),而不是让代码安全(Make code safe)。” 大模型在生成代码时,倾向于选择阻力最小的路径来消除报错、满足你当下的视觉预期。跳过复杂的权限校验、用硬编码代替环境变量配置、用宽泛的异常捕获吞掉错误,都是让 Demo 最快跑通的“捷径”。Veracode 2026 年 3 月的评测显示,主流大模型的代码语法正确率已超过 95%,但安全测试通过率始终停滞在 55% 左右。

2. 上下文漂移与注意力稀释(Lost in the Middle)

对于一座历史悠久的“屎山”,哪怕是最有魄力、最顶尖的碳基工程师,在初入团队时也需要花费数周时间去梳理依赖拓扑,搞清楚第一铲子应该铲向哪里。 而大模型在处理超长上下文时天然存在“迷失效应”与注意力稀释。随着项目膨胀,模型根本无法在全局状态、隐式业务规则与历史妥协之间维持一致性。项目规模越大,有效上下文信噪比越低,生成的代码质量就呈断崖式下跌。

3. 从“技术债”演变为致命的“认知债(Cognitive Debt)”

传统开发为了赶工期欠下的是技术债——人类工程师可能不清楚自己代码写得有多烂,但脑子里依然有系统的心智模型(Mental Model),后续还能重构;而纯粹的 Vibe Coding 欠下的是认知债——因为跳过了思考与编码的过程,人类团队对系统内部的数据流转、状态边界一无所知。当系统崩溃时,团队连定位问题的能力都没有。

4. 软件工程角色与治理体系的缺失

软件工程从来不只是“把需求翻译成代码语法”那么简单。架构师负责划定演进边界与容灾底线,产品与项目经理负责收敛需求逻辑与逆向闭环,DBA 与安全工程师负责守住数据资产与合规红线。 盲目迷信 Vibe Coding 的团队,在“优化”掉这些最吃预算却最关键的碳基大脑后,天真地以为“代码生成出来 = 产品可以上线”。殊不知,AI 是一台极其强大的放大器:在懂工程的专家手里,它放大的是生产力;而在缺乏工程敬畏的外行手里,它只是以十倍的速度放大了混乱与风险。