规格驱动开发:吴恩达教你高效驾驭AI编程智能体

文章正文
在AI编程助手日益强大的今天,如何真正驾驭这些能够连续工作二三十分钟、相当于人类数小时工作量的智能体,成为专业开发者的新课题。吴恩达(Andrew Ng)联合JetBrains推出的最新课程《Spec-Driven Development with Coding Agents》,给出了一个明确答案:规格驱动开发(Spec-Driven Development)。
什么是规格驱动开发
课程由JetBrains开发者布道师Paul Everett主讲。其核心理念直截了当:与其一行行手写代码,不如把精力放在**编写智能体尚不具备的上下文(context)**上。你给编程智能体一个Markdown文件或一段详尽的提示词,清楚说明要构建什么,智能体就会据此实现整个规格。
吴恩达指出,规格驱动开发是当前用智能编程助手构建严肃应用的最佳工作流。这与过去随手写几行提示词、任由模型自由发挥的做法有本质区别——它把开发者的角色从「码农」转变为「架构决策者」。
思想渊源:规格驱动开发并非凭空而来。它在思想上继承了软件工程领域数十年的「契约式设计」(Design by Contract)传统——由Bertrand Meyer在1986年随Eiffel语言提出,强调在编写代码前先明确定义前置条件、后置条件和不变量。所谓「前置条件」是调用方必须满足的输入约束,「后置条件」是实现方承诺的输出保证,「不变量」则是整个生命周期内始终为真的系统状态——三者共同构成一份可机器验证的行为契约。Eiffel语言将这套契约直接内嵌为语法关键字(
require/ensure/invariant),使得违反契约的行为可在运行时被即时捕获,这一设计影响了后来的D语言、Kotlin协议以及Python的typing模块。只不过在AI编程时代,「契约」的受众从编译器变成了大语言模型。更广义上,它也呼应了「规格先行」(Spec First)的API设计文化,如OpenAPI/Swagger规范强迫开发者在实现接口前先定义接口契约——API消费方甚至可以在服务端实现完成前就基于规格文件生成Mock服务进行并行开发。OpenAPI(原名Swagger)由Tony Tam于2010年在Wordnik公司发起,2016年捐赠给Linux基金会并更名,如今已成为REST API描述的工业标准,被AWS API Gateway、Azure API Management、Google Cloud Endpoints等主流云平台原生支持。其核心贡献在于将API的输入输出结构、认证方式、错误码等行为约定以机器可读的YAML/JSON格式固化,使得代码生成、文档生成、测试桩生成均可自动化完成。这一「规格即可执行文档」的理念,在AI编程智能体的语境下演化为:一份高质量的Markdown规格本身就是可被智能体解析并执行的「软性程序」。
这一思想链条说明:人类在编码之前先把意图形式化,始终是高质量软件工程的核心习惯,AI只是把遵守这一习惯的收益放大了数倍。
编程智能体的工作原理
课程中反复提及的「编程智能体」,在技术上是一种基于大语言模型的自主Agent系统。与单轮问答式的代码补全(如早期GitHub Copilot)不同,编程智能体具备「感知—规划—行动」的循环能力:它可以读写文件系统、执行终端命令、调用测试套件、检索代码库,并根据执行结果进行多轮自我修正。
典型实现包括Claude Code(Anthropic)、Gemini CLI(Google)、Codex CLI(OpenAI)以及JetBrains自研的Junie等。这类Agent通常采用ReAct(Reasoning + Acting)框架——该框架由普林斯顿大学和Google Brain于2022年联合提出,发表于论文《ReAct: Synergizing Reasoning and Acting in Language Models》,其核心思想是将「推理轨迹(Reasoning Trace)」与「行动(Action)」交替进行:模型在每一步先用自然语言显式推理下一步应该做什么,再调用工具执行,工具的返回结果(称为Observation)又被注入下一轮推理,形成「Thought→Action→Observation」的三元组闭环。这一设计使得推理过程可被完整记录和审计,是当前主流AI Agent可解释性的重要技术基础。
与纯粹的「思维链」(Chain-of-Thought)提示不同,ReAct的推理步骤不仅服务于最终答案,更是在动态观察外部环境反馈后实时调整计划的决策过程——这使得Agent在面对不可预期的工具执行结果(如测试失败、文件不存在、编译报错)时,能够基于实际观测而非预设假设来调整策略。值得一提的是,ReAct框架与认知科学中「系统2思维」(System 2 Thinking)的概念存在深层共鸣:在Daniel Kahneman的双过程理论中,系统1是快速、自动、依赖直觉的认知模式,系统2代表慢速、有意识、逐步推理的认知模式——ReAct正是通过强制模型将每一步推理显式化,将LLM从快速模式匹配(类系统1)拉向更审慎的逐步决策(类系统2),从而在长任务中维持更高的规划连贯性,使Agent能够维持数十步的工具调用链而不偏离目标。这一机制也解释了为何在复杂编程任务中,配备完善工具调用能力的ReAct Agent往往显著优于单纯依赖预训练知识的纯生成式模型。
正是这种「自主运行20-30分钟」的能力,使得上游规格的质量对最终输出的影响被成倍放大——Agent越自主,初始指令的偏差代价就越高。
三大核心收益
课程强调了规格驱动开发的三个立竿见影的好处。
用小改动撬动大变更
第一个收益是杠杆效应。一句话的规格改动,可能影响数百行代码。比如写下「使用SQLite搭配Prisma ORM」这样一句话,就能自动生成大量对应代码;若把它改成「MongoDB」,同样的下游放大效应会重新生成整套实现。

技术背景:SQLite是嵌入式关系型数据库,由D. Richard Hipp于2000年创建,数据以单一文件存储,无需独立服务进程,是全球部署量最大的数据库引擎之一(被估计运行在超过万亿个设备上,包括iOS、Android系统内置),适合本地原型、移动端应用或轻量级后端;MongoDB是文档型NoSQL数据库,以BSON(Binary JSON)格式存储JSON-like文档,擅长处理非结构化或频繁变更的数据模型,天然适配水平扩展场景,是「MEAN/MERN技术栈」的标准数据层组件。两者架构差异巨大:查询范式(SQL声明式语法 vs MongoDB查询语言MQL)、事务模型(SQLite支持完整ACID事务,MongoDB在4.0版本后才引入多文档事务,而在此之前长期被诟病缺乏事务支持)、索引策略、部署方式均完全不同,迁移成本在传统开发中极高,通常需要重写全部数据访问层代码。
Prisma ORM作为类型安全的Node.js/TypeScript数据库工具链,由Prisma Data Inc.(原Graphcool)于2019年发布2.0版本后获得广泛采用,其核心设计之一正是通过
schema.prisma配置文件抽象底层数据库差异——开发者用统一的Prisma Schema Language(PSL)描述数据模型,PSL是一种声明式领域专用语言,开发者以「模型是什么」而非「如何操作数据库」的视角定义实体关系,由Prisma Client生成对应数据库的类型安全查询代码(TypeScript类型定义随模型自动更新,从根源上消除了ORM与类型系统脱节的「阻抗失配」问题),由Prisma Migrate生成对应数据库方言的DDL迁移脚本。这种「一份模型定义,多种数据库实现」的架构本身就是「规格驱动」思想的工程化体现:先定义模型契约,再由工具生成实现。在Prisma中切换数据库提供商,理论上只需修改datasource块的provider字段,ORM层负责生成对应的查询适配器。编程智能体理解这套规范后,一句规格变更即可触发跨越整个数据访问层的代码重构——这正是「规格杠杆」最直观的体现。
这意味着编写规格远比手写代码高效——你在规格层面做决策,让智能体承担繁重的落地工作。
消除会话间的上下文衰减
第二个收益是对抗上下文衰减(context decay)。智能体本质上是无状态的(stateless),每次启动都是「白纸一张」。因此在它启动的那一刻,用高质量的上下文将其「充满」至关重要。规格文件充当了跨会话的记忆载体,把那些不可妥协的约束(non-negotiables)固化下来,避免每次重新沟通带来的信息丢失。
深层原因:「上下文衰减」涉及大语言模型(LLM)的底层架构特性。现有的Transformer架构模型本质上是无状态函数:每次推理都是一次独立的前向传播(forward pass),模型权重在推理过程中不发生更新(这与人类学习的反向传播训练过程有本质区别),也不持久化任何会话记忆。所谓「记忆」,完全依赖于每次调用时显式传入的上下文窗口(context window)内的Token序列——窗口之外的信息对模型而言如同从未存在。
值得注意的是,即便是同一个上下文窗口内,斯坦福大学2023年的研究者也发现了「迷失在中间」(Lost in the Middle)现象——模型对窗口首尾的内容注意力权重(Attention Weight)显著高于中间部分,这一现象与Transformer自注意力机制的位置编码(Positional Encoding)设计有关。这意味着即便规格文件被纳入窗口,其在窗口中的位置编排也会影响智能体的实际遵从度。这一发现对规格文件的写作实践有直接指导意义:关键约束应当置于规格文件的开头或结尾,而非埋没在冗长的中间段落中。即便当前主流模型的上下文窗口已扩展至数十万乃至百万Token(如Gemini 1.5 Pro支持100万Token,Claude 3系列支持20万Token),跨会话的记忆断裂依然是结构性问题——一旦会话结束,窗口清空,下一次对话重回零点,前一次会话中智能体习得的所有项目决策与约束均告消失。
学术界和工程界为此探索了多种「外部记忆」方案,包括向量数据库(Vector DB,如Pinecone、Weaviate、pgvector)存储对话摘要并通过语义检索(Semantic Search)按需召回、记忆蒸馏(Memory Distillation)将长对话压缩为结构化摘要,以及MemGPT等专门针对长期记忆管理的Agent框架,但这些方案在工程复杂度和召回精度上代价不小。规格文件的作用,正是以最低成本充当「外部记忆基底」——在每次会话启动时,将关键架构决策、技术约束和项目背景系统性地注回模型的上下文,从机制上对抗这一结构性缺陷,且无需任何额外基础设施。
提升意图保真度
第三个收益是意图保真度(intent fidelity)。你在规格中定义清楚问题、成功标准、约束条件等要素,智能体便能在此基础上展开,生成更完整的计划。
吴恩达分享了自己常用的写规格方法:先与Claude Code、Gemini或ChatGPT Codex这类智能体对话,凭借自己对不同权衡取舍的判断做出关键架构选择,再让智能体把这些决策整理成一份Markdown文件。

没有规格的代价
课程也坦诚地指出了缺乏规格的风险。写规格需要认真思考——你必须决定要构建什么产品,并前瞻性地考虑技术架构等关键决策,这本身是一项艰苦的脑力工作。
如果没有规格,你就是把这些重要决策完全交给编程智能体随意发挥。在追求极速、愿意「掷骰子碰运气」的场景下或许可行,但往往导致可维护性更差的代码,有时甚至产出相当混乱的产品。

吴恩达举了一个真实案例:他见过一些团队在开发复杂软件时没有清晰规格,结果不同开发者各自指挥编程智能体,虽然都在快速构建,方向却相互矛盾,最终埋下了大量下游隐患。这一现象在软件工程中有一个经典对应物:弗雷德·布鲁克斯在《人月神话》(The Mythical Man-Month,1975年)中早已指出,多人并行开发缺乏统一架构蓝图时,沟通成本会随人数的平方增长——这一规律被称为「布鲁克斯定律」(Brooks's Law)。布鲁克斯基于自己在IBM System/360操作系统开发中的亲身管理经验写就此书,其中「向一个已经延期的软件项目增加人手,只会让它更加延期」的洞见至今仍被奉为软件项目管理的基本定律。布鲁克斯定律的深层逻辑来自康威定律(Conway's Law):系统架构会不可避免地映射组织的沟通结构,缺乏统一规格的团队,其代码库必然呈现碎片化的架构状态。
康威定律由计算机科学家Melvin Conway于1967年首次提出,原文表述为「设计系统的组织,其产生的设计等同于组织之间的沟通结构」。该定律在微服务架构兴起后重新获得广泛关注,被称为「反向康威策略」(Inverse Conway Maneuver):不再被动接受组织结构决定架构,而是主动设计组织结构来驱动期望的架构形态。Amazon的「两个披萨团队」原则(团队规模以两张披萨能喂饱为上限,约6-8人)、Spotify的「Squad/Tribe/Chapter/Guild」四层组织模式,均可视为有意识地利用康威定律反向设计组织结构以驱动架构演进的工程实践。在AI智能体协作的语境下,康威定律呈现出新的面向:每个智能体实例的「沟通边界」由其上下文窗口决定,缺少共享规格时,多智能体并行开发会将架构碎片化的问题烈度成倍放大——不同智能体可能对同一业务概念产生截然不同的数据模型抽象,形成难以合并的「架构方言」——这可以被理解为康威定律在人机混合团队中的新形态。
工作流:从项目宪法到功能开发循环
规格驱动开发的具体工作流分为两个层次。
项目层面,需要制定一部「宪法」(constitution),定义整个项目不可变的标准规范,为所有后续开发划定底线。这份「项目宪法」通常包含:技术栈选型(语言、框架、数据库)、代码风格约定、目录结构规范、安全与合规要求,以及明确禁止使用的模式或依赖。其本质是将隐性的团队共识显性化,确保每个新会话启动的智能体都在同一套约束下工作。在实践中,这份宪法文件通常以AGENTS.md、CLAUDE.md或SPEC.md等固定文件名放置在代码仓库根目录,部分编程智能体(如Claude Code)已内置对特定文件名的自动读取支持,会在每次会话初始化时将其自动注入上下文。
功能层面,则通过迭代的**功能开发循环(feature development loops)**推进。每个功能被隔离在独立的分支上,遵循「规划(plan)—实现(implement)—验证(verify)」三个步骤。这种隔离让每个功能之间保持干净的起点,减少了上下文切换带来的混乱。
与Git工作流的映射:这一「功能开发循环」并非新发明,而是对成熟Git工作流的AI时代重新诠释。在传统的GitHub Flow中,每个功能同样被隔离在独立的feature branch上,经过开发、Code Review、CI/CD验证后合并主干;GitLab Flow则在此基础上增加了environment branch(如staging、production)以支持持续交付场景。规格驱动开发将这一流程向上游延伸:在创建分支之前,先生成该功能的Markdown规格文档,让编程智能体以此为蓝图在隔离环境中自主完成实现。
「验证」步骤通常对应运行单元测试、集成测试,或让智能体自我审查代码是否符合规格中定义的成功标准——这与测试驱动开发(TDD)的思路高度吻合:先定义「何为成功」,再驱动实现。值得注意的是,规格中的「成功标准」与TDD中的测试用例存在层次差异:前者是自然语言描述的业务验收条件(Acceptance Criteria),后者是可执行的技术断言——理想的规格驱动流程会引导智能体将前者自动转化为后者,形成「规格→测试→实现」的完整转化链。这一转化链与行为驱动开发(BDD)的Gherkin语言有异曲同工之妙:BDD以「Given(前置条件)/When(触发事件)/Then(预期结果)」的结构化自然语言描述验收条件,再由工具(如Cucumber、Behave、pytest-bdd)将其绑定到可执行测试代码——规格驱动开发中智能体扮演的角色,正是这个「绑定层」的自动化替代者,且能处理比Gherkin语法更为自由和复杂的自然语言规格描述。
「分支即沙盒」的设计既防止了不同功能的代码污染,也为智能体提供了干净的操作边界——减少它在全局代码库中产生意外副作用的概率,同时也天然支持通过Pull Request进行人工审查,在自动化与人工监督之间保持合理张力。这一「人在循环(Human-in-the-Loop)」的设计原则,也与当前AI治理领域对高风险自动化系统的监管要求高度契合。
同一套工作流既支持项目开发,也支持功能开发。开发者通过这些循环以小步方式管理版本迭代。课程中还会教你编写自己的智能体技能(agent skills),来自动化整个规格驱动流程。
何时该写规格:不是所有场景都需要
你可能没注意到,吴恩达并未一味推崇规格。他明确表示自己是「懒惰提示(lazy prompting)」的拥护者——如果一个简短提示就能完成任务,那当然最好。

但他强调,他所认识的优秀开发者,在面对任何有一定复杂度的项目时,几乎总会编写详细的规格。原因在于他们拥有独特的上下文和对「构建什么、如何构建」的明确判断,这些远胜于让缺乏上下文的大模型随机决策。
他给出了一个很有说服力的成本核算:如果编程智能体要花20到30分钟写代码(相当于传统开发者数小时的工作量),那么你提前花三四分钟写清楚指令,往往是更划算的投资。这一逻辑在经济学上对应「前期规划的杠杆率」——越是下游执行成本高昂的任务,上游规划的边际回报率越高。
软件工程中有一条广为引用的经验数据来自Barry Boehm的COCOMO模型研究:需求阶段修复一个缺陷的成本,是编码阶段的5-10倍,是测试阶段的10-100倍。COCOMO(Constructive Cost Model,构造性成本模型)是Boehm于1981年基于对数千个真实软件项目数据的统计分析建立的成本估算模型,是软件工程领域少数基于大规模实证数据(而非纯理论推导)的量化模型之一,后续的COCOMO II(1995年)进一步纳入了面向对象开发、商业现货软件(COTS)复用等现代开发模式的修正因子。COCOMO的核心发现之一正是「越早发现并修复缺陷,总成本越低」——这一「缺陷修复成本指数级增长」的规律在后续数十年的大量独立研究中被反复验证,成为软件工程中少数经得起时间检验的量化定律之一。值得补充的是,IBM Systems Sciences Institute在其研究报告中给出了更为极端的数据:生产环境中修复缺陷的成本可能是需求阶段的100倍;而在安全关键系统(如航空、医疗设备软件)领域,这一倍数还会因召回、监管处罚等因素进一步放大。这一量级的成本差异,构成了「规格先行」最有力的经济学论据。规格驱动开发的本质,正是把这一古老经验法则迁移到人机协作的新场景中:以分钟级的规格投入,规避小时级的智能体返工成本——在智能体自主性不断增强的趋势下,这一杠杆效应只会持续扩大。
结语
这门课程本质上是对「人机协作分工」的一次重新定义:在智能体能自主完成大量编码工作的时代,人类开发者最大的价值不在于敲键盘,而在于做出高质量的决策并清晰地表达意图。规格驱动开发提供的,正是把这种价值系统化、工程化的方法论。
该课程由JetBrains的Constantine Chiker、Zina Smirnova以及DeepLearning.AI的Isabel Zaro等多人共同完成,对希望用AI智能体构建严肃应用的开发者而言,值得深入学习。
核心要点
相关推荐

气态巨行星上的浮空城市:为什么人类终将移居木星云端
SFIA 主持人 Isaac Arthur 重新定义气态巨行星浮空城市:它们不是等待聚变的燃料站,而是散装氢、氦、氮的"质量城市"。本文解析其工程原理、供电方案与从工业前哨到文明家园的演化逻辑。

用Claude Code一天半做出AI测验:Vibe Coding的真实样本
一位开发者用Claude Code结合Opus 5.5与Fable 5.1,在一天半内做出一款PS1复古风格的AI主题测验游戏。本文解析这个业余项目背后的AI辅助编程实践与行业启示。

用Claude+Muse打造自动化膳食规划:AI如何替代HelloFresh
一位不懂编程的Reddit用户用Claude和Muse搭建了自动化膳食规划系统,涵盖菜单规划、沃尔玛自动下单、厨房平板界面,号称HelloFresh杀手。本文解析其工作流与AI生活自动化的启示。