
Andrej Karpathy 刚刚在旧金山举行的Y Combinator AI 创业学院的最新主题演讲,这是Andrej最新的关于软件工业领域正在发生巨变的集大成思考,我给大家把完整的中文文字版和视频版都整理出来了,强烈建议收藏反复观看和阅读
Andrej 融合了他在斯坦福、OpenAI 和特斯拉的工作经验,洞察到一场变革正在发生。软件,正再次迎来巨变。Andrej认为我们已经进入了“软件 3.0”时代——在这个时代,自然语言成为了新的编程接口,而模型则负责完成其余的工作
Andrej深入探讨了这场变革对开发者、用户乃至软件设计本身的意义,并指出:我们不仅仅是在使用新工具,更是在构建一种全新的计算机
演讲的核心观点 (来自 Andrej Karpathy 本人!):
-
可以肯定地说,软件正在再次发生根本性的变革。大语言模型(LLM)是一种全新的计算机,而你用英语就能对它进行编程。因此,从软件的角度来看,它们完全配得上一次重大的版本升级
-
大语言模型兼具了公共设施(utilities)、晶圆厂(fabs)和操作系统(operating systems)的特性 → 这催生了新的“大语言模型操作系统”(LLM OS),它由顶尖实验室(labs)“制造”(fabbed),并像公共设施一样分发(目前如此)。许多历史上的类比都适用——我们正处于计算机发展的“1960 年代”
-
LLM 心理学:大语言模型如同“人类心智的幽灵”(people spirits),它们是人类的随机模拟,其模拟器是一个自回归 Transformer 模型。由于它们基于人类数据训练,因而涌现出一种独特的心理学特性——在某些方面超越人类,但在许多其他方面又难免犯错。鉴于此,我们该如何与它们高效地携手合作呢?
-
大语言模型是“人类心智的幽灵” → 这意味着可以构建“部分自主”的产品
-
大语言模型可以用英语编程 → 这让软件开发变得极其大众化!(就是所谓的“凭感觉编程”或“氛围感编程”/ vibe coding)
-
大语言模型是数字信息新的主要消费者和处理者(在图形界面/人类和 API/程序之外)→ 为 AI 代理(Agent)而构建!
以下是演讲视频以及中文文字版实录
软件再次迎来根本性变革:LLM,用英语编程的新型计算机
今天我很高兴能在这里和大家聊一聊 AI 时代的软件。我听说在座的很多是学生,比如本科生、硕士、博士等等,你们即将进入这个行业。我认为,现在进入这个行业,正是一个极其独特且非常有趣的时刻。究其根本,我认为原因在于,软件正在再次发生变革。
我之所以说“再次”,是因为我其实已经讲过这个话题了。但问题是,软件一直在变,所以我总有大量的新材料来创作新的演讲。而且我认为这次的变革是相当根本的。可以说,软件在过去 70 年里,从未在如此基础的层面上发生过大的变化,然而在最近几年里,它却迅速地变革了大约两次。这意味着有海量的工作等着我们去做,有海量的软件需要我们去编写和重写。
让我们来看一下软件的全貌。如果我们把这张图想象成“软件地图”——这是一个叫做“GitHub 地图”的炫酷工具——这基本上就是所有被编写出来的软件,它们是给计算机下达的、用于在数字空间执行任务的指令。如果你放大看,这里都是不同类型的代码仓库,这就是所有已被写就的代码

几年前,我观察到软件似乎在变化,出现了一种新型的软件。当时我称之为软件 2.0。这个想法是说,软件 1.0 是你为计算机编写的代码;而软件 2.0,基本上就是神经网络,尤其是神经网络的权重。你不是直接编写这些“代码”,更多的是在调整数据集,然后运行一个优化器来生成这些神经网络的参数。当时,神经网络还被看作是一种分类器,和决策树之类的东西差不多。所以,我认为我提出的这个框架是更恰当的
现在,我们实际上有了一个软件 2.0 领域的等价物。我认为 Hugging Face 基本上就是软件 2.0 时代的 GitHub。还有一个叫 Model Atlas 的东西,你可以在上面可视化所有在那里编写的“代码”。顺便说一句,如果你好奇,中间那个巨大的圆点,是 Flux(图像生成器)的参数。每当有人在 Flux 模型之上进行微调时,就相当于在这个空间里创建了一个 Git 提交,从而创造出一种不同风格的图像生成器

所以,基本上我们有:
-
• 软件 1.0:编程计算机的计算机代码。 -
• 软件 2.0:编程神经网络的权重。
这里有一个例子,AlexNet,一个图像识别神经网络。到目前为止,我们直到最近才熟悉的神经网络,都像是功能固定的计算机,比如“图像到类别”的转换器。
我认为,真正发生变化的,也是一个相当根本性的变化,是神经网络通过大型语言模型(LLM)变得可编程了。我视其为一种非常独特的新事物,一种新型的计算机。因此,在我看来,它值得一个新的称号:软件 3.0。基本上,你的提示(prompt)现在就是用来给 LLM 编程的程序。而最了不起的是,这些提示是用英语写的,这真是一种非常有趣的编程语言

所以,总结一下这三者的区别:以情感分类为例,你可以编写一段 Python 代码来做这件事(软件 1.0),或者你可以训练一个神经网络(软件 2.0),再或者,你可以给一个大型语言模型下达提示(软件 3.0)。这里是一个少样本提示(few-shot prompt),你可以想象如何修改它,用一种稍微不同的方式来“编程”这台计算机

所以我们有了软件 1.0、软件 2.0,而且我认为我们正在看到一个新的代码类别在增长。也许你已经注意到,很多 GitHub 上的代码不再是纯粹的代码,而是夹杂了大量的英语。这不仅是一种新的编程范式,更让我惊叹的是,它竟然是用我们的母语——英语——来实现的。
几年前,当这个想法让我大开眼界时,我发了条推文,吸引了很多人的注意。这至今仍是我的置顶推文:我们竟然开始用英语给计算机编程了。
当我在特斯拉工作时,我们致力于开发 Autopilot(自动辅助驾驶)。我当时展示过这样一张幻灯片:你可以想象,车辆的输入在底部,经过一个软件栈,最终输出方向盘和油门的控制。我当时的观察是,Autopilot 中有大量的 C++ 代码,也就是软件 1.0 的代码,同时也有一些用于图像识别的神经网络。我观察到一个趋势:随着我们不断改进 Autopilot,神经网络的能力和规模都在增长。与此同时,所有的 C++ 代码都在被删除,许多最初用软件 1.0 实现的功能和能力,都被迁移到了软件 2.0。举个例子,大量拼接不同摄像头图像信息、以及跨时间信息融合的工作,都由一个神经网络完成了。我们因此得以删除了大量代码。所以,软件 2.0 技术栈毫不夸张地“吞噬”了 Autopilot 的软件栈。
我认为,当时这非常了不起,而现在我们又一次看到了同样的事情发生。我们有了一种新型的软件,它正在吞噬旧的技术栈。我们现在有三种完全不同的编程范式。如果你即将进入这个行业,精通所有这三种范式是个非常好的主意。因为它们各有优劣,你可能需要决定某个功能是用 1.0、2.0 还是 3.0 来实现。你是要去训练一个神经网络?还是仅仅给 LLM 写个提示?或者这应该是一段明确的代码?我们都需要做出这些决策,并且可能需要在这些范式之间流畅地切换

LLM 的三重身份:公共设施、晶圆厂与操作系统
新的 LLM 操作系统,由各大实验室“制造”,并(暂时)像公共设施一样分发。许多历史类比都适用——在我看来,我们正处于计算科学的 1960 年代。
接下来,在第一部分,我想谈谈 LLM,以及如何理解这个新的范式、它的生态系统是怎样的。这种新型计算机到底是什么样子的?它的生态系统又是什么样的?
我被吴恩达(Andrew Ng)多年前的一句话深深打动。我想 Andrew 马上就要在我之后演讲了。他当时说:“人工智能是新的电力。” 我确实认为这句话捕捉到了一些非常有趣的东西。LLM 现在无疑感觉具备了公共设施(utilities)的属性。
LLM 实验室,比如 OpenAI、Gemini、Anthropic 等,它们投入资本支出(capex)来训练 LLM,这就像是建设电网。然后,它们投入运营支出(opex),通过 API 向我们所有人提供智能服务。这是通过按量计费的方式实现的,比如我们按每百万 token 付费。我们对这种 API 的要求,也非常像对公共设施的要求:我们要求低延迟、高可用性、质量稳定等等

在电力系统中,你会有转换开关,可以在电网、太阳能、电池或发电机之间切换电源。在 LLM 领域,我们可能有像 OpenRouter 这样的服务,可以轻松地在不同类型的 LLM 之间切换。因为 LLM 是软件,它们不争夺物理空间,所以同时拥有六个“电力供应商”并能在它们之间切换是完全没问题的,因为它们不构成那么直接的竞争
还有一点很有意思,就在过去几天,许多 LLM 服务都宕机了,人们感觉被困住,无法工作。这让我觉得很奇妙:当最先进的 LLM 宕机时,实际上就像是世界范围内的“智能断电”(intelligence brownout),就像电网电压不稳一样。我们对这些模型的依赖越深,地球就会变得越“笨”。这种依赖已经非常显著,而且我认为还会继续增长。
但 LLM 不仅仅有公共设施的属性,我认为说它们具备晶圆厂(fabs)的某些属性也是公平的。原因在于,构建 LLM 所需的资本支出确实非常庞大,这可不像建个发电站那么简单。你投入的是巨额资金。而且,这项技术的技术树正在飞速发展。我们身处一个拥有深度技术树、研发秘密的世界,而这些都集中在 LLM 实验室内。不过,这个类比也有点模糊,因为正如我所说,这是软件,而软件的可防御性较低,因为它非常易变

所以,这是一个值得思考的有趣问题。你可以做出很多类比,比如 4 纳米工艺节点,或许类似于一个拥有特定最大浮点运算能力的计算集群。当你使用英伟达的 GPU,只做软件而不做硬件时,这就像是无厂模式(fabless model)。但如果你像谷歌一样,自己制造硬件,在 TPU 上训练,那更像是英特尔模式(Intel model),即拥有自己的晶圆厂。所以这里有些类比是说得通的。
但实际上,我认为最贴切的类比或许是:在我看来,LLM 与操作系统(operating systems)有非常强的相似性。这不仅仅是电或水,不是那种从水龙头里流出来的商品。它们正日益成为复杂的软件生态系统。它们不是像电力那样的简单商品

让我感到有趣的是,这个生态系统的形成方式也与操作系统非常相似。你有少数几个闭源提供商,比如 Windows 或 macOS,然后你有一个开源的替代品,比如 Linux。对于 LLM,我们同样有几个相互竞争的闭源提供商,而 Llama 生态系统目前可能最接近于未来可能成长为像 Linux 那样的事物。当然,现在还为时过早,因为它们还只是简单的 LLM,但我们开始看到它们将变得远比现在复杂。这不仅仅是 LLM 本身,还关乎工具使用、多模态以及所有这些如何协同工作

当我前段时间意识到这一点时,我试着画了一张草图。在我看来,LLM 就像一个新的操作系统。LLM 是一种新型计算机,它就像是 CPU 的等价物。上下文窗口就像是内存。而 LLM 则利用所有这些能力,来协调内存和计算,以解决问题。从这个角度看,它确实非常像一个操作系统。
再举几个例子。比如你想下载一个应用,你访问 VS Code 官网,你可以下载并在 Windows、Linux 或 Mac 上运行它。同样地,你可以拿一个 LLM 应用,比如 Cursor,然后在 GPT、Claude 或 Gemini 系列上运行它,只是一个下拉菜单的选择而已。所以在这方面也很相似

更多让我感触的类比是,我们仿佛正处于1960年代左右的时期。对于这种新型计算机来说,LLM 的算力仍然非常昂贵。这迫使 LLM 集中在云端,而我们都只是通过网络与之交互的“瘦客户端”。我们没有人能完全独占这些计算机。因此,采用分时共享(time-sharing)是合乎逻辑的,我们都只是云端计算机运行时批处理(batch)中的一个维度。这与那个时代的计算机非常相像:操作系统在云端,所有东西都通过流式传输,并且有批处理。所以,LLM 的个人计算革命尚未到来,因为它在经济上还不划算。但我想有些人正在尝试,比如 Mac mini,事实证明它非常适合某些 LLM,因为如果你做单批次推理(batch-one inference),这完全是内存密集型的,所以效果不错。我认为这些可能是个人计算的一些早期迹象,但这还没有真正发生。它会是什么样子,没人知道。也许在座的某些人会去发明它是什么,它如何工作,或者它应该是什么样

还有一个类比我想提一下。每当我在文本界面中直接与 ChatGPT 或某个 LLM 对话时,我都感觉自己像是在通过终端与操作系统对话。它就是文本,是与操作系统的直接交互。一个通用的图形用户界面(GUI)还没有真正被发明出来。比如,ChatGPT 应该有一个除了聊天气泡之外的 GUI 吗?当然,我们稍后会讲到的一些应用有 GUI,但还没有一个跨所有任务的通用 GUI
不过,LLM 在某些相当独特的方面也与早期的操作系统和计算有所不同。我曾写过关于一个让我印象深刻的、非常与众不同的特性:LLM 颠覆了技术扩散的方向。通常,对于像电力、密码学、计算、飞行、互联网、GPS 等许多革命性新技术,政府和企业通常是第一批用户,因为它们新技术、价格昂贵等等,之后才会扩散到消费者层面。但我感觉 LLM 却反过来了。比如,早期的计算机主要是用于弹道计算和军事用途,但对于 LLM,它关心的却是如何煮鸡蛋之类的事情。这确实是我的很多用法。所以,我们有了一台神奇的新计算机,它却在帮我煮鸡蛋,而不是帮政府做一些非常了不得的事情,比如军事弹道计算或某些特殊技术,这让我觉得很奇妙。事实上,企业和政府在采用这些技术方面,反而落后于我们普通大众。这完全是反向的。我认为这或许能为我们思考如何使用这项技术,或者它的首批应用会在哪里提供一些启示。
总结一下到目前为止的观点:LLM 实验室、LLM,我认为用这些词语是准确的。但 LLM 是复杂的操作系统,它们处于计算科学的 1960 年代,我们正在重新经历计算的演进。它们目前通过分时共享的方式提供,并像公共设施一样分发。前所未有的是,它们并非掌握在少数政府和企业手中,而是掌握在我们所有人手中。因为我们都有电脑,它只是软件,而 ChatGPT 就像是被瞬间传送到了数十亿人的电脑上,一夜之间。这太疯狂了。我至今仍觉得这事不可思议。而现在,轮到我们进入这个行业,为这些计算机编程了。这太疯狂了。所以我认为这非常了不起。
LLM 心理学:人格幽灵、超人与凡人的结合体
LLM = “人格幽灵”,是对人的随机模拟,其模拟器是一个自回归 Transformer。由于它们在人类数据上训练,因此拥有一种涌现出的心理特质,既在某些方面是超人,又在许多其他方面容易犯错。鉴于此,我们如何与它们高效地携手合作?
在为 LLM 编程之前,我们必须花点时间思考这些东西到底是什么。我尤其喜欢谈论它们的“心理学”。我喜欢把 LLM 想象成 “人格幽灵”(people spirits)。它们是对人的随机模拟,而这个模拟器恰好是一个自回归的 Transformer。Transformer 是一个神经网络,它以 token 为单位,一块一块地向前推进,每个 chunk 的计算量几乎相等。这个模拟器当然包含了一些权重,我们用互联网上所有的文本数据来拟合它。最终,你就得到了这样一个模拟器。因为它是在人类数据上训练的,所以它拥有一种类似人类的、涌现出的心理特质

你首先会注意到的当然是,LLM 拥有百科全书式的知识和记忆力。它们能记住很多东西,远超任何单个的人类。这让我想起了电影《雨人》(Rainman),我非常推荐大家去看,那是一部很棒的电影。达斯汀·霍夫曼在片中扮演一个自闭症天才,他拥有近乎完美的记忆力,可以读完一本电话簿后记住所有的名字和号码。我感觉 LLM 非常相似,它们能轻易记住 SHA 哈希值和各种各样的事情。所以,在某些方面,它们无疑拥有超能力

但它们也有一系列的,我称之为 “认知缺陷”。它们会频繁地产生幻觉,编造事实,并且没有一个非常好的、或者说至少是不足够的内部自我认知模型。虽然这一点有所改善,但仍不完美。它们表现出 “参差不齐的智能”(jagged intelligence)。它们在某些问题解决领域是超人,但又会犯一些基本上没有人类会犯的错误,比如坚称 9.11 大于 9.9,或者草莓(strawberry)里有两个 R。这些都是些著名的例子。基本上,你随时可能被它粗糙的边缘绊倒

它们还患有 “顺行性遗忘症”(anterograde amnesia)。我这里想说的是,如果一个新同事加入你的公司,他会随着时间的推移了解你的组织,并积累大量关于组织的背景知识。他们回家睡觉,巩固知识,并逐渐建立起专业技能。LLM 本身并不会这样做。这在 LLM 的研发中也尚未得到解决。所以,上下文窗口实际上更像是“工作记忆”,你必须非常直接地去编程这个工作记忆,因为它们不会默认就变得更聪明。我认为很多人都被这方面的类比误导了

在流行文化中,我推荐大家看两部电影:《记忆碎片》(Memento)和《初恋50次》(50 First Dates)。在这两部电影里,主角的“权重”是固定的,他们的“上下文窗口”每天早上都会被清空。当这种情况发生时,去工作或维持人际关系会变得极具挑战性。而这正是 LLM 时时刻刻在经历的

还有一点我想指出,是与使用 LLM 相关的安全限制。例如,LLM 相当容易上当受骗,它们容易受到提示注入(prompt injection)风险的攻击,可能会泄露你的数据等等。还有许多其他与安全相关的考量。
所以,长话短说,你必须同时面对这样一个事实:这是一个拥有超能力,但又有一堆认知缺陷和问题的存在。然而它们又极其有用。那么,我们该如何为它们编程?如何绕过它们的缺陷,同时享受它们的超能力?
转换思路,谈谈机遇…
从“人格幽灵”到“部分自治产品”
现在我想切换到谈论机遇:我们该如何使用这些模型?最大的机遇在哪里?这并非一个详尽的列表,只是我在这次演讲中认为有趣的一些点。
我首先感到兴奋的,是我称之为 “部分自治应用”(partial autonomy apps) 的东西。以编程为例,你当然可以直接去 ChatGPT,开始复制代码、粘贴错误报告,然后获取代码再粘贴回来。但你为什么要这么做呢?为什么要直接和操作系统打交道?拥有一个专门为此设计的应用要合理得多。我想你们中的许多人都在用 Cursor,我也在用。Cursor 就是你想要的东西,而不是直接去 ChatGPT。我认为 Cursor 是早期 LLM 应用的一个绝佳范例,它具备了许多我认为在所有 LLM 应用中都通用且有用的特性

具体来说,你会注意到,我们有一个传统的界面,允许人类像以前一样手动完成所有工作。但除此之外,我们现在有了这个 LLM 集成,它让我们能以更大的区块进行操作。我认为 LLM 应用共享的一些有用特性包括:
-
1. LLM 负责大量的上下文管理工作。 -
2. 它们编排对 LLM 的多次调用。 以 Cursor 为例,它在后台调用了用于处理所有文件的 embedding 模型、实际的聊天模型,以及将代码变更(diffs)应用到代码的模型,这一切都为你编排好了。 -
3. 应用专属的图形界面(GUI)及其重要性。 这一点非常重要,但可能没有得到应有的重视。因为你不想直接用文本与操作系统对话。文本很难阅读、解释和理解。而且,你也不想在文本中本地执行某些操作。直接看到一个用红色和绿色表示的变更 diff,看到增加了什么、删除了什么,要容易得多。用 Command + Y
接受或Command + N
拒绝,也比我必须在文本中输入要方便得多。GUI 让人类能够审计这些易错系统的工作,并提高效率。 我稍后会再回到这一点。 -
4. 最后一点我想指出的特性是,我称之为 “自治滑块”(autonomy slider)。例如,在 Cursor 中,你可以只用 Tab 补全,这时你主要还是自己掌控。你可以选中一段代码,用 Command + K
只修改那一段。你可以用Command + L
修改整个文件。或者你可以用Command + I
,让它在整个代码库里自由发挥。这就是完全自治的智能体(agentic)版本。所以,你掌控着这个自治滑块,根据手头任务的复杂性,你可以调整你愿意放弃的自主权程度。
再举一个相当成功的 LLM 应用的例子,Perplexity。它也具备我刚才在 Cursor 中指出的非常相似的特性。它打包了大量信息,编排了多个 LLM,它有一个 GUI 让你审计它的部分工作,比如它会引用来源,你可以检查它们。它也有一个自治滑块:你可以做一个快速搜索,或者进行“研究”(research),或者进行“深度研究”(deep research),然后 10 分钟后再回来看结果。这些都是你交给工具的不同程度的自主权

所以我的问题是,我感觉大量软件都会变得部分自治。我正在思考这会是什么样子。对于你们中许多维护产品和服务的人来说,你将如何让你的产品和服务部分自治?LLM 能看到人类能看到的一切吗?LLM 能以人类能采取的所有方式行动吗?人类能监督并保持在这个活动循环中吗?因为再说一次,这些是易错的、尚不完美的系统。一个在 Photoshop 里的“diff”会是什么样?而且,现在很多传统软件有各种开关和设置,都是为人类设计的。所有这些都必须改变,变得能为 LLM 所用。
对于许多我提到的 LLM 应用,有一点我想强调,但我不确定它是否得到了应有的关注。我们现在正与 AI 合作,通常是它们进行生成,我们人类进行验证。让这个循环尽可能快地运转,符合我们的利益,这样我们才能完成大量工作。我认为有两种主要方式可以实现这一点:

-
1. 大幅加快验证速度。 我认为 GUI 在这方面极其重要,因为它利用了我们大脑中的计算机视觉 GPU。阅读文本是费力的,不好玩,但看东西是好玩的,它就像一条通往你大脑的高速公路。所以我认为 GUI 对于审计系统和视觉化表示非常有帮助。 -
2. 我们必须给 AI 系上缰绳。 我认为很多人对 AI 智能体(AI agents)过于兴奋了。给我一个一万行代码的变更提交到我的代码库,这对我没什么用。我仍然是瓶颈。即使那一万行代码是瞬间生成的,我必须确保它没有引入 bug,确保它做的是正确的事情,确保没有安全问题等等。
所以,基本上,让这两者(生成与验证)的流程变得非常快,符合我们的利益。我们必须设法给 AI 系上缰绳,因为它反应太过度了。这就是我在进行 AI 辅助编程时的感受。如果我只是做一些小规模的编码,一切都很好。但如果我真的想完成工作,有一个反应过度的智能体在做各种事情,感觉并不好

这张幻灯片不太好,抱歉。但我想,和你们许多人一样,我正在摸索一些在我的编码工作流中利用这些智能体的方法。在我自己的工作中,我总是害怕得到太大的变更(diffs)。我总是以小步、增量的方式进行,确保一切都好,我想让这个循环转得非常非常快。我专注于单一、具体的小块工作。我想你们很多人可能也在形成类似的使用 LLM 的工作方式。
我也看到一些博客文章,试图总结出与 LLM 工作的最佳实践。这是我最近读到的一篇,我觉得写得很好。它讨论了一些技巧,其中一些就与如何给 AI 系上缰绳有关。举个例子,如果你的提示很模糊,AI 可能不会完全按你的意图行事,那样验证就会失败。如果验证失败,你就会开始兜圈子。所以,花多一点时间,让你的提示更具体,这会增加验证成功的概率,你就能继续前进。这更有意义。
我认为我们很多人最终都会找到这样的技巧。在我自己的工作中,我目前对 AI 和 LLM 时代的教育是什么样子的很感兴趣。对我来说,一个很大的思考点就是如何给 AI 系上缰绳。我不认为直接去 ChatGPT 说“嘿,教我物理”是行得通的。因为 AI 会在“树林里迷路”。所以对我来说,这实际上是两个独立的 App:一个是给老师创建课程的 App,另一个是接收课程并服务于学生的 App。在这两种情况下,我们都有了一个中间产物——课程,它是可审计的,我们可以确保它质量好、内容一致。AI 被限制在某个教学大纲、某个项目进度的“缰绳”之内。这是给 AI 系上缰绳的一种方式,我认为这样成功的可能性要大得多,AI 也不会迷路
我还想提到的一个类比是,我对部分自治并不陌生。我在特斯拉为此工作了五年。那也是一个部分自治产品,并且有很多共同的特性。比如,仪表盘上就是 Autopilot 的 GUI,它向我展示神经网络看到了什么。我们也有自治滑块。在我任职期间,我们为用户增加了越来越多的自动化任务
我想简单讲一个故事。我第一次乘坐自动驾驶汽车是在 2013 年。我有一个在 Waymo 工作的朋友,他邀请我在帕洛阿尔托兜了一圈。我当时用谷歌眼镜拍了这张照片。你们很多人可能太年轻,都不知道那是什么了。但当时这可是风靡一时。我们坐上这辆车,在帕洛阿尔托的高速公路和街道上行驶了大约 30 分钟。那次驾驶是完美的,零干预。那是 2013 年,距今已经 12 年了。这让我很震惊,因为当我经历那次完美的驾驶、完美的演示时,我感觉自动驾驶马上就要实现了,这太不可思议了。但 12 年后的今天,我们仍然在研究自动驾驶,仍在研究驾驶智能体。甚至现在,我们都还没有真正解决这个问题。你可能会看到 Waymo 的车在路上跑,看起来是无人驾驶,但背后仍有大量的远程操作和人工介入。所以我们甚至还没有宣布成功。但我认为它最终肯定会成功,只是花了很长时间

所以我觉得,软件真的很难,就像驾驶一样棘手。所以当我看到像“2025 年是智能体元年”这样的说法时,我会非常担忧。我感觉,这应该是智能体的十年,这需要相当长的时间。我们需要人类在环,我们需要谨慎地做这件事。这是软件,我们严肃点。
还有一个我总是在思考的类比,就是钢铁侠战衣。我一直很喜欢钢铁侠,我认为它在很多方面,对于技术及其发展方向的描绘都是正确的。我喜欢钢铁侠战衣的一点是,它既是一种增强(augmentation)——托尼·斯塔克可以驾驶它,它同时也是一个智能体(agent)——在一些电影里,钢铁侠战衣相当自主,可以飞来飞去找到托尼。这就是自治滑块:我们可以构建增强工具,也可以构建智能体。我们想两者兼顾

但在现阶段,与这些易错的 LLM 合作,我会说,我们需要的不是钢铁侠机器人,而更多是钢铁侠战衣。 不是去构建炫酷的自主智能体演示,而是去构建部分自治的产品。这些产品有定制的 GUI 和用户体验,这么做是为了让人类的“生成-验证”循环变得非常快,但我们又不失一个愿景:原则上,这项工作是可以自动化的。你的产品里应该有一个自治滑块,你应该思考如何滑动这个滑块,让你的产品随着时间的推移变得更加自主。这就是我认为存在大量机会的地方,在这些类型的产品里

用英语编程:软件的普及化与“氛围感编程”的兴起
现在我想换个角度,谈谈另一个我认为非常独特的维度。不仅出现了一种新的、允许软件实现自主性的编程语言,而且正如我所说,它还是用英语编程的,这是一种自然的界面。突然之间,每个人都成了程序员,因为每个人都会说像英语这样的自然语言。这对我来说是极其利好且非常有趣的,也是完全前所未有的。过去,你可能需要花五到十年学习某样东西,才能在软件领域做点什么。现在不再是这样了

我不知道有没有人听说过 “氛围感编程”(vibe coding)?就是这条推文引入了这个词。但我听说这现在已经成了一个大梗了。关于这个有个有趣的故事:我在推特上大概有 15 年了,但我仍然不知道哪条推文会火,哪条会无人问津。我当时以为这条会是后者,就是个灵光一闪的想法。但它成了一个彻头彻尾的梗,我真的搞不懂。但我想,它触动了大家的共鸣,给了一种大家都能感觉到但说不出来的东西一个名字。现在它都有维基百科页面了

是的,这现在成了我的一个重大贡献之类的了
Hugging Face 的 Tom Wolf 分享了一个我很喜欢的、非常美好的视频。这些是正在进行“氛围感编程”的孩子们

我发现这个视频特别暖心。我爱这个视频。你怎么能看着这个视频还对未来感到悲观呢?未来是美好的。我认为这最终会成为通向软件开发的入门“敲门砖”。我对下一代的未来并不悲观。是的,我爱这个视频。
我也试了一下“氛围感编程”,因为它太好玩了。当你想构建一个超级定制化、似乎不存在的东西,并且只是因为是周六想随便搞搞时,“氛围感编程”就太棒了。我做了这个 iOS 应用,我其实不会用 Swift 编程,但我能做出一个超级基础的应用,这让我非常震惊。我就不解释它是什么了,挺傻的。但这只花了一天的工作量,当天晚上它就在我手机上运行了。我当时就觉得:“哇,太神奇了。” 我不必为了入门而去读五天的 Swift 文档

我还“氛围感编程”了这个叫 MenuGen 的应用。它现在是上线的,你可以在 menu.gen.app 上试试。我当时遇到的问题是,每次去餐厅,我看完菜单,完全不知道那些菜是什么,我需要图片。但没有这样的东西。所以我想:“嘿,我要‘氛围感编程’一个。”

它看起来是这样的,你访问 menu.gen.app,给菜单拍张照,然后 MenuGen 就会生成图片。每个注册用户都能免费获得 5 美元的额度,因此这成了我生活中的一个主要成本中心。所以这对我来说是一个负收入应用。我在 MenuGen 上已经亏了一大笔钱了。
但 MenuGen 对我来说最奇妙的一点是,代码本身,也就是“氛围感编程”的那部分,反而是最简单的部分。 大部分的工作,是在我试图让它真正可用的时候产生的:身份验证、支付、域名、Vercel 部署……这些都非常困难。而且所有这些都不是代码,所有这些 DevOps 的东西都是我在浏览器里点来点去完成的。这过程极其缓慢,又花了我一周时间

这真的很有趣:我在几小时内就在我笔记本上做出了 MenuGen 的演示版,但之后花了一周时间才让它真正上线。原因就是,这个过程太烦人了。比如,如果你想给你的网页加上谷歌登录,我知道这字很小,但这是 Clerk 这个库告诉我的海量指令,关于如何集成它。这太疯狂了。它告诉我:去这个 URL,点击这个下拉菜单,选择那个,再去那个地方,点击那个。它像电脑一样告诉我应该采取什么行动。你来做啊,为什么让我来做?搞什么鬼!我不得不跟着所有这些指令操作,太疯狂了
为智能体而构建:迎接数字信息的全新消费者
因此,我演讲的最后一部分,关注的就是:我们能直接为智能体(agents)而构建吗?我不想做这些工作,能让智能体来做吗?

粗略地说,我认为出现了一个全新类别的数字信息消费者和操纵者。过去只有通过 GUI 的人类,或通过 API 的计算机。现在,我们有了一个全新的东西——智能体。它们是计算机,但又有点像人,对吧?它们是互联网上的“人格幽灵”。它们需要与我们的软件基础设施交互。我们能为它们而构建吗?这是一个新事物
举个例子,你可以在你的域名上放一个 robots.txt
文件,来指示——或者说建议——网络爬虫在你的网站上应该如何行为。同样地,你或许可以有一个 lm.txt
文件,就是一个简单的 Markdown,告诉 LLM 这个域名是关于什么的。这对 LLM 来说非常易读。如果它非得去获取你网页的 HTML 并尝试解析,那将非常容易出错,很困难,而且会搞砸。所以我们可以直接与 LLM 对话,这值得做

大量的文档目前是为人类编写的。你会看到列表、粗体、图片,这些都无法被 LLM 直接访问。我现在看到一些服务正在将它们的文档大量地转向专门为 LLM 设计。例如,Vercel 和 Stripe 是这方面的先行者,但我已经看到了更多。它们用 Markdown 提供文档。Markdown 对 LLM 来说超级容易理解,这太棒了

再举一个我自己的简单例子。也许你们有人知道 3Blue1Brown,他在 YouTube 上制作非常精美的动画视频。是的,我爱他写的那个库 Manim。我想自己也做一个。Manim 有详尽的文档说明如何使用。我不想真的去读它,所以我把整个文档复制粘贴给了一个 LLM,然后描述了我想要什么。它直接就成功了。LLM “氛围感编程”给了我一个我想要的动画。我当时就觉得:“哇,太神奇了。” 所以,如果我们能让文档对 LLM 来说易于理解,将会解锁海量的用途。我认为这非常棒,应该更多地发生

另一件我想指出的事是,不幸的是,这不仅仅是把你的文档变成 Markdown 那么简单,那只是容易的部分。我们实际上必须改变文档的内容。任何时候你的文档里说“点击这里”,这都很糟糕。LLM 目前无法本地执行这个操作。所以 Vercel 正在把所有出现的“点击”替换为等效的、你的 LLM 智能体可以代为执行的 curl
命令。我认为这非常有趣

当然,还有 Anthropic 的模型上下文协议(Model Context Protocol),这也是另一种直接与作为新消费者的智能体对话的协议。我对这些想法非常看好。
另一件我非常喜欢的事,是出现了一些小工具,它们帮助以 LLM 友好的格式摄取数据。比如,当我访问一个 GitHub 仓库,像我的 nanoGPT 仓库,我没法把它喂给一个 LLM 然后提问,因为这是 GitHub 上的人类界面。但当你把 URL 从 github.com
改成 git-ingest.com
,它实际上会把所有文件拼接成一个巨大的文本,并创建一个目录结构等等。这样就准备好被复制粘贴到你喜欢的 LLM 里去用了

一个可能更极致的例子是 Deep Demos,它不只是提供文件的原始内容。这是来自 Devin 的,他们让 Devin 分析 GitHub 仓库,然后 Devin 会为你的仓库构建一整套文档页面。你可以想象,把这个复制粘贴到你的 LLM 里会更有帮助。我喜欢所有这些你只需要改一下 URL 就能让某些东西变得能被 LLM 访问的小工具

所以,这一切都很好。我认为应该有更多这样的东西。我还想补充一点,未来 LLM 完全有可能——不,甚至今天就可能——四处游走并点击东西。但我仍然认为,与 LLM 相向而行,让它们更容易地访问所有这些信息,是非常值得的。因为使用那些(视觉点击)工具仍然相当昂贵,也困难得多。所以我确实认为,会有大量长尾的软件不会主动适配,因为它们不是“活跃玩家”的代码库或数字基础设施,我们将需要这些工具。但对于其他所有人来说,我认为在某个中间点相遇是非常值得的。所以,我对两种方式都看好

总结一下:这是一个多么令人惊叹的、进入行业的时刻!我们需要重写海量的代码。大量的代码将由专业人士和编码者来编写。这些 LLM 有点像公共设施,有点像晶圆厂,但尤其像操作系统。但现在还太早了,就像是 1960 年代的操作系统,很多历史类比都适用。这些 LLM 又像是易错的“人格幽灵”,我们必须学会与它们合作。为了做好这一点,我们需要调整我们的基础设施来适应它。

当你在构建这些 LLM 应用时,我描述了一些与这些 LLM 有效合作的方法,以及一些使之成为可能的工具,以及你如何能非常快速地转动这个(生成-验证)循环,从而创造出部分自治产品。然后,是的,大量的代码也需要更直接地为智能体而编写。
但无论如何,回到钢铁侠战衣的类比,我认为在未来十年左右,我们将看到的是,我们会把那个自治滑块从左向右移动。那会是什么样子,将会非常有趣。我迫不及待地想和大家一起去构建它
参考:
⭐
(文:AI寒武纪)