中文笔记:Software Is Changing (Again) by Andrej Karpathy
序言:午后听了Andrej Karpathy最新的演讲,大为震撼,于是有了此篇笔记。这里对每个小节做一些整理和思考。这里先说下结论:Markdown才是这时代最好的编程语言!(笑)
视频地址:
LLMs是新型计算机
在Andrej Karpathy的定义中,软件的变迁分为了三个时代。
1. Software 1.0: 传统代码
在1.0时代中,软件指的是你为计算机编写的代码。程序由程序员编写,并在计算机上执行。
2. Software 1.0: 神经网络
由于神经网络的崛起,神经网络中的参数被视为2.0时代中的编程代码。程序员不在需要直接编写这些代码,而是通过调整数据集并运行优化器来创建神经网络的参数。 软件开发从显式编码转向数据驱动和模型训练,并且如Hugging Face平台成为2.0时代的GitHub平台,用于共享和可视化模型参数
3. Software 3.0: LLMs的时代
3.0时代指的便是LLM,因为他们可以直接生成程序。而英语等自然语言就变为了3.0时代的编程代码。比如,可以用少量提示来编程 LLM 进行情感分类,而不是编写Python代码或训练神经网络模型。
在这一节中Andrej Karpathy以自动驾驶的发展为例,在神经网络崛起(2.0时代)之后,工程师们使用了一些网络模型来替换了传统算法代码(如图像识别任务)。而现在才是3.0时代的开始,今后也将会有大量的软件被重写。
思考: 其实这里笔者认为3.0时代发展的最后是需要跳出传统的编程范式的(如使用C++,Python等代码来执行任务),LLM完全有能力直接操作逻辑电路中的0,1来生成程序。大规模数据集以及需要处理的信息量巨大(每个时钟周期数百万到数十亿个位的变化)都将是挑战。
LLMs是公用事业(Utilities),操作系统(Operating Systems)?
不得不说天才们的脑洞是真的大。这一节中LLM 先被比作公用事业(如电力),这主要基于其提供服务的方式和用户需求。LLM的开发过程类似于建设电网的基础设施,都是由大公司投入大量资本来得到的。然后他们通过API以按量付费(按token计费)的方式向用户提供智能服务,这相当于提供电力服务的运营支出。与公用事业服务的典型需求相似,用户对LLM API有很高的要求,包括低延迟、正常运行时间和一致的质量。
此外,由于存在像OpenRouter这样的工具,允许用户在不同的LLM之间轻松切换,因为LLM不争夺物理空间,因此可以有多个“电力供应商”。LLM的构建由于需要巨大的资本支出,并且技术栈发展迅速,研发秘密高度集中在少数LLM实验室内部,这使得它们也具备了晶圆厂的一些特征。
此外,LLM不仅仅是像电力或水那样的简单商品,它们正在成为日益复杂的软件生态系统。这里介绍了一种更深层的类比是将其视为新型的操作系统。与操作系统类似,LLM也存在少数闭源提供商(如Windows或Mac OS),以及开源替代方案(如Linux)。LLM本身也可以被视为CPU的等价物,其包含上下文窗口(context window)工作记忆(working memory)或内存。又如VS Code应用程序可以在Windows、Linux或Mac上运行,LLM应用(例如Cursor)可以在不同的LLM上运行。
LLM当前相当于60年代的计算机时代(云端,数据通过流式传输和批处理进行),首先LLM计算目前仍然非常昂贵,这迫使LLM集中部署在云端。而且用户通过分时共享(time sharing)的方式进行访问,而非完全独占其计算资源。个人计算革命尚未在LLM领域发生,因为目前经济上不划算。
LLM psychology
LLM被认为是“人类精神”或“人类的随机模拟”。这是因为它们通过在互联网上所有可用的文本进行训练,这些文本源自人类,因此它们展现出一种类似人类的涌现心理 (emergent psychology that is humanlike)。LLM拥有百科全书般的知识和记忆,能够记住比任何个体人类都多得多的信息,可以非常容易地记住SHA哈希等各种信息。
认知缺陷/局限性:
-幻觉 (Hallucinations): LLM会频繁地“产生幻觉”并“编造内容”。
-自我认知不足 (Insufficient self-knowledge): 它们没有一个非常好的或足够强的“内部自我认知模型”。
-锯齿状智能 (Jagged intelligence): 它们的智能是“锯齿状的”,这意味着它们在某些解决问题的领域可能表现出超人水平,但随后又会犯下“基本上没有人类会犯的错误”,例如坚持“9.11大于9.9”或者“strawberry”中有两个“r”。这些是“你可能会绊倒的粗糙边缘” (rough edges that you can trip on)。
-顺行性遗忘症 (Anterograde amnesia): LLM似乎也遭受某种类似于顺行性遗忘症的困扰。与人类同事不同,人类会随着时间学习和巩固知识,而LLM“本身不会这样做”。它们的上下文窗口 (context windows) 就像是工作记忆 (working memory),必须直接对其进行编程,因为它们不会默认变得更聪明。这被比作电影《记忆碎片》(Momento) 和《初恋50次》(51st Dates) 中的主角,他们的“权重是固定的,上下文窗口每天早上都会被清空”。
-易受骗性与安全风险 (Gullibility and security risks): LLM非常容易上当,并且容易受到提示注入 (prompt injection) 风险的影响。它们还可能泄露你的数据。
通过LLM来构建部分自动化的产品
这部分的内容可能略显繁杂,但是中心思想是找到当前LLM缺陷/局限性的解决方法。这里最后的比喻是钢铁侠战衣,在面对有缺陷的LLM时,我们应该构建更多的是增强人类能力的工具(augmentation),而不是完全自主的机器人(autonomous robots)。
1. 需要GUI而不是直接通过文本交流
直接通过文本与LLM交互,感觉就像通过终端与操作系统对话一样,LLM生成的大量的文本很难阅读、解释和理解,需要通过视觉表示来加速人类验证和审计系统的工作。目前,尚未以通用方式真正发明出适用于LLM的通用GUI,尽管某些LLM应用已经拥有特定的GUI。例如,ChatGPT目前的界面类似于文本气泡,但仍缺乏一个跨所有任务的通用GUI。这里还展示了一波cursor和Perplexity的GUI。例如,cursor中查看代码差异时,红绿色的视觉变化比纯文本更容易理解和操作(接受或拒绝更改)。此外,Tesla的Autopilot仪表盘上的GUI会显示神经网络所看到的内容,这也是GUI的应用实例。
思考: 设计师们和可视化的研究者们的新舞台
2. 生成与验证的循环
当前LLM应用中的工作流通常是AI负责生成内容,而人类负责验证。为了提高工作效率,加快AI生成与人类验证之间的循环(generation verification loop)至关重要。有两种主要方式可以做到这一点:1.如前所述,GUI通过视觉表示大大提高了人类审计工作的速度和效率。2.保持AI受控(“驯服AI”)。
3. 驯服AI (Keep AI on the leash)
因为如上面所述的LLM缺陷和局限性,以及AI agents可能会过度反应,生成过大或难以管理的内容(如,一次性生成10,000行代码,这使人类成为瓶颈,难以验证和确保其无错误或安全问题)等问题,所以一个可控的AI是必要的。
解决方案:
1.提供更具体、更精确的Prompt
2.在AI辅助的编程中,分小块、增量地进行工作
例如在教育领域,可以设计一个教师来创建课程,然后一个学生来使用这些课程。这样,“课程”就成为一个可审计的中间工件,确保AI在特定教学大纲和项目进度下保持受控和一致。
自主滑块(Autonomy Slider):主要目的是允许用户根据任务的复杂性来调整AI的自主程度。例如,在Cursor中,你可以选择轻量级补全(你主导),修改代码块(特定范围),修改整个文件,或者完全自主地处理整个代码库。
LLM是新的数字信息消费者
Andrej Karpathy发现完全使用LLM进行软件开发的一个问题是,目前的使用文档主要是为人类设计的,例如包含图形用户界面(GUI)的指示和视觉元素,这使得LLM难以直接理解和操作。要让AI Agent理解文档并正确调用API,必须调整现有的结构,使其变得对LLM友好。尽管未来LLM可能能够自行点击网页,但目前而言,主动迎合LLM并使其更容易访问信息仍然非常重要。这里介绍了一些方法和工具:
1.The /llms.txt file:
类似于网站用于指导网络爬虫的robots.txt文件,可以创建一个简单的Markdown格式的llm.txt文件。这个文件可以直接向LLM说明域名信息,告诉它们这个领域是关于什么的。相比让LLM解析复杂的HTML页面,这种方式更具可读性,且不易出错。
2. 转换为LLM更易理解的格式:
文档中的列表、加粗字体、图片等视觉元素,这些对LLM来说并不直接可访问。需要将这些文档转换为LLM更易理解的格式,例如Markdown。Vercel和Stripe等公司已经开始将他们的文档过渡到专门为LLM设计的格式。
3. 修改文档中的指令:
文档中常见的“点击”等动词对LLM来说是无效的,因为它们无法进行原生点击操作。因此,需要将这些动词替换为LLM代理可以直接执行的命令,例如使用curl命令。这使得文档内容可以直接转化为代理可执行的动作,如Vercel将“click”替换为等效的curl命令。
4. 模型上下文协议:
除了上述通用调整外,还有像Enthropic的模型上下文协议这样的专用协议,它提供了一种直接与AI代理通信的方式。
5. 数据摄取工具以适配LLM:
例如,像Gitingest这样的工具,可以将GitHub仓库的URL转换为一个包含所有文件内容和目录结构的单一巨大文本,方便直接复制粘贴到LLM中进行提问和处理。 更进一步的例子是Deep Wiki,它不仅摄取原始文件内容,还会让AI对GitHub仓库进行分析,并自动生成整个文档页面,使其对LLM更具帮助。
思考: 这一部分值得深思。虽然真正的智能体还未出现,但互联网产品已不只服务于人类,未来或许会出现同时面向 AI agent 和人类的新概念产品。