随着 大模型 (LLM) 技术的飞速发展,软件开发范式正在经历一场深刻的变革。不再仅仅是编写代码,而是转向 Prompt 工程,与 AI 协同构建应用。本文将深入探讨这一变革的核心,解析 OpenAI 前 AI 总监 Andrej Karpathy 提出的“软件三代”理论,并为机器学习工程师提供在 大模型 时代取得成功的关键策略。

软件的进化:从 1.0 到 3.0

Karpathy 将软件发展划分为三个阶段:

  • 软件 1.0:传统编程,通过编写 Python、C++ 等代码,使用 if-else 语句和循环等逻辑来构建应用。例如,一个简单的计算器应用,需要程序员编写明确的加减乘除逻辑。
  • 软件 2.0:神经网络,通过训练模型,让模型学习解决问题的模式。例如,图像识别系统通过大量图像数据训练,学习识别猫、狗等物体。
  • 软件 3.0Prompt 工程,直接使用自然语言 Prompt 指示 大模型 完成任务。例如,只需向 大模型 提问“请将这段文字翻译成法语”,即可获得翻译结果。

这一进化反映了软件开发从显式逻辑到隐式学习,再到自然语言交互的转变。

Prompt 即程序:一种新的编程范式

软件 3.0 时代,Prompt 不再仅仅是输入,而是成为了程序本身。这意味着我们可以通过编写精心设计的 Prompt,来控制 大模型 的行为,实现各种复杂的功能。

例如,传统的垃圾邮件过滤需要编写复杂的规则,或者训练机器学习模型。而现在,只需向 大模型 提交 Prompt:“判断以下邮件是否为垃圾邮件:[邮件内容]”,即可获得判断结果。

这不仅仅是便利性的提升,更是一种全新的计算范式,它将编程的门槛大大降低,让更多人能够参与到软件开发中来。

大模型:新型操作系统

Karpathy 认为,大模型 不仅仅是工具,而是正在演变为复杂的软件平台,类似于操作系统。它们具备以下关键功能:

  • 内存管理:通过上下文窗口来存储和检索信息,类似于操作系统的内存管理。例如,在对话中,大模型 可以记住之前的对话内容,并将其作为上下文来理解新的问题。
  • 计算:通过 token-by-token 的推理过程进行计算,类似于操作系统的 CPU 运算。例如,大模型 在生成文本时,会逐个 token 地进行预测,直到生成完整的句子。
  • I/O:通过工具调用来实现输入输出,类似于操作系统的设备驱动。例如,大模型 可以调用外部 API 来获取天气信息、执行搜索等。

闭源模型(如 GPT、Gemini、Claude)类似于 Windows/macOS,提供完整的功能,但代码不开源。开源模型(如 LLaMA、Mistral)类似于 Linux,允许用户自定义和扩展。

基于 大模型 构建的应用(如 Cursor、Perplexity)就像运行在操作系统之上的应用程序,利用 大模型 的能力来提供各种服务。

半自治系统:人机协作的新模式

当前最有价值的 AI 应用并非完全自主的智能代理,而是半自治工具。例如,Cursor 是一款 AI 驱动的代码编辑器,开发者可以选择手动编写代码,也可以让 AI 自动完成代码补全、重构等任务。

这种模式的关键在于“自治滑块”,允许用户控制 AI 的自主程度。用户可以根据需要,灵活地调整 AI 的介入程度,从而实现人机协作的最佳效果。

Perplexity 等 LLM 原生应用结合了 AI 逻辑和熟悉的 GUI 控件,使用户始终处于控制之中。例如,用户可以在搜索结果中查看 AI 生成的摘要,并根据需要进行修改和补充。

大模型:人类精神的模拟

Karpathy 将 大模型 比作“人类精神”,它们可以模拟人类的记忆、推理和个性。大模型 拥有强大的通用知识和超人的模式识别能力,但也存在一些不足之处:

  • 幻觉大模型 可能会生成不真实的信息,这被称为“幻觉”。例如,大模型 可能会虚构一些不存在的事实或引用。
  • 无持久记忆大模型 无法长期保存信息,每次交互都需要重新提供上下文。例如,大模型 无法记住用户之前的偏好设置。
  • 易受操纵大模型 容易受到 Prompt 注入攻击,导致输出不符合预期。例如,恶意用户可以通过构造特殊的 Prompt,让 大模型 生成有害内容。

因此,与 大模型 的合作需要一种人机协作模式:AI 生成,人类验证。AI 负责快速生成内容,人类负责审核和修正,从而保证结果的质量。

构建卓越的大模型应用:四大关键要素

根据 Karpathy 的观点,成功的 大模型 应用通常具备以下四个关键要素:

  1. 上下文管理:应用需要及时向 大模型 提供正确的信息。例如,代码编辑器需要将当前代码库的上下文信息传递给 大模型,以便其进行代码补全和重构。可以使用 Embedding 技术来存储和检索代码库的上下文信息。
  2. 多 LLM 编排:针对不同的任务,选择不同的 大模型。例如,使用一个 大模型 进行聊天,另一个 大模型 进行检索,第三个 大模型 进行代码 diff。这种方式可以提高效率和准确性。
  3. 自定义 GUI:提供用户友好的界面,方便用户查看和控制 AI 的行为。一个好的界面应该让用户能够快速了解 AI 的工作原理,并能够轻松地批准或拒绝 AI 的输出。例如,用户可以在代码编辑器中查看 AI 生成的代码建议,并根据需要进行修改。
  4. 自治滑块:允许用户控制 AI 的自主程度。用户可以根据需要,灵活地调整 AI 的介入程度,从而实现人机协作的最佳效果。例如,Cursor 允许开发者在手动编码和 AI 驱动的仓库更改之间滑动,从而控制 AI 的自治程度。

设计速度:生成 + 验证

大模型 时代,我们不再只是编写软件,而是验证 AI 生成的软件。因此,提高反馈循环的速度至关重要。

以下是一些提高反馈循环速度的方法:

  • 使用可视化 GUI:通过可视化界面检查结果,比阅读原始文本更快。例如,可以使用 diff 工具来快速比较 AI 生成的代码和原始代码。
  • 编写清晰、受限的 Prompt:减少失败的可能性。Prompt 越清晰,大模型 生成的结果就越准确。例如,可以使用 few-shot learning 的方式,提供一些示例来引导 大模型 的行为。
  • 避免大型 diff:将任务分解成小块。这样可以更容易地发现和修复错误。例如,可以将一个大型代码重构任务分解成多个小的重构任务,并逐个进行验证。

为 LLM 设计:不仅仅是为人类

一个令人惊讶的洞见是:大模型 现在是软件的用户。就像人类或 API 一样。这意味着我们需要为 大模型 设计软件。

以下是一些为 大模型 设计软件的建议:

  • 使用 LLM 可读的格式编写文档:例如,使用 Markdown、JSON 等格式。
  • 避免使用 “点击这里” 等指令:使用 API 调用或 shell 命令代替。例如,可以使用 API 来模拟用户的点击行为。
  • 添加 lm.txt 文件:帮助 大模型 理解网站的目的。lm.txt 文件可以包含网站的描述、关键词等信息,帮助 大模型 更好地理解网站的内容。

简化、机器可读的文档有助于 大模型 理解并与您的软件交互。

Vibe Coding:人人都是程序员

Karpathy 创造了一个词:“Vibe Coding”。即使你不会 Swift,也没关系。Prompt 大模型,复制粘贴,调整,重复。他通过与 大模型 “共舞”,构建了可用的 iOS 和 Web 应用,而无需了解相应的语言。

这改变了谁可以构建软件,以及他们构建软件的速度。

DevOps 成为瓶颈

具有讽刺意味的是,最难的部分不是编码,而是所有非代码设置:身份验证、托管、计费、部署。这些任务仍然基于 GUI,需要手动点击。

Karpathy 问道:“为什么我要做这些?让 Agent 来做!”

解决此问题的早期尝试是创建模型上下文协议 (MCP)。

大模型时代,机器学习工程师的成功之道

随着 大模型 技术的不断发展,机器学习工程师的角色也在发生变化。为了在 大模型 时代取得成功,机器学习工程师需要掌握以下关键技能:

  • Prompt 工程:学习编写高效、准确的 Prompt,控制 大模型 的行为。
  • 人机协作:掌握人机协作的模式,充分发挥 AI 的优势,并利用人类的智慧进行验证和修正。
  • 系统设计:设计能够充分利用 大模型 能力的应用程序,并考虑到上下文管理、多 LLM 编排、自定义 GUI 和自治滑块等因素。
  • 持续学习:密切关注 大模型 技术的最新进展,不断学习新的技术和方法。

总结

大模型 正在改变软件开发的范式,Prompt 工程正在成为一种新的编程方式。作为机器学习工程师,我们需要积极拥抱这一变革,掌握新的技能,才能在 大模型 时代取得成功。通过有效的 Prompt 设计和人机协作,我们可以构建出更加智能、高效的应用程序,为人类带来更多价值。