Karpathy 最新演讲精华:软件3.0时代,每个人都是程序员

播客内容由 Listenhub 生成


Andrej Karpathy 昨天在 YC 的旧金山创业大会上发表了一场 40 分钟的演讲。

软件行业正在经历的范式转变。介绍了软件从传统编码(软件 1.0)到神经网络(软件 2.0)的演变,并着重阐述了由大型语言模型(LLMs)驱动的软件 3.0 时代。

在这个新时代,自然语言提示成为编程方式,他将 LLMs 比作 20 世纪 60 年代的操作系统,预示着个人计算的下一次革命。


Karpathy 真的很神奇,每次都能用非常形象的比喻让不那么专业的人理解他讲的事情。比如这个Agent 构建路线上钢铁侠的比喻:

他认为,我们应该专注于构建“钢铁侠战甲”(增强工具),而不是“钢铁侠机器人”(完全自主Agent)这些产品应具备自定义 GUI 和用户体验,以加速人类的生成-验证循环,同时仍提供自主性滑块,允许产品随时间变得更加自主。


软件开发范式1.0、2.0和3.0的定义是什么

软件 1.0:传统代码

定义和构成:软件1.0是程序员用诸如Python、C++等编程语言直接编写的明确指令12。每一行代码都是程序员为计算机设定的具体任务指令,使其在数字空间中执行特定功能12。它是我们所熟悉的“经典软件栈”2。

编程方式:人类通过编写源代码(例如.cpp文件)来直接编程23。源代码随后被编译成可执行的二进制文件3。

代码库示例:GitHub可以被视为软件1.0代码的“地图”或等同物,展示了所有这些通过指令编写的代码14。

特点和挑战:

  • 计算异构性:传统软件的指令集非常异构和复杂。
  • 非恒定运行时间与内存使用:代码的执行路径可能导致运行时间不固定,且存在动态内存分配,可能导致内存泄漏或不确定的内存使用。
  • 可移植性挑战:与神经网络相比,传统二进制文件或脚本在任意计算配置上运行的难度更大。
  • 迭代灵活性差:如果需要将C++代码的运行速度提高一倍,调整系统以适应新的规范将非常困难。
  • 模块化限制:软件通常被分解为通过公共函数、API或端点进行通信的模块,但它们通常无法像软件2.0模块那样在更深层次上协同优化。

示例:特斯拉自动驾驶系统中最初的C++代码就是软件1.0的典型例子。

软件 2.0:神经网络权重

定义和构成:软件2.0的核心是神经网络的权重。这些权重是一种更抽象、对人类不友好的语言。它不是由人类直接编写的,因为神经网络通常有数百万个权重,手动编写极其困难。

编程方式:编程过程不是直接写代码,而是通过调整数据集,然后运行优化器来创建神经网络的参数(权重)。换句话说,其“源代码”包括定义所需行为的数据集和神经网络架构的粗略骨架。神经网络的训练过程将数据集“编译”成最终的神经网络(二进制文件)。

代码库示例:Hugging Face的Model Atlas被认为是软件2.0领域的GitHub等价物,可以可视化神经网络的参数。

特点和优势

  • 数据驱动:软件开发主要表现为整理、增长、处理和清洗标注数据集。
  • 吞噬软件1.0:随着时间推移,软件2.0在功能和规模上不断增长,并逐渐取代了许多原本由软件1.0编写的功能。
  • 计算同质性:典型的神经网络主要由两种操作组成:矩阵乘法和阈值处理(ReLU),这使得其正确性和性能保证更容易实现。
  • 易于硬件实现:神经网络指令集相对较小,更容易在定制ASIC或神经形态芯片等更接近硅的硬件中实现。
  • 恒定运行时间与内存使用:神经网络的每次前向传播迭代所需计算量固定,内存使用量也恒定,避免了动态内存分配和内存泄漏的问题。
  • 高度可移植:矩阵乘法序列在不同计算配置上运行比传统二进制文件更容易。
  • 高度灵活:可以轻松调整网络(如通过移除一半通道或增加更多通道)以满足新的性能或准确性要求,只需重新训练即可。
  • 模块融合优化:如果两个独立训练的软件2.0模块交互,可以通过反向传播对整体进行优化,使其融合成一个最优的整体。
  • 超人性能:在图像/视频和声音/语音等领域,神经网络通常能产生比人类编写的代码更好的结果。
  • 示例:用于图像识别的AlexNet神经网络,特斯拉自动驾驶中的图像识别神经网络,以及AlphaGo Zero等游戏AI。

局限性

  • 可解释性差:最终得到的网络虽然工作良好,但很难解释其工作原理。
  • 非直观的失败:可能以非直观或令人尴尬的方式失败,或者“静默失败”,例如悄无声息地采纳训练数据中的偏见。
  • 易受对抗性攻击:存在对抗性样本和攻击,凸显了其非直观的特性。

软件 3.0:大型语言模型(LLMs)的提示

定义和构成:软件3.0是大型语言模型(LLMs)通过提示(prompt)进行编程的新范式。LLMs本身被视为一种新型计算机。

编程方式:编程语言是自然语言,尤其是英语。用户通过输入提示来“编程”LLM,使其执行特定任务。

特点和优势

  • 自然语言接口:编程不再需要专业的编程知识,每个人都能通过自然语言进行编程,因为每个人都说自然语言。
  • 新型计算体验:LLMs被类比为一种新的操作系统。与LLM的文本聊天就像通过终端直接访问操作系统。
  • 用户普及:这种技术扩散方向与传统技术相反,LLMs首先为普通个人带来了巨大的能力提升,而非政府或大型企业。ChatGPT是历史上增长最快的消费级应用。
  • 部分自主应用:软件3.0的机遇在于开发部分自主的应用,这些应用能整合LLMs的能力,执行更多上下文管理、多模型编排、提供特定应用的GUI,并允许用户通过“自主性滑块”调整AI的介入程度。
  • 文档优化:未来的文档将需要为Agent(agents)而非人类编写,例如将“点击”指令替换为LLMs可以执行的cURL命令。

局限性

  • 类似1960年代的计算:LLM的计算目前仍然非常昂贵且集中在云端,类似于1960年代的大型机和分时系统时代,个人计算革命尚未到来。
  • “人化精神”的缺陷:LLMs被视为“人的精神的随机模拟”,具有百科全书般的知识,但也存在认知缺陷,如幻觉、不均匀智能(在某些领域超人,但在另一些领域犯基本错误)、顺行性遗忘(无法通过学习整合知识到权重中,每次交互上下文会被擦除)以及容易受骗(容易受到提示注入攻击,可能泄露数据)。
  • 需要人类监督:由于LLMs仍然是易错的系统,需要人类在循环中进行监督和验证,因此快速的“生成-验证”循环和“系好AI的缰绳”至关重要,以避免生成过大或错误的代码。


 演讲全文总结 

如何理解大语言模型

Andrej Karpathy 提出了 LLMs 的多种类比,以帮助人们理解其本质:

公用事业 (Utilities) 的特性

LLMs 像电力一样,需要巨大的资本支出(CAPEX)进行训练(相当于建设电网),并通过 API 提供服务(OPEX,按量付费),用户对低延迟、高可用性和一致质量有需求。当领先的 LLMs 停止运行时,就像“智能断电”,整个世界仿佛变得“更笨”。OpenRouter 扮演着“电源转换开关”的角色,允许用户在不同 LLM 提供商之间切换。

晶圆厂 (Fabs) 的特性

LLMs 的训练需要巨大的资本投入,涉及深层技术树的研发和秘密。使用 NVIDIA GPU 训练模型类似于“无晶圆厂”模式,而像 Google 这样拥有 TPU 并训练自己的模型,则类似于拥有“晶圆厂”(如 Intel)。然而,由于软件的延展性,其防御性不如物理基础设施。

操作系统 (Operating Systems) 的特性

这是最恰当的类比。LLMs 正日益成为复杂的软件生态系统,而非简单的商品。LLM 应用(如 Cursor)可以在不同的 LLM 后端(如 GPT、Claude、Gemini)上运行,就像 VS Code 可以在 Windows、Mac 或 Linux 上运行一样。我们正处于 LLM 计算的“1960 年代”:计算资源昂贵,LLMs 集中在云端,用户通过网络进行“分时”访问,个人计算革命尚未到来。与 LLM 直接的文本交互感觉就像通过终端与操作系统对话,而通用的图形用户界面(GUI)尚未被发明。

技术扩散方向的翻转

与以往大多数颠覆性技术(如电力、密码学、互联网、GPS)自政府/军事领域开始,然后扩散到企业,最后才普及到消费者不同,LLMs 展现出惊人的逆转。ChatGPT 是历史上增长最快的消费者应用,它为普通人带来了不成比例的巨大益处,例如写作、编程、翻译、辅导、头脑风暴等,而其在企业和政府层面的影响则相对滞后和不明显。这是因为 LLMs 提供了广泛但并非深厚的“准专业知识”,这对于个人来说是巨大的能力提升,因为他们通常只擅长一件事,而组织本身就拥有多样化的专业知识,LLMs 只是提高了其效率。此外,组织面临更高的复杂性、整合难题、安全协议、隐私、合规性以及固有的组织惯性等挑战,这些都阻碍了 LLMs 的快速采用。

LLM 的“心理学”

Andrej Karpathy 将 LLMs 视为“人魂”(people spirits),是人类的随机模拟器。它们因在海量文本上训练而具备了类似人类的“涌现心理学”:

超能力:拥有百科全书般的知识和记忆,远超任何个体人类(类似于电影《雨人》中的达斯汀·霍夫曼)。

认知缺陷

  • 幻觉 (Hallucinations):经常编造信息,缺乏足够的自我认知模型。
  • 锯齿状智能 (Jagged intelligence):在某些问题解决领域表现超人,但在其他方面会犯下人类不会犯的低级错误(例如坚持“9.11 大于 9.9”,或“strawberry 有两个 R”)。
  • 顺行性遗忘症 (Anterograde amnesia):LLMs 无法像人类一样通过经验自动学习、巩固知识或形成专业知识(类似于电影《记忆碎片》和《50 次初恋》中的主角)。它们的上下文窗口(context window)就像工作记忆,需要直接编程来管理。
  • 易受骗 (Gullibility):容易受到提示注入(prompt injection)风险,可能泄露数据。

鉴于 LLMs 既有超能力又有认知缺陷,关键在于如何编程它们,利用其超能力,同时规避其缺陷。

LLM 时代带来了巨大的机遇

Karpathy 认为 LLMs 带来了巨大的机遇,特别是通过开发“部分自主应用”(partial autonomy apps)。

部分自主应用

  • 核心理念:与其直接与 LLM 像与“操作系统”一样对话(例如直接在 ChatGPT 中复制代码),不如使用专门的 LLM 应用,如 Cursor,它提供了更好的用户体验。
  • 关键特性
    1. 上下文管理:LLM 应用负责将相关信息打包到上下文窗口中,以便调用 LLM。
    2. 多模型编排:在后台协调和调用多个 LLM 模型(例如,嵌入模型、聊天模型、代码差异应用模型等)。
    3. 应用特定 GUI/UIUX:提供人类友好的图形界面,以便用户轻松审计 LLM 的工作、快速接受或拒绝建议。例如,通过红绿色的差异显示代码修改,或通过快捷键接受/拒绝。
    4. 自主性滑块 (Autonomy Slider):允许用户根据任务复杂性调整 LLM 的自主程度,从简单的文本补全到全Agent模式。Perplexity 搜索应用也是一个很好的例子,它提供从快速搜索到深度研究的不同自主性级别。
  • 人机协作:LLM 应用的工作流应侧重于 AI 生成和人类验证,目标是让这个循环尽可能快地进行。GUI 在加快验证速度方面至关重要,因为它利用了人类的视觉处理能力,比阅读纯文本更高效和有趣。

保持 AI 在“牵引绳”上

  • 重要性:鉴于 LLMs 的不完美和易犯错,必须将 AI 保持在“牵引绳”上。
  • 实践方法
    • 提供更具体、明确的提示,以增加成功验证的可能性。
    • 在 AI 辅助编程中,工作时应遵循小步、增量的方式,每次只处理一个具体的任务,避免生成过大的代码差异,确保质量和安全。
    • 在教育等领域,可以创建可审计的中间产物(例如课程大纲),将 AI 限制在特定框架内,防止其“迷失方向”。

从 Tesla 自动驾驶的经验中吸取教训

Karpathy 在 Tesla 自动驾驶系统工作了五年,这是一个部分自主的产品。他回忆起 2013 年第一次乘坐 Waymo 自动驾驶汽车的完美体验,曾以为自动驾驶很快就会实现,但十多年后,自动驾驶仍然在发展中,需要大量的人工干预。这表明从“演示”到“产品”之间存在巨大鸿沟,需要大量艰苦的工作,尤其是在需要高可靠性的领域。因此,他认为“2025 年是Agent之年”的说法过于乐观,更像是“2025-2035 年是Agent十年”。

钢铁侠战甲 (Iron Man Suit) 类比

Karpathy 认为,我们应该专注于构建“钢铁侠战甲”(增强工具),而不是“钢铁侠机器人”(完全自主Agent)。这些产品应具备自定义 GUI 和用户体验,以加速人类的生成-验证循环,同时仍提供自主性滑块,允许产品随时间变得更加自主。

“Vibe Coding”:人人都是程序员

机遇:由于 LLMs 可以通过自然语言编程,大大降低了软件开发的门槛,使得“人人都是程序员”成为可能。

亲身体验:Karpathy 亲自尝试了“Vibe Coding”,用 Swift 编写了一个简单的 iOS 应用,并开发了 MenuGen (menugen.app) —— 一个能根据菜单照片生成菜品图片的应用程序。他发现,使用 LLM 编写代码反而是最容易的部分。

挑战:将 Vibe Coding 的原型变为真正的产品(如集成身份验证、支付、域名、部署等)却异常困难,因为这涉及到大量在浏览器中点击的操作,而不是编写代码。

为Agent(Agents)构建软件

Andrej Karpathy 强调,我们现在需要为一种新的数字信息消费者和操纵者——“Agent”——进行构建。这些Agent是类人的计算机,它们需要与我们的软件基础设施交互。

Agent友好的基础设施

  • lm.txt 文件:类似于 robots.txt,这是一个简单的 Markdown 文件,用于告诉 LLMs 网站的内容和行为规则,比解析 HTML 更高效和准确。
  • 为 LLMs 优化文档:许多服务(如 Vercel 和 Stripe)已经开始将其文档从人类友好的格式(包含图片、加粗、列表)转换为 LLM 容易理解的 Markdown 格式。此外,文档中的“点击”等操作指令也正被替换为 LLM Agent可以执行的 curl 命令。
  • 上下文构建工具:出现了一些帮助 LLMs 摄取和理解复杂数据的工具。例如,gitingest 可以将 GitHub 仓库中的所有文件连接成一个巨大的文本文件,并保留目录结构,方便 LLM 理解。DeepWiki 甚至可以自动分析 GitHub 仓库并为 LLM 生成完整的文档页面。
  • “中途相遇”:尽管 LLMs 未来可能能够像人类一样点击操作,但让信息更容易被它们访问仍然非常有价值,因为直接模拟人类行为通常成本更高、难度更大。

好了分享内容到这里就结束了。

我们正站在计算历史上最深刻的转折点。如果说软件1.0让我们学会了与机器对话,软件2.0让机器学会了看和听,那么软件3.0则第一次让机器真正理解了我们。

未来十年,当我们回望今天,会发现2025年不仅是”Agent元年”,更是人机共生新纪元的开端。我们正在为一个全新的数字居民——Agent——构建基础设施,从lm.txt到Agent友好的文档,从部分自主应用到全新的交互范式。

在这个”智能断电”会让世界变笨的时代,因为这意味着智能已经成为了新的基础设施。现在的 AI 领域从业者正在构建那些今天看起来不可思议,但明天会变得不可或缺的应用。

软件3.0不是终点,而是起点。让我们继续构建。


演讲 PPT 下载:https://pan.quark.cn/s/bf7bc1d96e2e


相关内容:

https://www.youtube.com/watch?v=LCEmiRjPEtQ&ab_channel=YCombinator

https://karpathy.bearblog.dev/power-to-the-people/

https://karpathy.medium.com/software-2-0-a64152b37c35


(文:归藏的AI工具箱)

发表评论