ARTICLE · 1067572
AI写代码总跑偏?用OpenSpec把需求写成一张验收单

QUICK READ · 几秒钟速读版
“加个收藏按钮”还不够,存在哪里、哪些不做、怎样算完成,都要写明。
OpenSpec把改动整理成可回看的需求和任务,写代码前先核对。
文中有一张可复制的需求验收单;不装工具,也能先拿它对齐需求。

阅读预计耗时 约 4 分钟
完整正文版
一个按钮,怎么就做成了一套系统
给文章列表加个收藏按钮,看着只是一句话。
可“收藏”可能指存在本机,也可能指登录后跨设备同步。你只想留住几篇文章,AI却可能顺手补上账号、数据库和收藏夹。页面更完整了,离你要的东西也更远了。
先把那句话写成一张能验收的需求单,往往比继续补一句“请严格按要求”更有用。
OpenSpec把口头要求留成文件
OpenSpec是采用MIT许可证的开源项目,给AI编程助手增加一层需求说明,让人与AI在动手前核对要做什么。[1][3]
官方工作流会把一次改动组织到独立目录:proposal.md说明为什么改、改哪些;specs/写需求和具体场景;design.md记录技术方案;tasks.md列实施任务。[6]
你不用背这些文件名。只要能在开工前回答三件事:我要什么?这次不做什么?看到什么结果才算完成?
这样,下一轮修改不必只靠翻聊天记录找那句“我说过”。需求变了,也有地方一起更新。

OpenSpec把需求、边界和验收留在同一次改动中
收藏这张单,也把“收藏”说清楚
下面用个人文章列表举例。这是供复制修改的示例需求单,不是已经上线的项目案例。
需求验收单:文章收藏按钮
目标与前提
现有网页已有文章列表,每篇文章有稳定、唯一的ID。我要在当前浏览器收藏文章,刷新或重新打开网页后仍能看到收藏状态。若现有代码不满足前提,先列出问题,别自行补一套系统。
这次要做
每篇文章有“收藏/已收藏”按钮,点击可收藏,也可取消。
只将收藏的文章ID保存在当前浏览器本地;写入成功后才更新按钮状态。
保存失败时提示“保存失败,请重试”,不把失败显示成成功。初次读取失败则提示异常,不能当作没有收藏。
这次不做
不加登录、不做云同步、不建收藏夹、不增加收藏数量统计,也不改现有列表排序和文章跳转。
照着验收
无收藏记录时,收藏文章A:A显示“已收藏”,B保持“收藏”。
在同一浏览器、同一站点刷新并关闭重开:A仍是“已收藏”。
取消A再刷新:A回到“收藏”。
用键盘Tab找到按钮,按Enter:能切换收藏状态,焦点清楚可见。
换一个没有相关数据的浏览器打开:不会带入原浏览器的收藏。
模拟本地存储读写失败:读失败有提示;写失败保留操作前状态,恢复后能重试。
收藏前后,文章跳转和列表排序不变;代码改动不包含新增账号或云端接口。
交付要求
先复述需求、列出疑问,等确认后再写代码。完成后按上面每一项给出验证方法和实际结果;没测的写“未验证”,不要替我打勾。
这张单刻意没写“体验丝滑、功能完善”。它写的是你能看见、能操作、能判定对错的结果。

收藏按钮从正常使用到失败处理的验收路线
把这张单交给OpenSpec
已经按官方指引安装并在项目中初始化的读者,可以在AI编程助手的对话框输入/opsx:propose add-article-favorite,再提供上面的需求单,让它起草方案。[5][6]
这里用的是官方通用命令写法。/opsx:...写在AI对话里,不是终端里;不同助手的具体拼法可能不同,以初始化提示和官方命令说明为准。[5]
方案出来后,重点读“本地保存”“不做云同步”“失败怎么处理”是否还在。如果任务里多了账号表,先改方案,别等代码写完再删。
确认后,再用对应的apply命令进入实现。[5]验收时让AI逐项说明证据,自己至少点一遍收藏、刷新和取消。存储失败需要可重复的模拟或测试,正常点击没报错不算测过。
哪些时候值得加这一步
我的判断是:准备反复修改的小工具,尤其适合把要求留成文件;一次性的几个字改动,直接写清要求即可,未必要引入整套流程。
OpenSpec不会替你决定需求是否合理,也不保证代码没有问题。文档能通过格式检查,不等于功能验收通过;本地收藏也不等于备份,清除浏览器站点数据可能丢失记录。
下一次让AI加功能时,可以先复制这张单,只改目标、边界和验收场景。最值得保留的是最后一句:没测的,写“未验证”。
你遇到过哪种跑偏:擅自加功能,还是明明做出来了却不好验收?
来源核验:2026年9月17日。本文依据官方文档拆解,未做OpenSpec安装和运行验证;示例中的收藏行为是需求约定,不是工具自带功能。阅读时间按正文估算,来源区不计入。
GitHub完整地址:https://github.com/Fission-AI/OpenSpec
AI趋势老王 · AI观察与实践