2026年6月3日
spec 才是源。prompt 只是用完即弃的边角料。
在一份由 agent 编写的代码库里,什么才是“源代码”?不是生成出来的代码——那现在只是构建产物,就像编译出来的二进制文件。也不是 prompt——那只是你划着用来启动构建、然后随手丢掉的一根火柴。真正持久、由你撰写、拥有、版本化并审查的东西,是 spec。这个层级关系已经翻转,而大多数人还在打磨那个本该扔掉的部分。
有个问题听上去简单,可一旦 AI agent 开始替你写绝大部分代码,它就不简单了:现在什么才是 源代码?请指出那个真正的、权威的、由你亲手编辑的项目产物。大多数人指向 agent 生成的代码。有些人指向 prompt。两者都错了,而正确答案与这两者之间的落差,正是值得理解的整个转变。
我之前写过,你应该去推敲的产物是 spec(规格),而不是 prompt。这成为一个行业的一年里,只让这个论断更加锋利。问题不只是 spec 是 一个 产物。问题在于,spec 如今就是 那个源 ——而你本能伸手去抓的两样东西,代码和 prompt,都被降级到了它之下。
旧的层级:代码就是真理
在软件的整个历史里,源代码一直是真理之源。它是你亲手撰写、拥有、纳入版本控制、逐行审查、为之争论的那个持久之物。文档和注释是次要的——它们是 对 代码的描述,允许漂移,从来不是权威。当文档和代码不一致时,代码胜出,因为代码是真实的,而文档只是关于它的一个说法。
这个层级正在翻转,而且它有了名字。
翻转:spec 是源,代码是构建产物
规格驱动开发(spec-driven development)——每一个主流 AI 编码工具都在 2025–26 年发布了自己的一版——把一份书面的、纳入版本控制的规格当作唯一的真理之源,并把代码视为生成出来的产物。你写 spec——系统做什么、为什么这么做——推导出一份计划,把它拆成任务,agent 再据此生成代码。spec 是人类编辑的产物;代码是构建吐出来的东西。
这个领域一再援引的类比恰恰就是对的那个:spec 之于代码,就像 .c 文件之于二进制——它是源,代码是它编译出来的二进制文件。你不会手动去改一个编译好的二进制文件;你改的是源,然后重新构建。在规格驱动开发里,生成出来的代码就是那个二进制文件——你同样不会手动去打补丁,因为你一动手,它就和本该定义它的源失了同步。你改的是 spec,然后重新生成。
这早已不是边缘想法。GitHub 的 Spec Kit 跨过了 9 万星,支持 29+ 个 agent;AWS Kiro 是一个完全围绕它打造的 IDE;Cursor、OpenSpec、Tessl 等等也都发布了各自的版本。甚至有人把它称为第五代编程。整个工具世界一下子收敛到了同一个翻转上。
为什么它是对的,而不只是赶时髦
它之所以管用,原因和从源代码编译之所以管用是同一个:你在 意图 这个层级上推敲和改动,让构建去产出产物。规格驱动开发正是作为“vibe coding”的解药而出现的——给 agent 喂个 prompt,它就堆出一坨看似合理、却偏离你本意、凭空捏造 API、随着规模增长而腐烂的代码。把构建锚定在一份书面的意图上,漂移就有了可以被衡量的参照。
而且它有回报。GitHub 报告说,使用 Spec Kit 的团队交付功能时,“从头重新生成”的循环次数大约比随手 prompt 少一个数量级;AWS 记录了在 spec 优先撰写时,原本需要 40 小时的功能在不到 8 小时的人力时间里就交付了。这不是什么小幅的效率提升——这就是当你不再手动编辑二进制文件、而开始真正拥有源时所发生的事。
那么 prompt 又算什么?
这一部分会重新框定一切。如果 spec 是源、代码是构建产物,那 prompt 甚至都不在你保留的那套层级里。prompt 是用完即弃的边角料——你发出来用以触发一次生成的临时命令,就像你敲下去运行 make 的那一行 shell。你不会把自己的 make 调用纳入版本控制、在 pull request 里审查它;你版本化的是 Makefile 和源,而那行命令只是你那一次启动构建的方式而已。
这也正是为什么纠结 prompt 的措辞从一开始就瞄错了靶子——这和我主张prompt engineering 已死时讲的是同一个点。团队打磨着一个用完就扔的东西的遣词造句,却对 spec 投入不足,而 spec 才是他们该下苦功、该版本化、该审查的那个东西。他们在校对火柴,却无视了蓝图。
实际中它是什么样子
我就是这么构建的。spec 是我真正动手的产物——我起草它、跟自己争论它、把它纳入版本控制、把它当回事地审查,因为它就是那个起作用的部分。agent 据它生成代码。如果代码错了,我几乎从不去打补丁;我修 spec 然后重新生成,因为手动改产物就是在编辑二进制文件、就是在和源失同步。至于驱动了某次生成的那个 prompt?第二天就没了。我再也不会去看它,因为它是边角料——是你划着用来启动构建的东西,不是你保留的东西。
所以我开篇提的那个问题,现在有了一个干净的答案。一个 AI 构建的系统,它的源代码是 spec。代码是构建从中吐出来的东西。prompt 是你划着然后丢掉的那根火柴。把 spec 当成源来写吧——因为它恰恰已经变成了源。
评论
暂无评论
登录以参与讨论。
做第一个分享想法的人。