一年前,我决定亲自动手验证一下 vibe coding(氛围编码)这股热潮到底有几分真实。我选择用 AI 承接一个复杂的设计项目,尽可能地压榨它,看看 AI 辅助是否真如外界吹嘘的那般神奇。
为什么选开发者工具
我软件工程出身,后来转做开发者工具的用户体验设计,所以自然挑了最能考验系统的方向:不做那些演示里常见的待办事项和购物清单,而是真正能让系统承压的东西。后者本质上是可以预测的问题:输入已知、输出已知,薄薄一层界面包裹着增删改查,答案的形状早已在每个教程里出现过无数次。
开发者工具完全不同。用户不是在勾选清单,而是在脑海中构建一个正在开发的系统模型,界面必须让模糊性变得清晰可读,而不是将其隐藏。各层之间必须相互一致;交互跨越多个界面,一处的小改动可能在两个视图之外悄悄引发故障;而在所有这些之下,还有一个不肯安分的主题:开发者自己的代码,运行在他们的环境中,被工具无法完全预知的意图所塑造。
AI 的输出:看起来对,实际上全是坑
结果证明,这个过程绝非魔法。表面上,AI 输出了自信满满的成果。但当我查看实际代码时,发现里面充满错误的假设、绕弯的实现、死代码和安全漏洞。这些问题没有任何提示或解释,我之所以发现,全是因为我主动打开了这个叫 AI 的黑箱,往里面瞅了一眼。
我的 AI 助手做出了匪夷所思的选择。它生成了我没有要求过的代码,还毫无预警地删掉了大段成果。当我追问原因时,永远得不到清晰的答复。如此几周后,我开始叫它"Chad"——取自 Pete Davidson 在《周六夜现场》里那个角色,无论发生什么,都耸耸肩说"我的锅"。我花了大量时间拷问 Chad 的行为,只为摸清这个过程:哪些假设、猜测和旁路正在发生,又为什么。
这就是黑箱 AI 漂移(black box AI drift)——设计需求与 AI 将意图翻译成代码之间的落差。提示词进去,输出出来,中间发生了什么完全看不见。LLM 听起来很自信,输出看起来没问题,你可能直到代码埋进代码库、或者最终用户替你发现时,才知道它错了。
在没有 AI 的时代,设计到代码的翻译是在人类之间公开进行的。设计师和开发者相互协商、解释、游说。人类能够看清意图在哪里结束、实现从哪里开始。AI 关上了这扇窗。如今,我们依赖模型来解读意图——而这种解读往往缺乏上下文、缺乏细微差别、缺乏判断力。它在看不见的地方以巨大的规模和速度发生着。
由于 AI 辅助生成的数量和速度,这些漂移正在以前所未有的速度扩散。目前的焦点大多集中在更好的提示词,或者在代码产生之后去修复它。我们需要做的是向内看,看看发生了什么,更重要的是为什么会发生,从而在问题进入产品之前就捕获它们。

一个"lint 规则"的教训
和 Chad 合作时,如果我没有仔细盯着代码,有太多东西我完全会错过。举个完美的例子: 我让 Chad 实现一个简单直接的 lint 规则,然后就去做下一个任务了。后来,在飞速滚过的代码蔷里,一个我不认识的常量引起了我的注意。我问 Chad 这是干什么用的。
Chad 围绕我那个简单的 lint 规则构建了一套精妙的上下文感知过滤系统——这和我要求的东西完全无关。我要的是广泛检测,AI 给的却是狭隘的、有主见的检测,包裹在一套复杂的启发式规则里,悄悄地把发现给过滤掉了。我永远不会知道这发生了。这正是漂移的本质:一套针对不存在问题的复杂解决方案。
它为什么会这样做?AI 被训练成倾向于它认为的"好"的样子。在这个过程中,它以不可见、自信且不标记的方式做出了你从未请求的决定,然后埋在你没有理由去审核&查验的代码里。接着,它给你一个自信的拇指朝上——"搞定!" 问题不在于 AI 是否会出错,而在于我们能否察觉它正在"差不多对"的边缘滑过。
更好的提示词不是答案
和 Chad 合作让我明白,光有清晰的指令远远不够。我需要在每一步都做到极度细致,不仅在提示词里,还要在 Chad 生成的任何东西上,无论它看起来是否正确:
- "解释一下你对我要做的事的理解。"
- "告诉我你刚才具体做了什么。"
- "画出你认为的布局应该是什么样。"
我不得不像这样在每一步都与它核对,这是我和一个真实的人类开发者合作时绝不会做的事。这种程度的审视和监督,在规模上根本不可持续。
我们也不能一直试图修复输出。AI 工具被训练成优化"能跑"。漂移被推到下游,由开发者最终手动逐文件重写 AI 代码。
我们不能一直追着漂移跑。它应该在源头捕获,或者更好的情况是——在发生之前就预防。
答案不是更多的监督,而是更好的工具。
从黑箱到玻璃箱
黑箱的反面不是没有箱子,而是玻璃箱:AI 实现你所指定的内容,广泛暴露其决策,并在结果不清晰时让人来决定如何处理。AI 展示其工作过程,等待人类采取行动。
这才是借助 AI 构建生产级软件的正确方式。不是把人从流程中移除,而是让他们真正掌控,而不是仅仅"在循环中"。
整个领域正在快速推进,被 AI 的速度所迷惑,却没有足够深入地追问所构建内容的质量。黑箱之所以黑,是因为我们没有花时间往里看。而这正是我们还有机会改变的时刻。
软件工艺——判断力、意图、让代码真正为人服务的那些决策——不能留在一个无人看守的箱子里。


评论