别再写 Prompt 了Spec Mode 才是下一代 AI 编程范式

前言

什么是 Vibe Coding?

2025 年初,随着大模型能力的跃迁和本地执行能力的增强,一种几乎"零门槛"的开发方式迅速走红------ Vibe Coding。

Vibe Coding 的本质是"通过对话迭代,将模糊的需求逐步变成实际产品",在这种模式下,开发者不再像传统工程那样先设计架构、拆解需求、定义接口,而是:

  • 通过自然语言向 AI 描述一个"模糊目标"
  • 依赖 AI(如大模型)快速生成代码
  • 根据运行效果不断"微调感觉"(vibe)
  • 通过多轮对话逐步逼近结果

一个典型的例子如下:

  • 帮我写一个文件上传组件,要支持拖拽和进度条。
  • 再加个失败重试功能
  • 顺便支持下图片预览能力
  • 这个 UI 不太对,直接使用 antd 的组件。

可以看到,这种模式有几个显著特征:

  • 弱约束:没有严格的输入输出定义
  • 高交互:依赖多轮 prompt 迭代
  • 即时反馈:强调快速看到结果
  • 上下文驱动:高度依赖当前对话语境

为什么 Vibe Coding 爆火?

Vibe Coding 的流行并不是偶然,它解决了传统开发中的几个核心痛点:

  • 极低的启动成本

    不需要设计文档、不需要接口定义,甚至不需要完整需求,直接开写。

  • 极高的开发速度

    借助 AI,很多"样板代码 + 通用逻辑"可以瞬间生成。

  • 更贴近人类思维

    人类本来就是模糊表达需求,而不是写接口文档。Vibe Coding 更符合直觉。

  • 探索性开发非常高效

    在做 demo、原型、工具脚本时,效率极高。

Vibe Coding 的核心问题

vibe coding 的核心问题可用一句话表示:在简单问题上表现惊艳,但在复杂系统中会迅速失控。

失控点一:起点偏差

在 Vibe Coding 中,任务通常从一句模糊描述开始,但真实系统往往会非常复杂,包含大量隐含信息:

  • 既有架构约束
  • 数据模型限制
  • 业务规则
  • 历史实现逻辑
  • ...

这些信息并不会出现在 prompt 中,于是 AI 开始自由发挥。

  • 基于经验进行合理补全
  • 生成一个看起来没问题的方案

这种行为的问题在于一旦初始理解出现偏差,后续所有生成都会在错误轨道上不断强化,最终与真实需求越来越偏离。

失控点二:上下文坍塌

随着开发深入,对话轮次增加,AI就开始出现「失忆」,具体表现为:

  • 已经确认的接口被重新设计
  • 明确过的约束被忽略
  • 关键细节在后续对话中消失

出现这些问题的本质原因是:

  • 上下文窗口有限(信息被压缩或截断)
  • 自然语言缺乏结构化表达
  • 没有稳定的长期记忆机制

结果就是:前面花大量时间达成的共识,在后续过程中不断被覆盖。

失控点三:过程失控

当任务进入中后期,问题会进一步升级:

  • 决策和核心逻辑散落在不同对话中
  • 没有阶段性产物沉淀,无法追溯设计意图

此时开发的状态变成:**没有工程状态,只有聊天记录,**这会带来严重后果:

  • 对话一旦中断,难以继续。
  • 一旦切换任务,需要重新解释上下文。
  • 没有中间过程记录,团队协作困难。

这就是典型的迷路状态:AI 不知道自己在做什么,开发者也无法控制方向

总结

在 Vibe Coding 模式下每开启一个新对话,AI 就会刷新为职场小白,当任务跨多个模块、多文件,并且要跨阶段推进时,不提前规划、对齐需求,AI就会跑偏,生成过程不可控,生成结果不可用。

什么是Spec Coding?

Spec Coding(规范驱动开发,Spec-Driven Development,简称 SDD )是一种面向复杂系统的 AI 开发模式,它以明确的功能规范(Specification)为核心,让 AI 在清晰的结构化文档指导下生成代码。

在引入 Spec 作为中间层之后,整个开发流程不再是"对话 → 代码",而是一个**分阶段、可验证、可回溯的工程链路。**Spec Cooding 整个流程一般可分为以下几点:

  • 需求描述

    用户需要先描述需求,包括做什么、为什么要做这个改动、做了哪些决策和权衡、以及明确哪些东西在范围之内。需求描述越清晰,AI 最终生成的效果就越符合预期。

  • AI 澄清需求

    在生成实现方案之前,AI 会通过几轮对话与用户确认需求细节,例如:

    • 功能范围
    • 技术选型
    • 数据结构
    • 系统边界

    这一阶段可以帮助用户进一步明确需求,避免模糊需求直接生成代码导致方向偏差。

  • 生成方案

    在需求确认后,AI 会生成完整的实现方案文档(Doc),文档通常包含:

    • 项目目标
    • 功能模块设计
    • 技术实现思路
    • 系统结构说明

    用户可以直接在生成的文档中修改或补充细节。

  • 拆分任务

    有了实现方案之后,Spec 会将复杂需求拆解为多个步骤,使开发过程更加清晰。

  • 分步执行任务

    执行任务时可分步骤推进。

  • 总结清单

    任务完成后生成最终的总结清单。

在上述的每个阶段开始之前,都支持用户确认和修改。通过 Spec Coding 能够很好的解决 Vibe Coding 在复杂项目中的缺陷:

  • 起点偏差

    写代码之前先规划、对齐功能,保证方向正确。

  • 上下文坍塌

    将目标、约束等信息写下来并保存,不强依赖上下文。

  • 过程失控

    将决策、核心逻辑以及中间产物保存下来,便于 AI 追溯,解决 AI 迷失方向的问题,

如何使用Spec Coding?

虽然 Spec Coding 还是一个相对新的范式,但目前已经可以通过多种渠道落地,整体可以分为两类:IDE开源工具

IDE内置

这一类工具已经把 Spec Coding 的流程做成了产品能力,用户可以直接使用,这类 IDE 有 comatetrae 等。以 comate 为例,用户进入 comate 后可直接切换为 Spec Mode 开启 Spec Coding。

开源工具

除了 IDE 之外社区也涌现出一批更加灵活的开源工具链。其中较有代表性的包括 spec-kit 与 OpenSpec。这类工具可以无缝集成到 Cursor、Claude Code 等 AI 编程工具中。

以 spec-kit 为例,spec-kit 是 GitHub 官方开源的规范驱动开发工具包,帮助开发者从需求到实现的全流程开发。

通过 specify init 命令初始化项目之后,就能在 AI 编程工具中通过命令行执行相应的功能,以 Cursor 为例:

这里包含了所有的命令,其中有四个核心开发阶段:

  • /speckit.specify

    将功能需求转化为清晰的规范文档

  • /speckit.plan

    制定功能的技术实现方案

  • /speckit.tasks

    将技术方案分解为可执行的任务清单

  • /speckit.implement

    按任务清单逐步实现功能代码

如何用好Spec Coding?

一份可用的 spec 至少包含四类信息:

  • 目标:要解决什么业务问题,成功标准是什么。
  • 边界:In/Out 范围,异常路径,依赖和前提条件。
  • 验收:可执行、可测量、可回归的验收条目。
  • 约束:性能、安全、审计、兼容、成本、时效

这四类信息并不是写作模板,它们对应软件工程产物。目标对应需求项,边界对应设计决策,验收对应测试计划,约束对应质量门禁。规格越完整,后续分歧越少,返工越可控。

实际案例

案例介绍

用户在与 Agent 进行对话的过程中,前端通常做了如下操作:

  • 携带query调用agent
  • 接受agent响应(使用sse通信)
  • 数据清理&聚合
  • 将一次对话(query&response)封装为问答对
  • UI组件渲染
  • ...

但是 Agent 的使用形态是多样的, 针对不同的用户场景会有对应的垂类 Agent,用于专门解决某一场景下问题,例如 deepResearch、deepSearch、dataAnalysisAgent 等,不同类型的 Agent 虽然在功能层、数据层、UI 层都会存在一定的差异,但是底层协议解析内容聚合的逻辑是一致的。因此从SDK设计角度讲,Agent使用应该与具体的使用形态解藕,核心SDK的功能应该纯粹且单一,即负责Agent的一次调用执行。

spec设计

jsx 复制代码
# 目标

## SDK定义

设计一个面向 AI Agent 的对话 SDK,用于统一处理 Agent 的调用执行与流式响应消费,向上提供稳定、可扩展的数据接口,支持多种对话及非对话交互形态。

SDK 的核心目标是:

- 屏蔽底层通信与协议细节(如 SSE / 多阶段输出)
- 提供统一的流式数据消费模型
- 支持不同 Agent 执行形态(单轮、多轮、工具调用等)
- 提供可扩展机制以适配不同业务需求

## SDK 能力

### 统一调用能力

- 支持一次 Agent 执行的完整生命周期管理
- 提供标准调用入口(Executor)

### 流式数据处理能力

- 支持流式返回(Streaming)
- 支持多阶段输出(思考 / 工具调用 / 结果)

### 结构化数据抽象

将原始流式数据抽象为统一结构

- Message(原始数据)
- Event(执行节点)
- Content(输出内容)
- Response(最终结果)

### 扩展能力

支持插件机制扩展

- 通信方式(xhr/fetch)
- Event 处理
- Content 数据聚合
- 数据视图

### 成功标准

- 接入方仅需关注"消费结果",无需处理协议细节
- SDK 可支持多种 Agent 形态(对话 / 工具 / workflow)
- 新增扩展能力无需修改核心 SDK
- 可在不同 JavaScript runtime 中一致运行

# 边界

## SDK职责

SDK 仅负责以下职责

### Agent 执行管理

- 发起请求
- 管理执行生命周期
- 接收流式数据

### 协议解析

将原始流式数据解析为结构化数据:Message → Event → Content

### 数据聚合

- 聚合分段消息为完整内容
- 处理多阶段输出
- 构建执行结果(Response)

### 插件调度

提供统一扩展机制

- Transport(通信)
- Event(事件处理)
- AggregateRule(聚合规则)
- View(数据视图)

## 非 SDK 职责

- 不维护 Conversation,不管理多轮上下文。
- 不提供 UI 组件,不参与视图渲染逻辑。
- 不定义业务场景,不绑定具体产品形态。
- 不存储执行结果,不管理历史记录。

## 异常路径

### 流式中断

- 返回已聚合数据
- 标记 Response 为 incomplete

### 未知数据类型

- 使用默认解析策略
- 保留原始数据

### 插件冲突

按优先级执行

- 精确匹配(id)
- 类型匹配(category)
- 默认处理

### 聚合异常

- 当前内容标记异常
- 不影响整体执行

## 实体设计
补充实体详细设计。

# 验收

列举需要验证的能力,并为其生成测试用例。

## 执行能力

验证如下能力:

- 返回 Response 对象
- 包含执行状态
- 包含结构化数据(Event / Content)

## 流式处理能力

输入:分段流式数据(chunk)

验证:

- 数据按顺序处理
- 内容逐步可消费
- 最终结果完整

## 插件扩展能力

### Event 插件

输入:注册自定义事件处理逻辑

验证:

- 新事件类型可被识别与处理
- 不影响已有逻辑

### AggregateRule 插件

输入:扩展新的内容聚合规则

验证:新类型内容可正确聚合

## 异常处理能力

输入:非法数据

验证:

- SDK 不崩溃
- 返回可用结果
- 状态可感知

# 约束

## 安全

- 不持久化用户输入与输出数据
- 不记录认证信息(token / header)

## 兼容

### 支持多 runtime
- Browser
- Node.js
- 其他 JS 环境

### 支持多通信方式
- fetch
- xhr
- 可扩展其他协议

## 时效
- 支持实时交互(流式输出)
- SDK 初始化与调用开销低
- 扩展能力可在短周期内实现(插件级扩展)

## 技术栈

- mobx

## 项目结构
//...

spec 文档不一定要一次性写的很完美,这也很难,可以先给 Agent 输入一个大致的设计方案,通过多轮对话逐步优化 spec 文档。

Spec模式下的功能迭代

在持续演进的系统中,功能迭代的问题主要来源于以下几个方面:

  • 设计文档逐渐失效

    初始阶段会先产出技术设计文档用于对齐,但后续变更直接作用于代码,文档不再同步更新。

  • 变更影响范围难以控制,强依赖个人经验

    在没有明确链路时,如何修改、影响哪些地方,很大程度依赖开发经验,结果是不同人实现方式不一致,系统行为不可预测。

Spec 模式通过引入一条以规格为中心的变更链路:

复制代码
Spec → Plan → Tasks → Test → Implementation

将"变更"从实现层前移到设计层,从而在工程上带来一系列稳定性与可控性提升。

功能迭代流程

当系统已具备部分能力并发生需求变更时,Spec 模式要求变更沿以下路径推进:

更新 Spec

在 Spec 层定义变更:

  • 明确规则变化(What changed)
  • 标注影响范围(Scope)
  • 更新验收条目(Acceptance)

更新 Plan

在 Plan 层约束实现路径:

  • 仅调整受影响模块
  • 明确不改动范围
  • 避免设计扩散

这一层的核心作用将变更限制在可控范围内,而不是在实现过程中逐步扩大。

更新 Tasks

在执行层拆解变更:

  • 删除失效任务
  • 新增任务
  • 建立任务与验收条目的映射

更新测试

补充新测试用例并修改已有测试用例。

实现代码

最后进入代码层:

  • 按 Tasks 实现
  • 通过 Test 验证

Spec 使用场景

下面列举了一些使用场景供参考。

场景 场景特征 为什么用sepc
新系统 从零开始搭建一个完整系统,需要定义业务规则、模块边界以及整体架构 在系统初期阶段,业务规则、模块划分和接口边界尚未稳定。通过 Spec 先定义目标、边界和验收标准,可以在编码前完成系统级对齐,避免实现过程中反复调整架构和规则
大规模重构 对现有系统进行大规模重构或技术栈迁移,涉及多个模块和复杂依赖关系 重构过程中需要同时处理旧逻辑、新结构和模块依赖关系。Spec 可以明确当前有效规则、目标结构以及迁移范围,并通过 Tasks 和验收条目拆解重构步骤,降低跨模块改动带来的风险
多人协作的项目 多名开发者并行开发,可能结合 AI 工具进行协作,开发节奏快且变更频繁 在多人协作场景中,不同开发者对业务规则和系统行为的理解容易产生偏差。Spec 作为单一事实来源(Single Source of Truth),统一定义系统行为,并通过验收条目确保实现与预期一致
高质量/高稳定性要求 核心业务模块(如交易、计费、权限等),对正确性和稳定性要求高 核心模块需要严格定义行为边界和异常路径。Spec 中的验收条目可以转化为测试用例,确保每个规则都有明确验证,从而避免因局部修改导致系统行为偏差
长期迭代维护的项目 需要长期持续迭代的系统,存在历史逻辑沉淀和多轮需求变更 随着迭代进行,业务规则容易分散在代码中,导致系统行为难以理解。通过持续更新 Spec,可以将规则集中表达,并在每次变更时同步更新,从而降低后续维护成本

总结

Spec Coding 并非要取代我们已经习惯的 Vibe Coding,它更像是在我们的 AI 工具箱里增加了一项是用于解决复杂项目开的大工具。

在面对简单的 bug 修复、功能的微调、快速验证想法或者搭原型的场景时,Vibe Coding 依然是最高效的。在面对简单功能开发、部分代码重构的场景时,Plan 模式是最合适的。但当我们需要构建一个长期维护的复杂项目、大规模的重构时,Spec Coding 这种"先想清楚再动手"的模式,能有效的确保产出质量。

相关推荐
如意猴2 小时前
【前端】002--怎样制作一个简历界面?
开发语言·前端·javascript
冰西瓜6002 小时前
深度学习的数学原理(二十六)—— 多头注意力
人工智能·深度学习
子兮、2 小时前
DotCloudLib点云后处理算法库首次开源!
人工智能·算法库
NickJiangDev2 小时前
Elpis Schema 动态组件与表单:配置驱动的完整 CRUD 闭环
前端
AI应用实战 | RE2 小时前
014、索引高级实战:当单一向量库不够用的时候
数据库·人工智能·langchain
Fzuim2 小时前
大模型Agent工程化:从“模型至上”到“Harness为王”——2026年趋势研究报告
人工智能·agent·skill·harness
kerli2 小时前
Compose 组件:Box 核心参数及其 Bias 算法
android·前端
luckyCover2 小时前
TypeScript学习系列(二):高级类型篇
前端·typescript