SDD AI-Native(Spec-Driven Development,规约驱动开发,AI 原生研发范式)

  • 传统开发:代码是唯一可信源,文档后置、容易过时
  • AI-Native SDD:规约(spec,一般放在仓库里 spec.md)才是唯一可信源,代码只是规约的产物;人和 AI 共同遵守这份规约契约
  • 规约不只是给人看的文档,是AI 可执行、可校验的结构化意图描述:业务目标、边界约束、验收标准、异常场景、架构规则

标准 4 步工作流

  1. Specify 定义规约:业务 + 架构一起输出结构化 spec,明确功能、非功能、边界 case、安全约束
  2. Plan 拆解方案:AI 基于 spec 拆解技术方案、任务清单
  3. Implement 执行实现:AI Agent 生成代码、接口、注释
  4. Validate 规约校验:从 spec 自动生成测试,验证实现是否匹配规约;不满足则自动修复,直到通过

和传统 / 普通 AI 编码的区别

表格

模式 起点 可信源 风险
传统开发 需求文档 代码 文档容易和代码脱节
Vibe Coding(Copilot 随手写) 零散 prompt AI 输出代码 需求漂移、隐性缺陷、不可复现
AI-Native SDD spec 规约 spec 规约 AI 输出被规约约束,可重复验证

配套工具生态

  • GitHub Spec Kit:微软开源 SDD 工具包
  • AWS Kiro:AWS 的 spec-first AI IDE
  • Cursor / Claude Code:可配置为 SDD 工作流,强制先读 spec 再编码

关键概念

  • Executable Spec(可执行规约):描述系统行为而非实现细节,能自动生成校验逻辑
  • Harness(校验底座):给 AI Agent 的约束环境,包含规则、检查项、权限边界,保证 AI 不能脱离规约乱实现
  • AI-Native Engineer :角色转变,人不再主要写代码,而是设计规约、设计 Agent 运行环境、做质量治理ai-native-...

一句话总结

AI-Native SDD:先定契约,再让 AI 干活;规约为王,代码只是副产品,把大模型的随机性约束在明确的工程契约内,提升团队级 AI 编码稳定性。

SDD AI-Native spec.md 模板(可直接丢给Cursor / Claude Code / GitHub Spec Kit)

原则:描述WHAT,不写HOW;写清楚验收标准、边界、约束,不预设具体实现。 所有【】里的内容是占位,替换后删除【】

复制代码
# Spec: 【模块/功能名称】
Version: 0.1
Status: Draft | Review | Approved
Author: 【姓名/团队】
Last Update: 【日期】
AI Harness Rules: 【强制给AI的全局约束】

## 1. 目标 (Goal)
一句话说明这个模块要解决什么业务问题,不写技术细节。
> 示例:提供用户订单查询接口,支持按用户ID分页查询已完成订单,用于前端订单列表展示。

## 2. 业务上下文 (Context)
- 所属系统:【系统名】
- 调用方:【前端/其他微服务】
- 依赖外部服务:【依赖服务名,无则填无】
- 业务边界:本模块**不负责**【哪些事情不属于它】

## 3. 功能需求 (Functional Requirements)
每条需求编号,**必须可验证**,避免模糊描述。
- FR-001:【功能描述】
  - Acceptance Criteria(验收标准):
    - ✅ 正常场景:【输入 -> 预期输出】
    - ✅ 边界场景:【边界输入 -> 预期输出】
- FR-002:【功能描述】
  - Acceptance Criteria:
    - ✅ ...

## 4. 非功能需求 (Non-Functional Requirements)
- NFR-001 性能:【如:单接口P95 < 200ms;支持QPS 500】
- NFR-002 可用性:【如:99.9%可用;降级策略:xxx】
- NFR-003 安全:【权限、脱敏、防注入、输入校验规则】
- NFR-004 兼容性:【数据库版本、运行环境、API版本】

## 5. 数据模型 & 契约 (Data Contract)
只定义结构、字段含义、约束,不写数据库建表SQL(可选,简单场景可附)。
### 入参
```json
{
  "userId": "string,必填,用户唯一标识",
  "pageNum": "int,可选,默认1,>=1",
  "pageSize": "int,可选,默认10,最大50"
}

返回结构体

复制代码
{
  "code": "int",
  "msg": "string",
  "data": {
    "total": "long",
    "records": []
  }
}

6. 错误码 & 异常行为

列出所有预期异常,定义返回结果。

  • ERR-10001:用户不存在 → code=10001, msg="用户不存在"
  • ERR-10002:pageSize超过上限 → code=10002, msg="分页大小不能超过50"

7. 业务规则 & 约束 (Business Rules)

业务硬规则,AI实现时不能突破。

  • BR-001:只能查询当前登录用户自己的订单,禁止越权查看他人订单
  • BR-002:已删除订单不返回

8. 排除项 (Out of Scope)

非常重要,明确禁止AI额外实现的功能,防止scope creep

  • ❌ 不实现订单新增/修改/删除
  • ❌ 不做复杂报表统计
  • ❌ 不实现消息推送

9. 测试规约 (Test Spec)

AI需要自动生成单元/集成测试,覆盖下面case:

  1. 正向正常查询
  2. 入参非法校验(pageSize=0、负数)
  3. 用户不存在
  4. 分页到最后一页(空结果)

10. AI实现约束 (Harness for Agent)

这一段直接约束AI编码行为,SDD核心

  • 架构约束:必须遵循【项目架构规范,如DDD分层、Controller/Service/Repository】
  • 编码规范:【项目编码规范,如不允许直接SQL拼接,统一使用参数化查询】
  • 禁止行为:
    • 禁止新增spec未定义的接口、字段
    • 禁止修改外部依赖模型
    • 禁止硬编码业务魔法数字,统一常量
  • 输出产物要求:
    • 源代码

    • 单元测试

    • 接口注释(openapi/swagger注解)

      使用小贴士

      1. 写spec时不要写代码,只写契约;写完再交给AI实现
      2. 评审spec,而不是评审AI生成的代码;spec通过才允许进入实现阶段
      3. 修改需求必须先改spec,再重新触发AI实现;不允许直接改代码绕开规约
      4. 简单小功能可以精简,复杂模块可以拆分多个spec

      要不要我再给一个已经填好内容的完整样例spec.md(订单查询例子),方便你直接参考怎么写?

相关推荐
Gu0Qiang1 小时前
从 0 到 1 打造 AI 提示流编排器:别把大模型当机械拼图!Case #7 字段冻结陷阱与代码回滚复盘(开源系列 15)
人工智能·github
用户547455508121 小时前
用开源的Toonflow和MiniMax H3一步步复刻万妖
人工智能
RobinDevNotes1 小时前
JAX 分布式训练,和 PyTorch 有什么不一样
人工智能·深度学习·ajax
奕鼎竜瑆1 小时前
[新手小白也能学会] 01-PyTorch框架使用(上)
人工智能·pytorch·python
用户837133200761 小时前
接口返回文章 ID 后,怎样确认发布真的完成了?
人工智能
Daorigin_com1 小时前
道本科技携手DeepSeek:以AI重塑合同全生命周期管理
前端·人工智能·科技·网络安全·数据挖掘·前端框架·传媒
guslegend1 小时前
AutoDebug Agent:用真实反馈做出会修缺陷的 Agent
人工智能
老马识码1 小时前
记忆系统(Memory):从对话历史到记忆资产
人工智能
GEO实战经验分享1 小时前
王涛认为被AI引用不等于被吸收:GEO跨平台度量框架解读
人工智能·chatgpt