在旧金山Moscone中心举行的首届YC AI创业学校上,OpenAI创始科学家、特斯拉前AI总监Andrej Karpathy发表了最新演讲。
以下是Andrej Karpathy的演讲全文。
软件的三次"重生"革命,3.0正吞噬旧代码
我很高兴今天能在这里与大家讨论人工智能时代的软件。我了解到你们中很多人是本科生、硕士生、博士生等,即将进入行业。我认为现在进入行业是一个非常独特且有趣的时刻。从根本上说,原因在于软件正在再次变革。
我说"再次"是因为我之前做过这个演讲,但问题是软件一直在变化。因此我有很多素材可以讲新内容,我认为它正发生根本性的改变。粗略地说,软件在基础层面上已有70年没有太大变化。而在过去几年里,它大约发生了两次相当快速的变革。因此,现在有大量的工作要做,有大量的软件需要编写和重写。
那么,我们来看看软件的领域。如果我们把它想象成软件的地图,这里有一个很酷的工具叫"GitHub地图"。这就像是所有已编写软件的集合。它们是指示计算机在数字空间执行任务的指令。放大这里,你会看到各种不同的代码库,所有这些都是已编写的代码。
用英语编程"人类灵魂",提示词成了新代码
或许可以这样总结区别:以情感分类为例,你可以写一些Python代码来做情感分类,或者训练一个神经网络,或者提示一个大语言模型。这里有一个简短的提示,你可以想象通过改变它,以稍微不同的方式编程计算机。所以,我们有软件1.0、软件2.0,我认为我们现在看到很多GitHub代码不仅仅是代码,还夹杂着大量英语。
我们有三种完全不同的编程范式。我认为如果你要进入这个行业,熟练掌握这三种范式是个好主意,因为它们各有优缺点。你可能想用1.0、2.0或3.0来编程某些功能,或者训练神经网络,或者直接提示LLM。这应该是显式代码吗?等等。我们都必须做出这些决定,并可能在这些范式之间流畅地切换。所以现在我想深入探讨的是,在第一部分,谈谈LLM,如何思考这种新范式及其生态系统,它是什么样子。比如这台新计算机是什么样子?生态系统又是什么样子?
很多年前,吴恩达的一句话让我印象深刻,我想他接下来会发言,他当时说"AI是新的电力"。
我们对这些模型的依赖已经非常显著,而且我认为将继续增长。但LLM不仅具有公用事业属性,也可以说它们具有一些晶圆厂的特性,原因在于构建LLM所需的资本开支确实相当巨大。这不仅仅是建造某个发电站那么简单,对吧?你需要投入巨额资金,而且我认为相关技术的"科技树"正在快速发展。所以我们处在一个拥有深度"科技树"的世界,研发的秘密正集中在LLM实验室内部。
技术扩散逆向革命,煮鸡蛋比导弹更早用上AI
你可以做很多类比,比如4纳米工艺节点。也许它类似一个具有特定最大FLOPS的集群。你可以想想:当你使用Nvidia GPU,只做软件而不做硬件时,这有点像无晶圆厂模式。但如果你像谷歌那样,自己构建硬件并在TPU上训练,那就有点像英特尔模式,拥有自己的晶圆厂。所以我认为这里有一些说得通的类比。
但实际上,我认为最贴切的类比或许是,在我看来,LLM与操作系统有着非常强的类比性。因为它不仅仅是电力或水。它不是像水龙头流出的商品。它们现在是日益复杂的软件生态系统。因此它们不只是像电力那样的简单商品。有趣的是,生态系统正在以非常相似的方式形成。你有几个闭源提供商,如Windows或Mac OS,然后你有开源的替代品,如Linux;对于LLM,我认为LLaMA也是类似。我们有几家竞争的闭源提供商,然后LLaMA生态系统目前可能是最接近Linux成长路径的东西。再次强调,现在还为时过早,因为这些还只是简单的LLM,但我们开始看到它们将变得更加复杂。
我认为这些可能是个人计算的一些早期迹象,但这还没有真正发生。还不清楚它会是什么样子。也许在座的各位中有人会发明它,或者定义它的工作原理和应该是什么样子。
我想再提一个类比:每当我直接在文本中与ChatGPT或某个LLM对话时,我感觉就像通过终端与操作系统交谈一样,因为它就是文本,是直接访问操作系统的途径。我认为目前还没有真正发明出一种通用的图形用户界面(GUI)。例如,ChatGPT是否应该有一个不同于文字气泡的GUI?当然,我们稍后要讨论的一些应用程序确实有GUI,但目前还没有一种能通用所有任务的GUI。这说得通吗?
总结一下到目前为止:使用"LLM实验室"和"LLM"是准确的描述,但LLM是复杂的操作系统。它们在计算领域相当于1960年代的水平,我们正在重走计算之路。它们目前通过分时共享提供,像公用事业一样分发。前所未有的是,它们并非掌握在少数政府和企业手中,而是在我们所有人手中,因为我们都有电脑,而这一切都只是软件。ChatGPT仿佛一夜之间就传给了数十亿人的电脑。这太疯狂了。这让我觉得不可思议,而现在正是我们进入行业并编程这些计算机的时机,这简直疯狂。我认为这非常了不起。
在编程LLM之前,我们需要花时间思考它们是什么。我特别喜欢讨论它们的"心理学"。我喜欢将LLM视为人类灵魂。它们是对人的随机模拟,而模拟器碰巧是一个自回归 Transformer模型。Transformer是一种神经网络,它在tokens级别上工作,逐块处理,每个词块的计算量几乎相等。这个模拟器本质上涉及一些权重,我们将其拟合到互联网上的所有文本等数据上。最终就得到了这样一种模拟器。
它们表现出不均衡的智能:在某些问题解决领域表现出超人能力,却会犯下人类基本不会犯的错误。比如坚持认为9.11大于9.9,或者"strawberry"中有两个‘R’。这些都是著名的例子,但本质上存在一些你可能踩到的"坑"。我认为这也很独特。它们还患有顺行性遗忘症。
在大众文化中,我推荐大家看这两部电影:《记忆碎片》和 《第51州》。在这两部电影中,主角的"权重"是固定的,他们的"上下文窗口"每天早晨都会被清空。当这种情况发生时,去工作或建立关系就非常成问题。而LLM一直处于这种状态。
我想再指出一点与使用LLM相关的安全限制。例如,LLM相当轻信,它们容易受到提示注入风险的影响,可能会泄露你的数据等。还有很多其他安全相关的考量。总之,简而言之,你必须...
别造机器人,造战衣!让人类决定AI该飞多高。
同时,要思考这个拥有超能力却又有一堆认知缺陷和问题的东西,而它们又极其有用。那么我们该如何为它们编程?如何绕过它们的缺陷并享受它们的超能力?所以我现在想谈谈机遇。我们如何使用这些模型?有哪些最大的机遇?
我比较兴奋的第一件事是我称之为部分自主应用的东西。例如,以编码为例。你当然可以直接去ChatGPT,开始到处复制粘贴代码、复制粘贴错误报告等等,获取代码并到处粘贴。但你为什么要那样做?为什么要直接去操作系统?为此专门开发一个应用更有意义。我想你们很多人用Cursor,我也在用,Cursor就是你需要的那种工具。
我认为还有一个非常重要但可能未被充分认识的点是特定于应用的GUI及其重要性,因为你不想仅通过文本直接与操作系统交谈。文本很难阅读、解析和理解,而且你也不希望在文本中直接执行某些操作。所以,直接看到红绿标识的代码变更差异,并且可以交互式地查看新增内容要好得多。只需按Command+Y接受或Command+N拒绝要容易得多。我不应该用文本输入吧?因此,GUI允许人类审计这些易出错系统的工作,并加快速度。稍后我会再回到这一点。
它打包了大量信息,协调多个LLM,并有一个GUI让你审计其部分工作。例如,它会引用来源,你可以查看它们,并且它也有一个自主程度滑块:你可以进行快速搜索,进行研究,或者进行深度研究并在10分钟后回来查看结果。这只是你赋予工具的不同程度的自主权。
LLM能看到人类能看到的一切吗?LLM能以人类的所有方式行动吗?人类能否监督并保持在这种活动的循环中?因为再次强调,这些系统还不完美且容易出错,那么在PS中的差异会是什么样子呢?
此外,当前很多传统软件,其所有的开关等东西都是为人类设计的。这一切都必须改变,变得对LLM可访问。所以我想强调一点,对于许多这类LLM应用,我认为这一点未得到足够重视:我们现在像是在与AI合作。通常它们负责生成,而我们人类负责验证。
让这个循环尽可能快地运行符合我们的利益,这样我们能完成大量工作。我认为有两种主要方式可以做到这一点:第一,你可以大大加快验证速度。我认为GUI对此极其重要,因为GUI利用了我们头脑中的计算机视觉"GPU",阅读文本很费力且无趣,但看图很有趣,视觉信息就像是通往大脑的高速公路。因此我认为GUI在审计系统和视觉呈现方面非常有用。
这就是我进行AI辅助编码时的感受。如果我只是在小步前进,一切都很好,但如果我真的想完成工作,让一个过度反应的代理做所有这些事就不太好了。这张幻灯片不太好,抱歉。但我想我和你们很多人一样,正在尝试在我的编码工作流中开发一些利用这些代理的方法,进行AI辅助编码和自己的工作。
我总是害怕收到太大的差异。我总是采用小的增量块。我想确保一切都好。我想让这个循环转得非常非常快。我会专注于具体事物的小块工作。因此我想你们很多人可能正在开发类似的使用LLM的方式。我也看到一些博客文章试图制定使用LLM的最佳实践。
生成-验证循环:如何让AI和人类"飙车"不翻车?
这是我最近读到的一篇,我觉得很不错。它讨论了一些技巧。其中一些涉及如何约束AI。例如,如果你在提示,如果你的提示很大,AI可能不会完全按你希望的去做,这样验证就会失败。你会要求别的东西。如果验证失败,你就得开始循环。所以,花点时间让你的提示更具体更有意义,这会提高验证成功的概率,让你继续前进。因此我认为我们很多人最终都会找到这类技术。
我认为在我自己的工作中也是如此。我目前感兴趣的是,既然我们拥有了AI和所有LLM,教育会变成什么样子。
我认为我大量思考都集中在如何约束AI上。我不认为直接去ChatGPT说"嘿,教我物理"就能奏效。我觉得这行不通,因为AI会迷失方向。所以对我来说,这实际上是两个独立的应用:一个是供教师创建课程的应用,另一个是获取课程并提供给学生的应用。在这两种情况下,我们现在都有一个可审计的中间产物——课程。
我们可以确保它是好的、一致的。AI被约束在特定的教学大纲和项目进度内。所以这是一种约束AI的方法,我认为成功概率要高得多,AI也不会迷失方向。
我想再提一个类比:我对部分自主并不陌生,我在特斯拉工作了五年左右,研究的就是这个。特斯拉的自动驾驶也是一个部分自主产品,并具有许多类似特性,例如:仪表盘上就有自动驾驶的GUI,它向我展示神经网络看到的内容。我们还有自主程度滑块,在我任职期间,我们为用户完成了越来越多自主任务。我想简要讲述一个故事:我第一次驾驶自动驾驶 车辆是在2013年。
当时我有个朋友在Waymo工作,他邀请我在帕洛阿尔托(Palo Alto)附近试驾。我用当时的Google Glass拍了这张照片,你们很多人太年轻了可能都不知道那是什么。但没错,这在当时风靡一时。我们坐进车里,在帕洛阿尔托周围开了大约30分钟,走了高速公路、街道等。那次驾驶完美无缺,零干预。那是2013年,距今已有11年。这让我印象深刻,因为当时经历了那次完美的驾驶演示后,我觉得自动驾驶即将到来,因为它已经能工作了。
这很不可思议,但11年后的今天,我们仍在研究自动驾驶。我们仍在研究驾驶代理。即使到现在,我们还没有真正解决这个问题。你可能看到Waymo在路上跑,看起来是无人驾驶,但仍然有大量的远程操作,很多驾驶环节仍然有人参与。所以我们甚至还没有宣布成功,但我认为它最终肯定会成功,只是花了很长时间。因此,我认为软件确实很棘手,就像驾驶也很棘手一样。所以当我看到"2025年是智能体之年"这样的说法时,我感到非常担忧。
我有点觉得,这将是一个"智能体的十年",而且会持续相当长一段时间。我们需要人类在循环中。我们需要谨慎行事。这是软件,我们得认真对待。
我经常思考的另一个类比是钢铁侠战衣。我一直很喜欢钢铁侠,我认为它在很多方面正确地描绘了技术及其发展。我喜欢钢铁侠战衣的地方在于,它既是增强设备,也是一个agent。在部分电影中,钢铁侠战衣具有高度自主性,可以飞来飞去寻找Tony。这就是自主程度滑块的体现:我们可以构建增强设备,也可以构建代理。我们两者都想要一些。但在现阶段,我认为在处理有价值的LLM时,更应该是构建钢铁侠的战衣,而不是钢铁侠机器人。
氛围编程狂欢,让编程变成‘说人话’,全世界都是程序员
与其说是构建炫目的自主代理演示,不如说是构建部分自主产品。这些产品拥有定制的GUI和UI、UX,我们这样做的目的是让人类的生成-验证循环变得非常非常快,同时我们也未忽视这项工作原则上可以实现自动化的事实。你的产品中应该有一个自主程度滑块,你应该思考如何滑动这个滑块,让你的产品逐渐变得更加自主。我认为这类产品中存在大量机遇。
这条推文某种程度上引入了这个概念,但我听说它现在成了一个大型网络迷因。有趣的故事是:我在推特上活跃了大约15年,至今仍不清楚哪条推文会爆红,哪条会无人问津。我以为这条推文会是后者。不知这是否只是一时之念,但它成了全网迷因,我也说不清原因,但猜想它触动了大家心弦,为人们感受到却难以言表的东西命了名。现在甚至有了维基百科页面等等。这疯狂吗?
因为太有趣,我也尝试了氛围编程。当你想要构建某个超定制化的、看似不存在的东西,又想在周六之类的时间随性发挥时,氛围编程太棒了。我构建了这个iOS应用,其实不会Swift编程,但很震惊自己能做出一个超级基础的应用,它确实简单。但我喜欢它只需一天就能完成,当天就能在手机上运行。这太神奇了,我无需花五天学习Swift就能入门。
原因就是:这实在太烦人了。
例如,为网页添加Google登录功能——我知道这很简单——但有大量类似Clerk库的集成指南。太疯狂了!它指示我:访问这个URL,点击下拉菜单,选择这个,跳转到那个页面,再点击那个... 就像在教我怎么操作。计算机在指挥我该做什么,那你来做啊!为什么是我做?搞什么鬼?我必须跟着指令做,太荒谬了。
因此,我演讲的最后部分聚焦于:我们能直接为智能体构建吗?我不想做这些工作,智能体能代劳吗?谢谢?
好的,简而言之:数字信息的新消费和操作者出现了。过去只有人类通过图形界面或计算机通过接口(APIs)操作,现在有了全新事物。智能体是计算机,却像人类灵魂。互联网存在人类灵魂,它们需要与软件基础设施交互——我们能为其构建吗?例如,你可以在域名放置robots.txt文件,指导网络爬虫在网站的行为规范。
大量文档是为人类编写的,包含列表、粗体和图片等元素,但LLM无法直接理解。我看到Vercel、Stripe等服务商正将文档专门适配LLMs(Markdown格式),Markdown对LLMs极其友好。例如YouTube上制作精美动画的3Blue1Brown。
是的,我爱这个库。他开发了Manim,我也想自己做一个。面对冗长的Manim文档,我直接复制给LLM,描述需求后,它直接编写出我想要的动画。太神奇了!让文档对LLMs可读将释放巨大潜力,应大力推广。
例如访问nanoGPT的GitHub仓库时,无法直接询问LLM(这是人类界面)。但将网址改为GitIngested,它会将所有文件合并为文本并生成目录结构。这可直接粘贴到LLM。更强大的如Devon:不仅能处理原始文件,还会分析GitHub仓库并生成专属文档页,对LLM输入极有帮助。这类通过修改网址让LLM可访问的工具非常实用,应大量涌现。还需说明:未来LLMs定能直接浏览界面(甚至现在已能操作点击)。但主动优化信息访问仍很有价值,因为直接操作成本高且困难。大量软件(非活跃仓库/基础设施)不会被适配,我们需要工具支持。其他软件则应在中间点相向而行。总之,现在入行太棒了。
从惊艳demo到规模产品,技术落地需要耐心。但此刻的我们,正站在比1960年代计算机革命更汹涌的潮头——当英语成为新编程语言,当LLM成为新操作系统,每个敢于用语言重塑数字世界的人,都是新范式的创世者。