"氛围编程"(vibe coding)——描述你想要什么,然后让 AI 智能体去编写、运行和修改代码——已经从聚会戏法跨入了生产实践。这个网站很大程度上就是这样建成的。我作品集里的那些 AI 产品,以及我无人机硬件的设计流水线,也是如此。我是信徒。而这恰恰是我想谈谈那三件极不时髦的工具的原因,是它们让这种实践得以存活——因为氛围只是技术栈的最上层,而这个栈很老。
Git:给自信配的撤销键
AI 智能体带着十足的自信生成代码,却对自己毁掉了什么毫无记忆。这不是批评——这是岗位职责说明,而 git 是这份职责的另一半。版本控制把智能体的速度从风险变成资产:每一个被提交的可用状态都是一个存档点,每一次实验都是免费的,而氛围编程里最吓人的那句话——"我顺手把其他几处也重构了"——从一个有待发现的谜团,变成了一个可以审查的 diff。
真正重要的实践都很小:在提出任何有野心的请求之前先提交,把生成的改动保持在可审查的块里,并且要读 diff——diff 才是你真正监督智能体的地方,因为文字摘要描述的是意图,diff 描述的才是现实。当你解释不了某一块改动时,那不是吹毛求疵;那是代码库即将不再属于你的时刻。
GitHub:比会话更长寿的记忆
智能体的上下文窗口会遗忘;远端仓库不会。推送一次,就是"我的笔记本上有这个项目"和"这个项目存在"之间的区别。但对氛围编程而言,更深层的价值在于 GitHub 是生成代码与流程相遇的地方:pull request 给每一轮生成爆发圈出一条可审查的边界;CI 在一台智能体控制不了的机器上,用智能体写的测试去跑智能体写的代码;issue 把今晚的"这个哪天该修修"变成未来某个会话——无论人还是智能体——真正能接手的东西。智能体是一位患有失忆症的杰出协作者。GitHub 就是那本让与失忆者协作成为可能的共享笔记本。
一台 Linux 服务器:你能推理明白的部署
部署问题的时髦答案是一个把一切都抽象掉的平台。而氛围编程者的诚实朋友,是一台每月 6 美元、跑着 nginx 的虚拟服务器——因为当智能体(或凌晨一点的你)需要知道网站为什么挂了时,一个带真实日志的 ssh 会话,永远胜过一个挂着状态徽章的仪表盘。
这个作品集网站就是这么跑的:静态构建,tar 走 ssh 传输,nginx 提供纯静态文件,certbot 挂在定时器上。每一个环节都可以检视,都有二十年的文档积累,而且——最关键的——被模型深深地熟知。这些智能体是在几十年的 nginx 配置和 systemd 问答上训练出来的。让它调试某个专有平台的黑箱,它只能猜;让它读一份 nginx 错误日志,它就是巫师。无聊的基础设施不只是更便宜——它是 AI 最擅长运维的基础设施。
层层之中的一课
这里有一个字体排印很久以前就教过我的模式:新的表现层,只能好到它底下那个无聊系统所允许的程度。一款美丽的字体放在破碎的网格上是一团糟;一个杰出的智能体放在没有版本控制的代码库上是一个倒计时。氛围编程的功夫不在提示词——提示词是容易的。功夫在于构建让无畏生成变得安全的基底:你信得过的存档点、持久的记忆,和一台你真正读得懂的服务器。
学习老工具,不是代替氛围,而是为了氛围。是这个栈撑起了这场派对。