返回技术博客

从 Vibe Coding 到 Agentic Engineering:Karpathy 的编程进化论

今年初 Karpathy 在 X 上造了一个词:Vibe Coding。

原文大意是:我现在写代码的方式变了,我完全拥抱 AI,不再手动写任何东西。我看到代码就接受,不太仔细看差异,它报错了我就把错误信息粘回去让它修。代码在成长,已经超出了我通常愿意手动理解的范围,但它能跑就行。

这段话在开发者社区引起了巨大争议。有人觉得这是编程的未来,有人觉得这是在教人写 bug。

几个月后,Karpathy 做了一个演讲把这个概念升级了。标题是「From Vibe Coding to Agentic Engineering」。

Vibe Coding 是什么

Vibe Coding 的核心特征:

  • 你不写代码,只描述你想要什么
  • AI 生成代码,你不逐行检查
  • 出了 bug,把报错丢回给 AI
  • 代码库快速增长,你不完全理解它的内部结构
  • 判断标准是「能跑」而不是「写得好」

这听起来很疯狂,但在特定场景下确实有效:快速原型、一次性脚本、个人工具、黑客马拉松。这些场景下代码的生命周期很短,维护性不重要,速度才重要。

Karpathy 自己说得很清楚:Vibe Coding 适合「周末项目」,不适合「你要维护 10 年的核心业务系统」。

问题出在哪

Vibe Coding 最大的问题不是代码质量低,而是它没有办法处理复杂性。

当项目超过一定规模(大约几千行),Vibe Coding 开始崩溃。AI 开始重复生成之前已经有的功能,不同模块之间出现不一致,修一个 bug 引入两个新 bug。你不理解代码,所以你也无法有效地引导 AI。

这是一个结构性限制:当人类完全退出理解循环,系统就失去了方向感。AI 很擅长写符合局部要求的代码,但它缺乏对整体架构的把握。

Agentic Engineering 的升级

在演讲里 Karpathy 提出了进化路径。不是「Vibe Coding 的改进版」,而是质的变化:

Vibe Coding:人描述需求 → AI 写代码 → 人不看代码 → AI 修 bug

Agentic Engineering:人设计系统架构和约束 → Agent 自主执行 → Agent 自己验证 → 人审查关键决策点

区别在三个地方:

1. 人的角色不同。 Vibe Coding 里人是需求描述者。Agentic Engineering 里人是架构师和审核者。你不是告诉 AI「帮我做一个登录页面」,而是定义「系统的认证层应该满足这些约束,你来实现」。

2. 验证方式不同。 Vibe Coding 里验证是「能跑就行」。Agentic Engineering 里验证是系统化的:自动测试、类型检查、lint、性能基准。Agent 自己跑测试,不通过就自己修,不需要人把报错粘回去。

3. 知识积累不同。 Vibe Coding 每次从零开始。Agentic Engineering 里 Agent 维护自己的知识库(就是上一篇讲的 LLM Wiki 思路),每个项目积累的经验可以传递给下一个项目。

实际操作的样子

用一个具体的例子。假设你要给一个 Web 应用加用户权限系统。

Vibe Coding 的做法: 「帮我加一个权限系统,有管理员和普通用户两种角色,管理员能删除帖子。」 → AI 生成代码,可能塞到了错误的文件里,可能和现有的认证逻辑冲突,可能硬编码了角色名。你不在意,能跑就行。

Agentic Engineering 的做法: 你先写一个约束文档(类似 program.md):

  • 权限模型使用 RBAC
  • 角色和权限的映射存在数据库里不要硬编码
  • 所有 API endpoint 必须经过权限中间件
  • 新增 endpoint 必须有对应的权限测试
  • 不能破坏现有的测试套件

然后让 Agent 去实现。Agent 自己读现有代码理解架构,自己写代码,自己跑测试,测试不过自己修。你在最后审查一下关键的设计决策(比如权限模型的 schema 设计)。

为什么这很重要

这个演进路径揭示了一个更深层的趋势:编程正在从「写代码」变成「设计约束」。

之前几篇文章里的案例都在印证这个趋势:

  • Forge 的 guardrails:不是让模型变聪明,而是设计约束让笨模型也能可靠工作
  • Co-Scientist 的锦标赛:不是让一个 Agent 想出完美假说,而是设计对抗机制让一群 Agent 互相淘汰
  • autoresearch 的 program.md:不是手动做实验,而是定义规则让 Agent 自主实验

模式是一样的:人类从执行者退到规则制定者的位置。执行交给 Agent,人负责定义什么是对的、什么是不允许的。

编程技能不会消失,但形态会变。以前的核心技能是「写正确的代码」。以后的核心技能可能是「定义正确的约束」和「审查 Agent 的输出」。

这两个技能需要的知识基础是一样的(你得懂系统设计、懂安全、懂性能),但产出方式完全不同。一个像工匠,一个像建筑师。


这是 AI Agent 系列的第十一篇。前几篇: