2013年,Andrej Karpathy坐在Waymo的自动驾驶车里,在帕洛阿托转了30分钟。车窗外的街景流动,方向盘自己转动,零失误。他当时想,自动驾驶要来了。12年后的今天,他站在台上说,我们还在解决这个问题。
如果你还在逐行敲Python,还在为一个登录功能读两小时文档,你可能正在用打字机时代的方式工作。
这个曾在特斯拉带领Autopilot团队的AI科学家,现在要讲一个更激进的故事,软件本身正在被重写三次。第一次是70年前的代码1.0,指令写给CPU。第二次是神经网络的参数2.0,数据喂给优化器。第三次是现在,英语变成了编程语言,提示词就是程序,你不需要学五年Swift就能在周六下午做出一个iPhone应用。
他把这叫「软件3.0」。
Karpathy有个习惯,去餐厅看不懂菜单就很难受。那些法餐意餐的名字像密码,他需要图片。但这样的应用不存在。所以他花了几个小时,用Claude vibe coding做了menu.app,拍菜单,AI生成图片,人人注册送5美元额度。现在这个应用是他生活的「重大成本中心」,每天在亏钱。
但他说,真正让我花时间的不是代码,是那些点击操作。
写代码只花了几个小时,让它上线花了一周。认证,支付,域名,Vercel部署,全是在浏览器里点击。最荒谬的一幕是,Clerk的文档教他如何接入Google登录,像说明书一样逐步写明,「去这个URL」「点这个下拉菜单」「选择这个选项」。他说,一个计算机在教我该做什么操作。为什么不是它来做?
问题出在下一步。
Karpathy用操作系统的思路拆解了大语言模型的本质。他说,LLM不是电力,不是从水龙头流出的商品。它们是复杂的软件生态系统,更像Windows,Mac OS,或者Linux。OpenAI,Gemini,Claude是闭源系统,Llama生态像早期的Linux,都还在成长。
它们现在处于1960年代的计算机阶段。算力昂贵,所以LLM集中在云端,我们通过API按token计费访问,像当年的分时系统。个人计算革命还没到来,因为成本还没降下来。但他注意到,Mac mini已经可以跑一些小模型,因为推理是内存密集型任务。这是个信号。
LLM有「心理学」。它们是「人类精神的随机模拟器」,底层是自回归Transformer,逐token生成,每个token消耗几乎等量的算力。它们有百科全书般的记忆力,像电影「雨人」里的Dustin Hoffman,能记住电话簿上的所有号码和姓名。它们有超人类能力,也有认知缺陷。
它们会幻觉,会坚持9.11大于9.9,会数不清strawberry里有几个r。它们有「顺行性遗忘症」,像电影「记忆碎片」和「初恋50次」里的主角,权重固定,上下文窗口每天清空,无法自然积累组织知识。它们容易被提示词注入攻击,会泄露数据。
它们既超人又脆弱。
Karpathy的核心方法是,不要直接对话LLM,要用专门的应用包裹它。就像你不会直接在终端里操作操作系统,你需要GUI。他举了Cursor的例子,这个AI编程工具有四个关键设计。
第一个场景,自动管理上下文,这是重头戏。
在传统编程里,你要自己记住哪些文件相关,哪些函数调用了什么。现在Cursor的嵌入模型会自动索引你的整个代码库,当你提问时,它知道该调用哪些文件上下文。这不是简单的「全文检索」,而是语义级别的关联。
举个场景,你在写一个电商网站的支付模块,突然想改购物车逻辑。你不需要告诉Cursor,「购物车在cart.js里,支付在payment.ts里,它们通过checkout-service.js连接」。你只要说,「把购物车的商品数量限制改成20」。Cursor的embedding模型会自动找到相关的三个文件,提取关键代码片段,组装成一个prompt发给GPT-4,然后把diff应用到正确位置。
这个过程对你是透明的。你不需要管理上下文窗口,不需要手动复制粘贴代码片段。Cursor在后台编排了多个模型调用,embedding模型,chat模型,diff应用模型。这就是「编排多个LLM调用」的真实含义,不是简单的chain,而是分工协作的流水线。
第二个,应用专属GUI至关重要。
Cursor的diff视图用红色显示删除,绿色显示新增。你可以一眼看出修改范围,Command+Y接受,Command+N拒绝。这比在纯文本里读「请在第47行删除这段代码」「在第52行新增以下内容」快100倍。你的视觉系统是GPU,文字是CPU。GUI直接把工作量分配给你的计算机视觉,阅读文本是耗能的,看颜色是免费的。
第三个,自主性滑块。
Tab补全,你主导。Command+K改一段代码。Command+L改整个文件。Command+I,让它在整个仓库里自由发挥。你根据任务复杂度选择给AI多少权限。这不是0或1的开关,是个连续的刻度。
第四个,保持AI在缰绳上。
Karpathy说,有人给他提交10,000行代码的diff,他根本审不过来。就算AI瞬间生成了这些代码,他还是瓶颈,因为他要确保没有bug,没有安全漏洞,逻辑正确。所以他的工作方式是,prompt要具体,任务要小块,一次只做一件事,快速循环「生成-验证」这个流程。
验证失败时,如果你的prompt模糊,AI可能输出的不是你想要的,你就会陷入反复修改。所以具体的prompt会提高验证成功率,让你往前推进。这是个概率问题。
他在做AI教育产品时发现,不能直接让ChatGPT「教我物理」,AI会迷失在对话的森林里。他的方案是,做两个独立应用,一个给老师用来创建课程,一个给学生用来学习课程。中间产物是「课程大纲」,可审计,可固定,AI被限制在这个范围内,不会跑偏。
这是他说的「保持AI在缰绳上」。
Perplexity也是类似的设计,快速搜索,研究模式,深度研究,三档自主性。它会引用来源,你可以审计。它编排了多个模型,有GUI让你监督过程。
但这还不够。
另一个更大的机会是,为Agent写软件,而不是为人类写软件。
Karpathy花了一周时间在浏览器里点击,就是为了完成那些「去这个页面,点那个按钮,填这个表单」的任务。文档在教他操作,而不是让计算机操作。这很荒谬。
现在有三种消费和操作数字信息的主体。人类通过GUI,计算机通过API,Agent是第三种。它们像人类,但又是计算机。它们是「互联网上的人类精神」,需要专门的基础设施。
robots.txt告诉爬虫该怎么抓取网站。llm.txt可以告诉LLM这个域名是什么,用Markdown格式,LLM直接可读。如果LLM要解析HTML,容易出错,效率低。直接说给它听,最高效。
Vercel和Stripe已经开始提供LLM专用文档,全是Markdown格式。更激进的是,Vercel把所有「点击这个」改成了等价的curl命令,因为LLM Agent可以执行curl,但无法点击按钮。这是真正的「为Agent设计API」,不是简单地把人类文档转成文本。
还有工具在做这件事。你把GitHub URL里的「github」改成「getingest」,它会把整个仓库的文件拼成一个大文本,带目录结构,可以直接喂给LLM。DeepWiki更进一步,让AI分析你的仓库,自动生成文档页面,专门给LLM看的那种。
Karpathy说,他用Manim这个数学动画库时,不想读文档,直接把整个文档复制给LLM,描述需求,LLM直接输出了能跑的代码。Vibe coding的核心就是,文档对LLM友好,LLM就能替你工作。
三蓝一棕的粉丝应该懂这个库有多好用。
他说,也许未来LLM能自己点击,能自己解析GUI。但那很贵,很慢,容错率低。所以他认为,应该双向奔赴,人类的基础设施向Agent靠拢一半,Agent的能力向人类靠拢一半。长尾的那些不活跃的软件,没人会专门适配,确实需要Agent自己搞定。但对于活跃的服务,专门为Agent设计接口,是值得的。
这背后是什么?想想你上次在超市买电钻,你不是在买电钻,你是在买墙上的那个洞。代码是电钻,应用是洞。软件1.0时代,我们在造电钻。软件2.0时代,神经网络在造电钻。软件3.0时代,英语就能描述你要的洞,LLM直接给你打出来。
Karpathy在特斯拉时观察到,Autopilot的C++代码在不断被删除,神经网络在变大。图像拼接,时间序列融合,原本用代码写的逻辑,全部迁移到神经网络里。软件2.0在「吃掉」软件1.0的栈。现在,软件3.0在吃掉前两代。
他说,写代码正在变成书法艺术。不是消失,是变成少数人的专业技能。大多数人只需要会说话。
这是个认知框架,用来判断你手里的工具处于哪个时代,该用哪个范式解决问题。有些功能适合写代码,有些适合训练神经网络,有些直接prompt就行。你需要在三种范式之间流畅切换。
但Karpathy不是那种喊「2025是Agent元年」的人。他说,这是Agent的十年。他在2013年坐过完美的自动驾驶demo,12年后的今天,Waymo还需要大量远程人工接管。软件很难,就像驾驶很难。
他的建议是,少造炫酷的自主机器人,多造钢铁侠战甲。战甲既能增强Tony Stark,也能自己飞。这是个滑块,不是二选一。现在的阶段,应该优先做「部分自主产品」,让人类在生成-验证的循环里保持高速运转,同时不忘记终极目标是自动化。
他在台上最后放了一张图,滑块从左到右,从人类主导到AI主导。他说,接下来十年,我们会看着这个滑块慢慢右移。我很期待和你们一起造这个未来。
这个演讲没有给你一个确定的答案。它留下的问题是,当每个人都能用英语编程,当AI能替你点击浏览器,当文档开始为机器而写,「程序员」这个词还意味着什么?
也许意味着,你是那个知道该把滑块放在哪个位置的人。