1. 什么是“Vibe Coding”?它不是新工具,而是一场正在失控的认知偏移
“Vibe Coding”这个词最近在技术社区、设计群聊甚至产品经理晨会里高频出现,但它没有官方定义,没有GitHub仓库,也没有任何一家IDE厂商把它写进功能更新日志。它不是一种编程语言,不是一套框架,更不是某个新开源项目——它是一种 以情绪反馈为输入、以模糊意图为接口、以即时结果为唯一验收标准的开发行为模式 。核心关键词就是: Prompt It, Got It, Regret It 。你敲下一段自然语言描述(Prompt It),AI立刻返回可运行代码(Got It),你复制粘贴进项目,跑通了两秒,第三秒就发现逻辑错位、边界漏判、状态未清理,甚至埋下数据一致性隐患(Regret It)。这不是个别新手踩的坑,而是整个协作链路中,从需求理解、方案设计、代码实现到质量保障各环节,集体向“感觉对了就行”的认知惯性滑坡的结果。
我过去三年带过17个跨团队技术落地项目,其中9个在中期复盘时都暴露出同一个隐性问题: PR(Pull Request)里出现大量“AI生成但无人能解释其控制流”的函数块 。它们语法正确、单元测试能过、集成环境跑得通,但当业务规则微调、流量突增或第三方API响应延迟时,这些模块就像被抽掉承重墙的房间,瞬间坍塌。最典型的一个案例是某电商结算服务里一个“自动识别优惠券适用范围”的函数——它由产品用“帮我写个能判断这张券能不能用在当前购物车里的逻辑”一句话触发生成,上线后前三天零报错,第四天大促开始,因未处理“叠加券+限时券+地域限制券”的三重嵌套校验,导致23%的订单优惠计算错误。回溯代码,那个函数有47行,含3层嵌套if、2个硬编码字符串枚举、1处未声明的全局变量引用,而最初提交它的工程师坦白:“我当时只看了输出示例,没细读逻辑,因为……它‘感觉上’就是对的。”
这种“感觉对了就行”的开发节奏,正在系统性侵蚀工程确定性。它不靠漏洞爆发来暴露,而是靠缓慢的熵增:技术债变厚、知识沉淀变薄、新人上手变难、故障归因变慢。它比“写烂代码”更危险,因为烂代码至少是人写的、可追溯的;而Vibe Coding产出的,是 高置信度幻觉代码 ——你越相信它“应该没错”,就越难在早期发现它“其实错了”。它不是AI的问题,是人把AI当成了思维代餐,把Prompt当成了需求说明书,把Got It当成了交付终点。而真正的风险,恰恰藏在那个被所有人忽略的“Regret It”里:后悔来得太晚,代价却早已发生。
2. Vibe Coding的底层机制拆解:为什么“感觉对了”反而最危险?
要真正看清Vibe Coding的风险,不能只盯着“用了AI”这个表象,必须拆开它的三层驱动齿轮: 输入层的情绪压缩、模型层的概率幻觉、执行层的语义断层 。这三者环环相扣,共同制造出那种“明明没写清楚,却莫名跑通了”的虚假安全感。
2.1 输入层:Prompt不是需求文档,而是情绪快照
绝大多数Vibe Coding的起点,是一句高度口语化、上下文严重缺失的Prompt。比如:“帮我写个导出Excel的功能”、“让按钮点一下就变蓝”、“处理下用户上传的图片”。这些句子根本不是技术需求,而是 对某种终端体验的情绪投射 。它们省略了所有关键约束:导出的数据量级(10条 vs 10万条)、Excel格式要求(.xlsx还是.csv?是否需要样式?合并单元格?)、按钮状态机(点击前/中/后/禁用态如何变化?是否需防重复提交?)、图片处理目标(缩略图?水印?格式转换?尺寸裁剪?)。
我统计过自己团队近半年的213条AI辅助编码Prompt,其中86%未包含任何明确的输入/输出契约(如“输入:用户ID数组;输出:按活跃度排序的用户对象列表,字段包含name、last_login_time、is_vip”),72%未声明异常场景(如“网络超时如何降级?”“空数组输入返回什么?”)。更致命的是,31%的Prompt直接混入主观判断词,例如:“用最优雅的方式实现”、“写个轻量级方案”、“别太复杂”。这些词在人类协作中依赖长期默契,在AI交互中却是灾难性歧义源——“优雅”对GPT-4可能意味着函数式链式调用,“优雅”对Claude-3可能意味着极简if-else结构,而“轻量级”对本地小模型可能是删掉所有注释,对云端大模型却可能是引入一个新依赖包来简化逻辑。
提示:当你发现自己在Prompt里用“大概”“差不多”“看着顺眼”这类词时,Vibe Coding的警报已经拉响。真正的工程输入,必须像手术刀一样精准:明确数据类型、边界条件、失败路径、性能基线。
2.2 模型层:大模型不是程序员,是概率缝合怪
大语言模型的本质,是基于海量文本训练出的 下一个token概率预测器 。它不理解“导出Excel”背后涉及的内存溢出风险、文件IO阻塞、MIME类型协商;它也不懂“按钮变蓝”牵扯的CSS优先级、无障碍属性(aria-pressed)、焦点管理(focus-visible)。它只是在训练数据中,见过大量“export to excel”和“button click blue”的共现模式,于是用最高概率路径拼出一段看起来合理的代码。
这种“概率缝合”在简单场景下常有奇效,但一旦进入真实业务复杂度,就会暴露本质缺陷: 它无法进行因果推理,只能做模式匹配 。举个具体例子:当Prompt是“写个函数,输入用户年龄,返回‘未成年’‘成年’‘老年’”,模型大概率输出一个带if-else的函数。但如果Prompt追加一句“注意:中国法律定义未成年是<18岁,但某些地区养老补贴从60岁开始”,模型会怎么做?它不会去查《未成年人保护法》条文,也不会调用地理定位API,而是从训练数据中检索“中国 未成年 年龄”和“养老补贴 60岁”的片段,强行缝合成一个逻辑混乱的函数——比如把60岁同时划入“成年”和“老年”分支,或者在判断条件里混用“>=60”和“>59”这类不一致表达。
我在一次内部压力测试中,让同一模型对“实现JWT token校验”生成代码,分别用以下Prompt:
- A:“写个JWT校验函数”
- B:“写个JWT校验函数,需验证签名、检查exp时间戳、支持HS256算法、拒绝已撤销token”
- C:“写个JWT校验函数,需验证签名、检查exp时间戳、支持HS256算法、拒绝已撤销token,并说明每一步的安全风险”
结果:A版代码完全忽略签名验证(因训练数据中大量JWT示例未提签名);B版补上了签名验证,但用的是硬编码密钥且未做密钥轮换设计;C版终于提到了“密钥泄露风险”,但给出的解决方案是“把密钥存在环境变量里”——这恰恰是OWASP Top 10明确警告的反模式。这说明,模型的“能力”不是线性增长的,而是随P


288

被折叠的 条评论
为什么被折叠?



