什么是Spec-driven Development (SDD)
引用一下Gemini给出的定义:
SDD is a modern software development approach, especially for AI-assisted coding, that emphasizes creating detailed, executable specifications before writing code, turning them into living documents that guide AI agents and developers to build software methodically, ensuring alignment with the desired outcome, managing complexity, and enabling better collaboration and maintenance by treating specs as the core source of truth, rather than just scaffolding.
关键点在于用Spec文件来指导开发,持续维护更新Spec文件并将其当作source of truth。个人认为,SDD是Plan Mode的进一步升级版。下图对比了三种开发模式:

最传统的AI辅助开发直接从用户的提示词生成代码,用户难以控制代码生成的质量和方向,如果本轮代码不合预期,则需要在下一轮提示词中指出并修正。不同轮次的对话之间仅通过上下文连接,当上下文重置之后,AI将完全遗忘用户之前的需求,转而从理解已有的代码入手,继续生成代码。然而,之前生成的代码本就可能于用户的实际需求有偏差,这种偏差可能不断累积,最后导致AI写的项目越来越难以维护。
Plan Mode的引入一定程度上缓解了这个问题。AI将首先根据用户的提示词生成一份开发计划,用户通过这份计划可以看到AI是如何理解自己的需求的,并打算如何实现它们。用户可以对这份计划提出反馈,反复调整计划直到满意,然后AI再根据计划开始生成代码。AI对用户指令的理解总是会有偏差的,与其等AI将这些偏差放进代码后再指挥它修改,不如先尽量修正这些偏差再开始写代码。Plan Mode还有一个隐藏的优势,它无形中充当了提示词润色,其实用户的提示词经常是杂乱无章的,就像作文的草稿,曾经有不少用户会先让一个独立的AI润色自己的需求,然后再交给AI写代码,Plan Mode因为生成计划的缘故无形中已经润色了用户的提示词。然而每次对话的Plan不会被保留,只会对这一轮对话生效,在清空上下文之后,AI仍然无从得知用户之前的准确需求,只能从现有代码推测。
SDD随后被提出,其与Plan Mode有一定相似之处,不同在于,Spec以文件形式被保留为项目的一部分并持续更新扩充,即便上下文清空,甚至即便由另一个AI模型接手,也能快速从Spec文件中了解到用户的真实需求,而不再需要从现有代码中猜测。具体而言,用户在每一轮对话中都会让AI将本轮需求转写为一份Spec,Spec中仅包含用户的意图,不包含AI计划的实现细节。然后AI基于本轮Spec,过往Spec,以及现有代码生成一份实现计划交给用户审核。用户此时可以反馈并修改Spec和计划,结束后交由AI实现,实现完成后用户如果验收通过,则AI会将本轮Spec合并进项目的Spec文件中。通过这种方式,Spec文件中记录的用户从始至终的全部意图/需求(所谓source of truth),而AI的每轮代码生成都从用户的真实需求出发。我个人将SDD的优势总结为以下几点:
- SDD is at least as good as Plan Mode:SDD的工作流程包含了完整的Plan-Feedback循环,理论上Plan Mode的所有优势SDD都具备。
- SDD为项目提供了长期记忆:用户的需求不再仅存在于上下文和现有代码之中,而是被持续记录在Spec文件中。任何AI模型都能通过Spec快速了解用户的全部真实需求。
- 具体到我们马上要讲的OpenSpec工具,它还在每轮中为AI提供了一份严格的TODO List,这可以帮助AI更完整地实现用户需求,减少遗漏和幻觉。
虽然SDD有以上优势,它也有一个明显的缺点:Token烧得更快了。SDD将每轮对话拆分为了好几个步骤,并额外生成了更多的文件,这会增加每个需求消耗的Token数量。这其实也是我们急需大量廉价Token的原因,从而有了对Team订阅的研究。
同时当我们深入了解SDD的具体实现(例如OpenSpec)后会发现,它仅使用了很少量的代码,大部分逻辑依然是通过提示词的方式存在的。如果你完成了上一篇中的openspec init命令后会发现项目中只是多了一个openspec文件夹,里面就包含了OpenSpec为Codex注入的提示词。在我们后续对于Skills的讲解中,这一点会再次显现。当今Vibe Coding的大厦仍然是建立在完备的提示词和强大的AI模型之上的,一项新出现的技术很有可能底层只是更好的提示词而已。