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

用AI写代码,最怕什么?它自作主张。

你让它加个登录,它给你整出OAuth、短信验证、人脸识别。你让它修个bug,它把整个模块重写了。更气人的是,改完之后你都不知道它动了哪里,Code Review无从下手。

这就是"vibe coding"的真实写照------你给AI一句话,它给你一堆代码,好坏全凭运气。

OpenSpec解决的就是这个问题:先定规矩,再干活。

原理

OpenSpec的思路很简单:不让AI直接写代码,而是先让它写规范。

规范长这样:

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

规范写清楚,你确认了,AI再动手。它敢乱加功能?规范里没有,它就不该写。

核心文件就两个:

  • specs/ ------ 当前系统的规范(只读,不准改)
  • changes/ ------ 要改什么(写在这里,等你审批)

这就好比Git的main分支和feature分支------规范是稳定版,变更是提案。

流程

1. 写提案

你告诉AI:"给用户列表加按角色筛选" AI不写代码,先建文件:

bash 复制代码
changes/add-role-filter/
├── proposal.md   # 为什么要加、加在哪
├── tasks.md      # 要干哪几件事
└── specs/user-list/spec.md  # 具体怎么筛

2. 你审批

打开proposal.md看一眼。太复杂?删掉多余功能。太简单?补充细节。 确认无误后,告诉AI:"可以干了"。

3. AI执行

AI严格按照tasks.md逐条实现。不会多写一行多余代码。 你可以随时看进度------做了几条,还剩几条。

4. 归档

代码合入后,执行归档。changes/里的内容合并到specs/,成为新规范。 下次改代码,AI就知道现状是什么,不会再重复造轮子。

实战

场景:给后台管理系统加"导出报表"功能。

传统做法: 开发者:帮我写个导出按钮 AI:生成200行代码,包含Excel、CSV、PDF三种格式,还自带邮件发送 开发者:我只想要Excel啊... AI:好的,重新生成...

OpenSpec做法

第一步,写提案:

markdown 复制代码
# 导出功能规范
- 格式:仅Excel (.xlsx)
- 触发:点击"导出"按钮
- 数据:当前筛选后的列表数据
- 并发:限制同时1个导出任务

第二步,审批通过。

第三步,AI按tasks.md逐条实现:

  • 添加导出按钮
  • 实现Excel生成
  • 对接当前筛选器
  • 加并发锁

第四步,归档。下次再加CSV导出,你知道要从specs/里改,而不是在代码里瞎塞。

收益

可追溯:每个功能都有对应的规范文件。谁写的?什么时候?为什么?全在Git历史里。

可审查:Code Review不再是看几百行diff,而是看规范变化。规范对了,代码大概率对。

可复用 :新AI加入项目,读一遍specs/目录,秒懂系统全貌。不用重新"聊天灌上下文"。

限制

  • 探索性原型:你不知道要做什么,规范没法写
  • 一次性脚本:写完就扔,不值得建规范
  • 纯算法优化:规范描述"怎么更快"很难,不如直接看代码

对于正式项目、多人协作、长期维护------OpenSpec是目前AI编程最靠谱的工程化方案。

结论

一句话总结:OpenSpec让AI从"自由发挥"变成"照章办事"

你不需要管AI怎么写代码,但你必须管AI写什么功能。规范就是那个"管"的工具。

试试这个命令(如果你的AI支持OpenSpec):

bash 复制代码
/openspec:proposal 我要加一个功能:...

剩下的,交给流程。

相关推荐
DyLatte2 小时前
我做了个AI项目后才发现:会做事的人,正在输给会讲故事的人
前端·后端·程序员
deviant-ART2 小时前
java stream 的 findFirst 和 findAny 踩坑点
java·开发语言·后端
神奇小汤圆3 小时前
MySQL / MariaDB 主从复制架构实战指南
后端
用户6757049885023 小时前
【AI开发实战】从想法到上线,我用AI全栈开发了一款记账微信小程序
后端·aigc·ai编程
Moment3 小时前
作为前端,如果使用 Langgraph 实现第一个 Agent
前端·javascript·后端
神奇小汤圆3 小时前
高并发接口总被打崩?我用 ArrayBlockingQueue + 底层源码深度剖析搞定流控
后端
木易 士心3 小时前
MyBatis Plus 核心功能与用法
java·后端·mybatis
Victor3563 小时前
MongoDB(93)如何使用变更流跟踪数据变化?
后端
用户6757049885023 小时前
全网都在推 Claude Code,但只有这篇文章教你如何“真正”能用
后端·aigc·claude