你有没有遇到过这种情况:兴致勃勃地打开Cursor或Claude Code,详细描述了一通需求,结果AI生成的代码完全不是你想要的样子?
我上个月就踩过这个坑。本来让AI帮我加一个用户搜索功能,结果它自作主张加了个实时通知,还把原有的分页逻辑改崩了。我花了比自己手写还多的时间去修复。
问题不在于AI不够聪明,而是我们和它之间缺少一种高效的沟通方式。
就像早期的软件开发,大家都是想到哪写到哪,后来才慢慢发展出需求文档、API规范、测试用例这些"共同语言"。现在AI编码助手火了,但我们和AI之间的"需求传递"反而倒退回了口头描述——你说你的,它理解它的,误差全靠运气。
OpenSpec就是想解决这个问题的一个工具。它的核心思路特别朴素:在写代码之前,先把规范写清楚。
这个想法听起来一点都不酷,甚至有点老派。但这个工具的聪明之处在于,它并不是让你去写那种动辄几十页的产品需求文档,而是用一种机器也能读懂的轻量级格式,把你的需求、场景、验收标准都结构化地记录下来。
打个比方,传统方式就像是你站在程序员旁边口述需求:"帮我做个登录功能啊,要能记住用户,最好安全一点。"无论是真人程序员还是AI,听完就只能猜你的"安全一点"到底是什么意思。
用了OpenSpec之后,你会先写一个规范文件,里面清清楚楚地写:
当用户提交正确的用户名和密码后,系统必须返回一个JWT token。
如果密码错误,系统不能透露"用户名存在但密码错误"这样的信息。
登录成功后,用户会话应该保持7天。
看到区别了吗?SHALL、MUST、SHOULD这些关键词不是装饰,而是在告诉AI(和未来维护代码的人):哪些是不可商量的硬约束,哪些是可以权衡的软约束。
我特别喜欢的一点是,OpenSpec并不是让你绑定某一个AI工具。它的规范文件是工具无关的——你今天用Cursor,明天换Claude Code,后天试试新出的Windsurf,只要你的规范文件在,所有AI助手都能准确理解你的意图。
这在团队开发中价值巨大。以前,团队里每个人用不同的AI编码工具,提示词写法各不相同,生成的代码风格和质量也天差地别。现在大家共享同一套OpenSpec规范,就像共享同一份API文档一样自然。
说到这里,你可能会觉得:这不就是写需求文档吗?有什么特别的?
确实,本质上就是写需求文档。但OpenSpec做了几件聪明的事:
第一,它把规范文件纳入了版本控制。 你的需求变更和业务逻辑演进,全都可以像代码一样被追踪、review、回滚。这对需要合规审计的企业项目特别有用。
第二,它用"差异(Delta)"的方式来管理变更。 你要改一个已有功能,不需要重写整个规范,只需要写清楚"增加了什么"、"改了什么"、"删了什么"。AI会自动把这些差异合并回主规范。
第三,它的工作流很贴合实际开发习惯。 起草提案 → 审查对齐 → 实施任务 → 归档更新。这四步听起来有点繁琐,但你仔细想想,我们以前为了写清楚需求,开多少会、写多少文档、返工多少次?OpenSpec不过是把这些原本散落在邮件、微信群、口头交流里的信息,都结构化地沉淀下来了而已。
从更大的视角来看,OpenSpec其实是在探索一种AI原生时代的软件工程方法论。就像当年的敏捷开发、测试驱动开发一样,它不一定是最完美的方案,但它提出了一个好问题:当AI成为开发流程的一部分,我们的工程实践该怎么进化?
如果你是个习惯用AI辅助编码的开发者,或者你所在的团队正在为"AI生成的代码质量不稳定"而头疼,不妨试试OpenSpec。它的上手成本很低——只要你的Node.js版本够新,一条npm install -g @fission-ai/openspec@latest就能装好,然后进项目目录跑一个openspec init就初始化完成了。
最打动我的一点是:OpenSpec把"需求"这件事,从一种模糊的艺术,变成了一种可版本控制、可review、可复用的工程实践。在AI能力越来越强、但"理解人类意图"依然是短板的今天,这种思路或许会比我们想象的更有价值。
毕竟,让AI写代码容易,让AI写对代码,才是真正的问题。
夜雨聆风