当AI开始给代码打标签,我差点吐了

事情是这样的。

有个开发者(也就是这篇文章的作者)用AI写代码,写着写着,他发现AI开始在他的代码里自动添加一些奇怪的标签。

// AUTH-1
// AUTH-2
// AUTH-3

每个需求都被编了号,遍布整个代码库。

AI配图

作者的第一反应是:恶心。

这不就是把代码和spec强耦合吗?改一个spec就要重构整个代码库?疯了吧?

但他转念一想——

等等。

这些标签好像有点用。

它能帮我在一堆PR里快速导航,能告诉我某个需求在哪里被实现、被测试,甚至能追踪验收覆盖率。

"Acceptance Criteria IDs"。

他给这些标签起了个名字:ACIDs


写代码太爽了,但爽完之后呢?

先说清楚一件事。

现在用AI写代码,真的很快。

Claude写完写GPT,GPT写完写Cursor,一个功能十分钟上线。爽不爽?爽。

但问题来了——

代码写完了,然后呢?

你怎么知道这个功能覆盖了所有边界情况?怎么知道AI没有偷偷摸摸加了什么奇怪的东西?你敢直接上线吗?

"当代码生成得比你读得还快,瓶颈就转移到了QA和验证环节。"

这是作者提出的「Testmaxxing」概念。

投资自动化测试的ROI会变得极高。但光有测试还不够——测试只能告诉你「代码有没有bug」,不能告诉你「代码做的是不是对的事」。

对的事是什么?

是spec。


所以他做了一个工具,叫Acai.sh

作者的解药是:一个开源工具包。

核心就三样东西:

  1. feature.yaml —— 一种YAML格式的spec模板,每个需求都有唯一稳定的ID
  2. CLI工具 —— 帮你把spec和代码关联起来,推送到dashboard
  3. Dashboard —— 在这里你可以按需求(而非文件)来review代码

工作流很简单:

Step 1用feature.yaml写spec,别写markdown,就写结构化的YAML

Step 2让AI写代码,但让AI在代码里标注ACID标签

Step 3在dashboard里按需求review,而不是按文件review

Step 4改spec→AI自动改代码→重新review

作者说,这套东西应该能让你少花点时间在prompt和re-prompt上,多花点时间在想清楚到底要什么上。

AI配图


等等,这不就是Cucumber换了个皮?

评论区有人直接开炮:

"所以这不就是行为驱动开发(BDD)吗?换了个YAML格式让LLM好读一点?"

这个问题问得好。

作者没否认。他甚至在文章里列了一堆竞品:SpecKit、OpenSpec、Kiro、Traycer.ai……

他的原话是:

"我写完才发现有这些工具。我有严重的NIH(Not Invented Here)综合症。"

但他强调了一点:Acai.sh关注的是「验收覆盖率」和「规格对齐」,而不是单纯的spec生成或版本管理。

换句话说,别人的工具可能帮你写spec、版本控制spec、或者用spec去驱动AI干活。

Acai.sh的核心是:让你能追踪「这个需求到底在代码里哪里实现了、测试了、通过了」。


一个让人后背发凉的思想实验

AI配图

文章最精彩的部分,是最后那个思想实验。

想象一下:整个应用在你手指碰到键盘的瞬间就生成了。同一个prompt永远产生同样的输出,不花一分钱,几毫秒搞定。

这时候如果输出有问题,你会手动改代码吗?

不会。你只会扩展prompt。

所以如果软件是免费的、无限的、即时的,你唯一在意的标准就是「验收标准」。也就是spec。

作者的核心观点来了:

"spec必须存在于某个地方,即使你不写下来。spec是你想要软件成为的样子。它往往只存在于你脑子里或对话中。你和你的团队、你的业务,永远会在乎spec说什么。所以你最好现在就把spec写下来。"

说白了——

AI负责生成代码,但人类负责定义「什么是对的代码」。

而「什么是对的」需要一个明确的、可追踪的、可验证的载体。

这就是feature.yaml存在的意义。


一些大实话

作者自己列了「为什么你可能不喜欢acai.sh」:

  • 如果你的产品不重要或者很简单,别折腾,直接prompt就行
  • acai.sh很「固执」——它要求你一个功能一个spec,不许偷懒
  • ACIDs依赖稳定的编号,改spec的时候要小心对齐
  • 它不鼓励你把「设计方案」「UI优化」写进spec,spec只管行为和约束

最后一条我特别喜欢:

"先把功能按spec跑通,再做表面的美颜💅。"


所以,Specsmaxxing是解药吗?

评论区还有一条我觉得很精准的吐槽:

"我们得像萨满一样做各种工作来对抗LLM的随机性,同时打心底知道它还是能用最有创意的方式把代码搞砸。"

累不累?累。

但作者的态度是:承认累,然后找到一种结构化的方式管理这种累。

他把自己的方法叫「Specsmaxxing」——规格最大化。

不是代码最大化,不是测试最大化,而是规格最大化

在AI时代,规格说明变成了最硬核的资产。

因为代码会贬值——AI明天就能写出更好的代码。

但规格不会。

规格是你对产品「到底想干嘛」的答案。


最后的最后

作者在评论区留了句话:

"如果你不喜欢这个方案,赶紧来喷我。早喷早超生。"

我觉得这种态度挺酷的。

他没说自己是救世主,也没说这套东西能解决所有问题。

他只是说:"我在AI精神病的状态下找到了一个有用的姿势,分享出来,大家看看有没有用。"

有用就试试,没用就骂两句。

软件工程嘛,本来就是在不断试错中前进的。


【锐评】:当所有人都在教AI写代码时,有人选择教人类写spec。这篇博客最动人的不是工具本身,而是那份"我知道这很烦,但有些事情必须有人认真去做"的倔强。

参考链接:
https://acai.sh/blog/specsmaxxing