Agent X-Ray
RuntimeNotesAbout
Notes/产品经理/AI native 软件工程教程/第2章

为什么vibe coding不可以?

6 分钟 · 更新于 2026-09-01

核心观点 Vibe Coding 的问题不在于“让 AI 写代码”,而在于把即时可见的运行结果误当成完整的软件交付。原型可以靠感觉推进,长期运行的系统则必须具备可理解、可验证、可恢复和可演进的能力。

先区分两种完全不同的成功

假设你让 AI 做一个优惠券管理页面。半小时后,页面能打开、表格能显示、按钮也能点击。从演示角度看,任务已经成功。

但如果这个功能需要真正上线,还要继续追问:

  • 优惠券被重复领取时如何保证数据一致?
  • 活动结束后,历史订单能否还原当时使用的规则?
  • 新增一种券类型时,要改几个互不相关的文件?
  • 接口失败后,用户看到什么,系统如何重试?
  • 谁能修改活动,操作是否留有审计记录?
  • 下个月换一位开发者,他能否理解现有设计?

这些问题不会体现在第一眼看到的页面里,却决定了软件能否成为可靠产品。

因此,软件开发至少存在两种成功:

  1. 演示成功:在当前环境、当前输入下,能展示预期效果。
  2. 工程成功:在持续变化、异常输入、多人协作和长期运行中,系统仍然可控。

Vibe Coding 很擅长获得第一种成功,但如果没有额外的工程约束,它不会自动带来第二种成功。

Vibe Coding 到底指什么

这里的 Vibe Coding 不是泛指使用 AI 编程,而是一种特定工作方式:开发者主要通过自然语言不断要求模型修改代码,以“看起来能用”为主要反馈,很少主动建立架构、测试、验收标准和变更边界。

它通常表现为:

  • 先让 AI 生成完整功能,再通过肉眼试用找问题;
  • 遇到错误就继续追加提示,让模型就地修补;
  • 很少阅读关键代码,也不追踪依赖关系;
  • 每次修改只关注当前现象,不检查系统级影响;
  • 没有稳定的测试、日志、代码审查和回滚机制。

问题不在“凭感觉开始”,而在“始终只凭感觉推进”。探索阶段可以模糊,交付阶段不能模糊。

为什么它在早期显得格外有效

Vibe Coding 之所以有吸引力,是因为它具备三个真实优势。

反馈速度快

需求刚刚描述出来,就能看到页面、接口或脚本运行。与先设计再实现相比,这种即时反馈非常适合澄清想法。

试错成本低

过去需要数天验证的界面或流程,现在可能数小时就能做出多个版本。对于尚未确定的问题,快速淘汰错误方向比精心实现一个错误方向更划算。

降低了表达门槛

不熟悉某个框架的人也能构建可运行样例,从而更早参与产品验证。

这些优势都值得保留。真正的问题是:当项目已经从“验证想法”进入“承担责任”,团队是否同步切换了工作模式。

从原型走向系统时,四类风险会集中出现

1. 局部正确不等于整体正确

模型通常围绕当前任务修改最相关的代码。一个修复可能让当前页面恢复正常,却破坏另一条业务路径。

例如,为了让退款按钮重新可用,AI 可能放宽前端校验;页面测试通过了,但服务端仍缺少权限判断,甚至允许重复提交。肉眼看到的是“按钮修好了”,系统实际得到的却是新的安全风险。

工程化开发必须把局部修改放回完整链路中验证,包括数据、权限、异常、并发和历史兼容性。

2. 多轮修补会让设计逐渐失去中心

第一次生成的方案可能使用组件状态,第二次修改引入全局状态,第三次为绕过问题又加一层缓存。每个补丁单独看都有理由,组合起来却可能出现职责重复、数据源冲突和循环依赖。

AI 不会天然维护一份长期稳定的系统设计。只要当前上下文不足、约束含糊或代码本身已经混乱,它就容易沿着现有偶然结构继续叠加。

3. 生成成本下降,验证成本反而上升

AI 可以在几分钟内生成数百行代码,但团队仍要确认:

  • 需求是否被正确理解;
  • 边界条件是否覆盖;
  • 使用的 API 是否真实且版本匹配;
  • 是否引入安全、性能或兼容性问题;
  • 失败时是否可定位、可恢复。

当代码产生得比人类理解得更快,未验证内容就会形成“认知欠债”:系统里存在大量没人真正理解、也没人敢轻易修改的代码。

4. 可运行掩盖了不可运营

本地启动成功,只能说明理想路径跑通。生产系统还需要日志、指标、告警、配置管理、数据迁移、权限控制、备份和回滚。

这些能力通常不会在演示画面里出现,却是线上故障发生时唯一可靠的抓手。缺少它们的系统,功能越多,失控面越大。

什么时候可以放心使用 Vibe Coding

Vibe Coding 并非完全不可用。下面几类任务通常适合以结果优先:

  • 生命周期很短的界面原型;
  • 用于讨论需求的交互样例;
  • 一次性数据整理脚本;
  • 不接触敏感数据的个人小工具;
  • 为验证技术可行性而构建的实验;
  • 随时可以丢弃并重做的内部演示。

关键判断不是项目“大不大”,而是失败代价和后续责任。如果错误会影响资金、隐私、业务连续性或多人协作,就不应只靠试用结果验收。

一个简单判断法 如果你愿意在明天完全删除这份代码,它可以更偏向 Vibe Coding;如果你预计半年后仍要修改它,就应该从现在开始建立工程边界。

如何把 Vibe Coding 升级为工程化 AI Coding

不必放弃 AI 的速度,只需要改变人和 AI 的分工。

第一步:先定义可验收的问题

不要只说“做一个登录功能”,而要明确:

  • 支持哪些登录方式;
  • 失败场景如何处理;
  • 会话何时过期;
  • 哪些接口需要权限;
  • 什么条件才算完成。

清晰的验收标准既约束 AI,也帮助人判断输出。

第二步:限制一次变更的范围

让 AI 每次只处理一个可解释的目标,并要求先说明准备修改哪些模块、为什么修改。小批量变更更容易审查、测试和回滚。

第三步:让结构先于代码增长

在大量生成代码前,先确定核心模块、依赖方向和数据所有权。结构不需要复杂,但必须能回答:某类规则应该放在哪里,谁可以调用谁,哪一份数据是可信来源。

第四步:建立自动化反馈

至少准备与风险匹配的反馈机制:

  • 静态检查和类型检查;
  • 单元测试与关键链路集成测试;
  • 安全和依赖扫描;
  • 可复现的构建流程;
  • 上线后的日志、指标和告警。

AI 生成速度越快,反馈回路越要自动化。否则所有验证压力都会堆到人工验收阶段。

第五步:要求 AI 解释,而不只要求它修改

对关键变更可以继续追问:

  • 这次修改依赖了哪些假设?
  • 有哪些替代方案,为什么没有采用?
  • 最可能失败的三个位置是什么?
  • 应该补哪些测试?
  • 如果需要回滚,影响范围是什么?

解释不能替代审查,但能暴露模型遗漏的约束,也能帮助团队建立共同理解。

第六步:由人承担最终责任

AI 可以提出方案、编写实现和补充测试,但需求取舍、架构边界、风险接受和上线决策必须有明确责任人。软件是否可靠,不能由“模型说已经完成”来证明。

一份交付前检查表

当 AI 生成的功能准备从原型进入正式项目时,可以检查:

  • 需求和验收条件是否明确?
  • 关键业务规则是否只有一个可信实现?
  • 正常、异常和边界路径是否有测试?
  • 权限、敏感数据和外部输入是否经过检查?
  • 代码结构是否允许后续扩展,而不是只能继续打补丁?
  • 构建、配置和数据变更是否可重复执行?
  • 上线后是否能够观察故障并快速定位?
  • 变更是否可以安全回滚?
  • 团队中是否有人理解并愿意维护这部分代码?

如果多数答案是否定的,那么得到的仍是一个可演示结果,而不是可持续交付的软件。

结语

Vibe Coding 最适合回答“这个想法能不能跑起来”,软件工程则要继续回答“它能不能被信任、维护和演进”。

AI 降低了实现成本,却没有取消复杂性、风险和责任。成熟的使用方式不是拒绝快速生成,而是把快速生成纳入明确的设计、验证和运营机制中:让 AI 扩大产能,让工程方法控制方向与质量。


  • AI 时代最重要的能力是什么?
  • 工程问题与科学问题的区别
  • 构建一个新系统的设计和思考

本章目录
Vibe Coding 到底指什么为什么它在早期显得格外有效从原型走向系统时,四类风险会集中出现什么时候可以放心使用 Vibe Coding如何把 Vibe Coding 升级为工程化 AI Coding一份交付前检查表结语Related Documents
苏ICP备2025204887号-2