OpenSpec实战:AI编程告别“瞎写”

OpenSpec 实战指南:让 AI 编程告别随意发挥

用人工智能编写代码时最大的顾虑是什么?它可能会做出超出预期的行为。用户要求添加登录功能,结果却得到了OAuth、短信验证和人脸识别的实现;请求修复一个bug,AI直接重写了整个模块并留下一堆难以理解的修改记录。

这就是所谓的“vibe coding”——你给 AI 一句话,它就给你一大段代码,并且好坏全凭运气。OpenSpec 的核心理念正是解决这个痛点:先定规矩再干活。

原理

OpenSpec 的主要思路是不让 AI 直接编写代码,而是让它首先制定规范。

一个规范文件的示例如下:

# 需求:用户筛选
- 支持按角色筛选(管理员/普通用户)
- 支持按团队筛选(技术/产品/运营)
- 筛选后URL参数同步

在这个框架内,AI 的任务是根据规范进行工作。如果规范中没有提到的功能或特性,AI 就不会编写相关代码。

OpenSpec 包含两个核心文件夹:

  • specs/ —— 定义整个系统的规范(只读)
  • changes/ —— 存放待审批的变更提案

这类似于 Git 中的 main 分支和 feature 分支——稳定的规范就像主干,变化的提案就像是新分支。

流程详解

步骤一:编写提案

用户要求添加功能时,如“给用户列表增加按角色筛选”,AI 不会直接生成代码,而是先创建一个提案文件夹:

changes/add-role-filter/
├── proposal.md   # 说明为什么要实施该变更、具体位置等信息
├── tasks.md      # 具体需要执行的任务描述 
└── specs/user-list/spec.md  # 规范详情  

步骤二:审批提案

用户审核 proposal.md 文件,确认内容后告知 AI 可以开始工作。

步骤三:AI 实现变更

接下来,AI 根据任务列表逐条执行,不会编写超出规范的代码。你可以随时查看进度和细节。

└── tasks.md      # 包括添加导出按钮、实现Excel生成等功能步骤  

步骤四:归档变更

完成所有变更后,将更改文件合并到 specs/ 目录中,形成新的规范。下次再进行类似的修改时,AI 就会知道现在的系统状态。

实战案例

假设需要为一个后台管理系统添加“导出报表”功能。

传统方式: 开发者请求:“增加导出按钮”,但 AI 提供了一个包含 Excel、CSV 和 PDF 的完整实现,甚至还有邮件发送选项。开发人员表示只想要 Excel 导出,于是 AI 又重新生成代码。

使用 OpenSpec 方式:

  1. 编写提案文件
    
    # 导出功能规范
  • 格式:仅 Excel (.xlsx)
  • 触发方式:点击“导出”按钮
  • 数据来源:当前筛选后的列表数据
  • 并发限制:同时允许一个导出任务
  1. 审批提案

  2. AI 执行变更

    • 添加导出按钮
    • 实现 Excel 生成功能
    • 对接现有筛选器逻辑
    • 加入并发锁机制
  3. 归档变更

收益

可追溯性:

每个功能都有对应的规范文件,便于追踪开发历史和原因。

可审核性:

代码审查不再需要查看大量 diff 而是直接检查规范的变化是否合理。

可复用性:

新加入的 AI 只需阅读 specs/ 文件夹即可快速掌握项目概况而无需额外沟通背景信息。

限制

OpenSpec 不适合用于探索性原型、一次性脚本及纯算法优化场景,这些情况下编写全面规范是不现实的。对于正式项目的多人协作和长期维护而言,它是目前最有效的 AI 编程工程化方案之一。

总结

通过 OpenSpec 方案,可以确保 AI 严格按照既定规则执行编程任务而不是自由发挥。虽然你无法控制 AI 如何实现代码细节,但可以通过规范文件来限定其功能范围。

尝试使用以下命令(如果您的 AI 支持此功能):

/openspec:proposal 我要加一个功能:...

这样做的好处在于让整个开发流程更加规范化和可追溯。


> 🔗 相关阅读企业级智能体