氛围编程

缩略图

什么是氛围编程?

氛围编程 是一种由 Andrej Karpathy 于 2024/2025 年提出的、由 AI 驱动的编程方法。使用氛围编程时,你用自然语言提示描述你想要什么,通常由 大型语言模型(LLMs) 为你生成大部分、通常是全部可运行代码。如果你有时间,可以看看由 Rick Rubin 改编的 氛围编程的艺术,以进一步了解 氛围编程之道

这种新方法的一大优势是可访问性,因为没有编程经验的人也可以构建项目,而有经验的开发者则可以在完全投入之前快速原型化新想法。这对初创公司尤其有帮助。缺点是开发者很可能无法完全理解生成代码的工作方式。对于小型副项目来说,这没问题,但对于生产级软件,它可能会导致长期问题和技术债务。

市面上有很多工具能让氛围编程更顺畅。Cursor IDEClaude Code CLIGitHub CopilotLoveableReplitv0 以及其他工具,允许你在自己的环境中直接与 AI 协作,或为氛围编程提供专用界面。就我个人而言,这些项目我主要使用的是 Cursor IDEClaude Code CLI

不过事情是这样的。这些工具和模型都要花钱。使用传统编程时,你主要是在用时间付费;而使用氛围编程时,你是在用钱包付费。如果你不知道自己在做什么,那你付出的就是钱包和时间两者。这里页面上的每个项目,构建成本大约在 $10$20 之间。如果你经常尝试,这笔费用会累积起来。我确实认为,随着这些模型不断改进并变得更高效,成本最终会下降。就目前而言,在决定氛围编程是否适合你的项目时,这一点值得考虑。

出于对可能性的好奇,我自己尝试了氛围编程,并制作了这个页面,通过实际项目来探索这一原理本身。我不只是构建产品,我还在测试并展示氛围编程真正能够做到什么。这纯粹是为了好玩,但它也让我们得以一窥随着这些模型持续改进,未来编码可能会是什么样子。

无限猴子定理

作者

你听说过 无限猴子定理 吗?这是一个哲学思想实验,意思是如果你给无限多只猴子无限多台打字机和无限时间,最终其中一只猴子会仅凭随机敲击按键而打出 莎士比亚 的全部作品。

听起来荒谬,对吧?但有趣的地方在这里。氛围编程有点像这个,只不过猴子换成了 AI 模型,打字机换成了编程语言,而莎士比亚换成了可运行的软件。

想想看。大型语言模型是在数十亿行代码、模式和示例上训练出来的。当你向一个 LLM 提示时,它实际上并不是像人类开发者那样一步一步“思考”你的问题。相反,它是在根据训练期间学到的模式,预测下一个最可能的 token。它本质上是在基于统计上看起来正确的内容生成代码,从而做出有根据的猜测。

而且不知怎么地,它大多数时候都能奏效。模型输出的代码确实能够编译、运行并解决你的问题。不是通过理解,而是通过规模极其庞大的概率模式匹配。它就像宇宙中最复杂的随机文本生成器找到了“正确”答案。但在这里,区别在于速度。那些猴子需要真正的无限时间;而你的 AI?只需要几秒或几分钟。

所以在某种意义上,当你使用氛围编程时,你是在利用数百万行代码模式,并将它们提炼成一个模型来生成解决方案。这不是有意识的问题解决,而是统计魔法。而这正是它如此强大的原因,也正是为什么理解代码实际做了什么仍然很重要。

问题比答案更重要

这里有一件经常被忽视的重要事情。氛围编程的重点不是得到任何一个答案,而是提出正确的问题。想想来自 《银河系漫游指南》Deep Thought 超级计算机。它花了数百万年计算生命、宇宙以及一切的终极问题的答案,结果只给你一个数字 42。从技术上讲,这个答案是正确的,但毫无用处,因为真正的问题是在一开始就要弄清楚该问什么。

氛围编程也是一样。你的提示词就是一切,但上下文管理同样如此。一个模糊的提示会给你模糊的代码,而如果你没有把正确的文件、文档或示例作为上下文提供给模型,它就不会理解你真正需要什么。如果你是懂编程、架构和系统设计的人,你就可以编写详细的提示词,并整理出合适的上下文,引导 LLM 走向优秀的解决方案。但如果你不知道该要求什么,也不知道该提供什么上下文,AI 也不会知道。

这实际上也是为什么氛围编程对有经验的开发者如此强大。我们知道好代码长什么样,我们理解其中的陷阱,并且可以编写提示词把模型引导开这些问题。对于没有技术背景的初学者来说,这就成了真正的限制。你可能会得到能运行的代码,但如果你不理解哪里出了问题,或者下一步该问什么,你就会卡住。

当氛围编程还不够时

最新的 AI 模型令人印象深刻,但它们并不是万能药。氛围编程可以在生产环境中发挥作用,但前提是你必须认真对待它。你需要健壮的单元测试。你需要清晰的系统真值来源,明确系统应该做什么。你需要捕捉问题何时发生或漂移。你还需要 黑客心态。跳出框框思考,尝试用意想不到的方式破坏你的氛围编程项目。你还没有考虑到哪些边缘情况?有人可能会利用哪些安全漏洞?这就是仅仅“能用”的代码与真正“健壮”的代码之间的区别。

不过事情是这样的。AI 不拥有你。你拥有 AI。不要只是接受它生成的内容。审查它。测试它。破坏它。而且说实话,对于代码库中的某些部分,你还是得回到老派编程。沉下心来,深入思考,自己把它写出来。氛围编程能加快速度,但在关键时刻,它并不能替代真正的编程。

我还学到另一件事。有时你只需要结束与 AI 的一个会话,然后开启一个新的。随着对话历史越来越长,模型的表现会下降。它会犯更多错误,生成更不连贯的代码,并且开始更频繁地出现幻觉。如果你不注意并停止,这些错误就会彼此叠加,使情况逐渐变得更糟。这就像反复复印同一份文件。重新开始能让一切保持干净利落。

氛围编程项目

下面是两个项目,stairs仓库)和 transcendental仓库),它们是我使用氛围编程方法构建的。大部分内容由提示词生成,手动工作仅限于提供上下文、调试,以及部署到 GitLab Pages。它们是有趣的静态站点实验,展示了当你通过氛围编程把创意与代码结合起来时,能够实现什么。这两个项目都托管在 GitLab 上。

查看项目

楼梯

超越数