最近,前特斯拉 AI 负责人、OpenAI 联合创始人 Andrej Karpathy 在一篇博文中,分享了对他此前所提出的“氛围编程”概念的一次实践,开发了一个名为 MenuGen 的应用程序。
MenuGen 的目标是帮助用户理解餐厅菜单上那些不太熟悉的菜品,这些菜品往往只有简单的配料和做法,顾客很难从字面上理解这到底是怎样的一道菜。
现在,顾客只需拍照上传菜单,MenuGen 应用就能通过 OCR 技术(光学字符识别)提取菜单信息,再通过生成图片的方式为每道菜提供可视化展示。
这篇文章很直观地罗列了 Karpathy 在开发过程中遇到的各种挑战,可以视为 Karpathy 对之前被自媒体热炒的“氛围编程”概念的一次“自我降温”。
什么是“氛围编程”?
“氛围编程”是 Karpathy 提出的一个新概念,它描述了一种完全沉浸在开发“氛围”中的编程方式。
在这种模式下,开发者可以完全拥抱大语言模型(LLM)带来的指数级进步,甚至到了一种几乎忘记代码本身存在的程度。
在实际操作中,开发者通常只需要提出最基础的需求,并直接点击“全部接受”,而无需关注具体的代码差异。
如果遇到报错,他们就把错误信息复制到对话框中,交给 LLM 去修复。
有时候,如果 LLM 无法解决问题,开发者也可以选择绕过错误,或者随机调整代码直到问题自动消失。
对于一些轻松的周末项目来说,氛围编程简直充满了趣味。你只需要观察、口述、运行、复制粘贴,结果大多数时候都能顺利运行。
实际开发中遇到的挑战
1. 初步开发:快速上手,有一种看似完成的错觉
Karpathy 发现,使用大语言模型来在本地构建应用的前端原型是非常快且简单的。
只需要一些指令,语言模型就能生成一个视觉上吸引人的界面,给人一种项目马上就能完成的错觉。
然而,这只是开始。
2. 集成外部服务:API 集成的挑战
随着开发深入,Karpathy 遇到了集成外部服务的困难。
特别是在使用 OpenAI 和 Replicate API 时,语言模型常常“产生幻觉”,也就是生成一些已经过时的 API 文档或接口。即使是 API 密钥的设置和权限管理,也让他非常头疼,
(小声哔哔:Karpathy 大神显然是还没了解到 Context7 这个 MCP 服务,这个服务可以自动把最新文档“喂”给 AI ,降低幻觉问题,详情可看我之前写的一篇文章。)
另外,他也常常遇到了速率限制(特别是刚创建账户时)。这无形中拖慢了开发速度。
3. 部署和认证问题
在将应用部署到云平台时,Karpathy 又遇到了不少麻烦。
部署在 Vercel 时,很多在本地调试正常的错误,到了云平台上却无法重现。
特别是他忽略了手动配置 API 密钥,导致了一个常见的错误。
而且,他还发现,Vercel 自动将他的私有仓库公开,这让他感到惊讶。
至于用户认证部分(例如使用 Clerk 配置 OAuth),这一过程也比他想象的要复杂很多。
将应用从开发环境转移到生产环境,需要做大量的配置工作,包括购买域名、配置 DNS 记录等等。
4. 支付集成:又一个复杂的环节
接下来,Karpathy 将支付功能集成进了 MenuGen,然而这又是一番折腾。
Stripe 的集成需要更多的配置和 API 密钥,而且他还碰到了代码和技术栈之间的兼容问题。
最终,Stripe 和项目的 TypeScript 代码并不完全匹配,Karpathy 不得不亲自指导语言模型修复代码。
5. 忽略的功能:想法与现实的差距
虽然 MenuGen 能够初步完成任务,但 Karpathy 也意识到,应用缺少一些必备的功能,比如处理超时和持久化结果。
理想情况下,这些功能需要数据库和工作队列,但考虑到集成这些服务的复杂性和预期的“痛苦”,他决定暂时跳过。
从开发到反思:“氛围编程”之外的局限性
通过这次开发经历,Karpathy 深刻认识到,虽然大语言模型能在局部开发中发挥巨大的作用,但要把这些技术应用到实际部署的环境中,依然是一个“痛苦的过程”。
大部分时间,他都在设置和配置各种服务,而不是编写实际的代码。
更重要的是,现有的基础设施并没有为这种由语言模型驱动的开发方式而设计,这使得开发过程中的很多步骤都显得不够顺畅。
未来的方向:更加集成和智能的工具
虽然 Karpathy 对目前的开发过程感到沮丧,但他并没有失去信心。
未来,他认为,需要一种更加集成的开发平台,这种平台可以“开箱即用”,帮助开发者快速完成托管、认证、支付、数据库等复杂功能的配置。
他还建议,未来的服务可以变得更加友好,特别是对 LLM 开发者来说。
总结:氛围编程的潜力与挑战
Karpathy 的这次经历证明了通过“氛围编程”,我们确实可以大大加速开发过程,甚至让非专业程序员也能参与到应用开发中来。
然而,真正将这些技术应用到实际环境中时,我们仍然会面临很多挑战。
尽管如此,Karpathy 对未来充满希望。他相信,随着技术的发展,氛围编程将变得越来越成熟,最终能降低开发门槛,让更多的人能够创造出自己的应用。