AI 能写代码了,为什么我反而开始要求它先写文档?

作者:Avan菜菜日期:2026/6/19

最近在尝试用 AI 参与项目开发。

刚开始我的方式很简单:

1提需求
2
3 AI 直接实现
4
5不断返工
6
7继续补需求
8

结果非常熟悉:

  • 功能能跑
  • 代码越来越多
  • 需求越来越乱
  • AI 上下文越来越长
  • 后面谁都不敢接手

尤其是涉及:

  • 前后端联动
  • 权限体系
  • 数据结构变更
  • API 契约
  • 多阶段迭代

时,问题会迅速放大。

后来我接触到了 GitHub 开源的 Spec Kit。

它让我第一次把 AI 开发从:

1直接写代码
2

变成:

1先规格
2
3再设计
4
5再拆任务
6
7最后实现
8

整个过程开始变得可控。


Spec Kit 到底是什么?

如果用一句话概括:

Spec Kit = 把一次开发过程工程化。

它不会让 AI 直接开始改代码。

而是要求先产出一套完整工程文档。

例如:

1constitution
2spec
3plan
4tasks
5checklists
6contracts
7research
8

最终形成类似结构:

1specs/
2 ├── spec.md
3 ├── plan.md
4 ├── tasks.md
5 ├── research.md
6 ├── data-model.md
7 ├── quickstart.md
8 ├── contracts/
9 └── checklists/
10

看起来像是多写了一堆 Markdown。

但实际作用是:

把需求从聊天记录里解放出来。

让需求、设计、任务、实现都能够被追踪、被审查、被交接。


为什么 AI 项目越来越需要 Spec?

以前开发靠的是:

1需求文档
2
3开发
4
5测试
6

现在很多团队变成:

1需求
2
3AI
4
5代码
6

中间设计环节直接没了。

于是会出现几个经典问题。


问题 1:需求隐藏在聊天记录里

AI 写了很多代码。

一个月后再看:

1为什么这样设计?
2

没人知道。

因为答案在某次聊天记录里。


问题 2:实现范围不断膨胀

最开始:

1做一个文章管理
2

后来:

1加权限
2加审核
3加草稿
4加发布
5加版本
6

最后:

1已经完全不是最初那个需求
2

但没人知道边界在哪里。


问题 3:Agent 交接困难

A Agent 做了一半。

换 B Agent。

B Agent:

1重新理解项目
2重新分析代码
3重新推导需求
4

大量时间浪费在上下文恢复。


Spec Kit 最有价值的其实不是 Spec

很多人第一次接触会觉得:

1不就是生成几个 md 文件吗?
2

实际上真正有价值的是:

Clarify

也就是需求澄清。

这是我实践下来收益最大的环节。

例如:

1删除是软删除还是硬删除?
2

看起来简单。

但会影响:

  • 数据库设计
  • API 设计
  • 权限体系
  • 审计记录
  • 自动化测试

又比如:

1上线策略是什么?
2

是:

1全部完成后开放
2

还是:

1灰度发布
2

会直接影响:

  • 发布方案
  • 数据迁移方案
  • 风险控制方案

这些问题如果在代码完成后才发现。

返工成本非常高。


我目前的使用流程

经过几轮实践后。

我基本固定成下面这套流程:

1Constitution
2
3Specify
4
5Clarify
6
7Checklist
8
9Plan
10
11Tasks
12
13Analyze
14
15Implement
16

对应就是:

1项目原则
2
3需求规格
4
5需求澄清
6
7质量检查
8
9技术设计
10
11任务拆解
12
13一致性分析
14
15代码实现
16

整个过程更像:

1产品经理
2
3架构师
4
5Tech Lead
6
7开发
8

而不是:

1需求
2
3AI
4
5代码
6

一套我实际在用的工作流

对于正式功能开发。

我基本都会按照下面的顺序推进:

11. Constitution
2建立项目级原则
3
42. Specify
5生成功能规格
6
73. Clarify
8澄清需求边界
9
104. Checklist
11检查需求质量
12
135. Plan
14生成技术方案
15
166. Tasks
17拆分可执行任务
18
197. Analyze
20检查文档一致性
21
228. Implement
23按任务实现代码
24

如果是实验性功能。

我会简化成:

1Specify
2
3Plan
4
5Tasks
6
7Implement
8

如果涉及:

  • 数据库
  • 权限
  • API
  • 发布策略

那么 Clarify、Checklist、Analyze 基本不会跳过。


如果你想体验 Spec Kit

实际上上手成本并不高。

首先安装 uv:

1brew install uv
2

然后安装 Spec Kit:

1uv tool install specify-cli \
2  --from git+https://github.com/github/spec-kit.git
3

安装完成后验证:

1specify version
2

进入项目目录:

1cd your-project
2

初始化当前项目:

1specify init --here \
2  --integration codex \
3  --integration-options="--skills"
4

或者:

1uvx --from git+https://github.com/github/spec-kit.git \
2  specify init .
3

初始化完成后。

项目里会出现类似结构:

1.agents/
2  skills/
3    speckit-constitution/
4    speckit-specify/
5    speckit-clarify/
6    speckit-plan/
7    speckit-tasks/
8    speckit-implement/
9
10.specify/
11  templates/
12  memory/
13
14specs/
15

后续所有需求都会围绕这些文档进行演进。


如果你的 Agent 没有自动识别这些 Skill。

可以主动调用:

1[$speckit-constitution]
2[$speckit-specify]
3[$speckit-clarify]
4[$speckit-checklist]
5[$speckit-plan]
6[$speckit-tasks]
7[$speckit-analyze]
8[$speckit-implement]
9

我自己的实践里。

并不是通过一个统一命令完成所有事情。

而是把它理解成:

1一套 AI 软件工程工作流
2

然后按阶段调用。


我认为最应该写好的两个文件

如果时间有限。

不要追求把所有文档都写到极致。

优先保证:

1. Constitution

项目宪章。

例如:

1禁止随意增加依赖
2优先复用现有组件
3必须通过 TS 检查
4核心逻辑必须有测试
5API 必须考虑兼容
6

这决定了 AI 后面会怎么做事。


2. Plan

技术计划。

因为后续 Agent 最常看的其实不是 Spec。

而是:

1plan.md
2

这里会记录:

  • 技术方案
  • 数据模型
  • API 设计
  • 测试策略
  • 发布策略

很多时候看 Plan 就能快速恢复上下文。


Spec Kit 不适合所有项目

如果只是:

1改个按钮颜色
2修一个 Bug
3写一个脚本
4

直接让 AI 改更快。

Spec Kit 更适合:

✅ 中大型功能

✅ 前后端联动

✅ 数据结构变更

✅ 权限体系

✅ 多 Agent 协作

✅ 长周期迭代

这种场景收益会非常明显。


参考资料

GitHub Spec Kit

github.com/github/spec…

官方文档

github.github.com/spec-kit/

Installation Guide

github.github.com/spec-kit/in…

Quick Start Guide

github.github.com/spec-kit/qu…

GitHub 官方介绍

github.blog/ai-and-ml/g…


最后的感受

用了几轮之后。

我最大的变化不是:

1AI 写代码更快了
2

而是:

1AI 开发终于开始像工程开发了
2

Spec Kit 的核心从来不是生成多少 Markdown。

而是强迫你在实现之前回答清楚:

  • 要解决什么问题
  • 用户到底是谁
  • 验收标准是什么
  • 数据边界是什么
  • 权限边界是什么
  • 如何测试
  • 如何发布
  • 什么才算真正完成

对于复杂项目来说。

这些问题想清楚之后。

代码反而成了最简单的部分。

我觉得 Spec Kit 真正解决的不是 AI 写代码的问题。

而是 AI 项目失控的问题。

当功能开始涉及多人协作、长期迭代、数据模型、权限体系和发布策略时。

代码往往不是最难的部分。

真正难的是:

如何让所有人、所有 Agent,对同一件事保持一致理解。

而 Spec Kit 本质上是在给 AI 开发补回软件工程里曾经被省略掉的那一层。


AI 能写代码了,为什么我反而开始要求它先写文档?》 是转载文章,点击查看原文


相关推荐


企业智能助手的实践分享(LLM/RAG)
uzong2026/6/11

本文聚焦 AI 技术在企业级智能的实践,剖析项目实施过程中的关键挑战与避坑指南。 1. LLM 智能运维助手 1.1. 助手背景 在企业基础设施建设中,开放平台与基础服务承载着海量业务。随着系统复杂度的增加,日常运行中产生了庞大的日志告警数据。面对这些海量且繁杂的告警信息,传统的人工排查模式不仅耗时费力,且难以在“告警风暴”中迅速抽丝剥茧,成为制约研发效率的瓶颈。 希望助手能力致力于解决两大核心难题:一是应对海量日志告警的干扰,二是大幅缩短告警排查的平均耗时。 1.2. 案例效果 下面是一个案例


Linux shell脚本教程
诸神缄默不语2026/6/4

诸神缄默不语-个人技术博文与视频目录 Linux系统的命令行终端界面就是一个小黑窗,在里面敲命令执行任务。当你想执行一系列复杂的任务(比如连续执行多个命令、有逻辑判断规则等)时,光靠直接敲命令+回车就不够了,这时你就会将一系列任务的执行代码写到一个文本文件中,然后让Linux终端依次执行。这个文本文件就是shell脚本。 本文对Linux系统中的shell脚本进行简单介绍,包括其作用和基本写法。更高级的用法将在以后的教程中介绍。 对Linux系统的整体命令行操作教程,请参考我撰写的另一篇博文:


零基础webgis开发入门:HTML/CSS/JavaScript前端核心基础②
GIS6688002026/5/28

CSS:页面样式与布局美化 CSS 全称层叠样式表,核心作用是控制HTML元素的外观和布局,包括大小、颜色、背景、位置、边距等。 在WebGIS中,CSS直接决定地图的显示尺寸、是否全屏、页面是否有白边等关键效果。 CSS的核心逻辑可总结为两步走:选元素、改样式。 第一步:选元素(选择器) 1)什么是选择器: 选择器是CSS的核心,作用是从页面众多HTML元素中,筛选出需要修改样式的目标元素。 想象一群小黄人站你面前,你想把单眼的小黄人选出来变红色。 第一步:选出所


TOML 深度调研:对比 YAML、JSON 等五大配置格式,哪种最适合你的项目?
王若风2026/5/6

大家好,我是若风。 上周在配置一个 Rust 项目的时候,我盯着 Cargo.toml 发了一会儿呆。然后突然意识到一件事:我写了这么多年代码,跟配置文件打交道的时间可能比写业务逻辑还多。package.json、docker-compose.yml、tsconfig.json、.gitignore、terraform.tf……每个项目至少 3 到 5 个配置文件。 但说实话,我从来没认真想过一个问题:为什么这些工具要用不同的配置格式? YAML 写 Kubernetes 配置,JSON 写 p


如何将SVG格式文件转为PDF? 方便打印输出、正式汇报、跨平台展示
诸葛大钢铁2026/4/26

在日常设计、开发与文档交付过程中,SVG转PDF是一个非常高频但容易被忽视的需求。很多人一开始会觉得“只是格式转换而已”,但真正遇到输出打印、正式汇报或跨平台展示时才发现:SVG在不同设备上的兼容性并不总是稳定,而PDF才是更通用、更专业的交付格式。 尤其是在以下场景中,这个需求会变得非常明显: 设计稿需要提交评审或印刷 网页图标或流程图需要归档成标准文件 跨平台传输时避免样式错乱 因此,一个稳定、清晰、无损的SVG转PDF方案就显得非常重要。 一、设计软件直接导出


《swiftUI进阶 第9章SwiftUI 状态管理完全指南》
90后晨仔2026/4/18

概述 状态管理是 SwiftUI 应用的核心。本章将系统介绍从 iOS 13 到 iOS 17+ 的所有状态管理技术,包括传统的 ObservableObject 系列和现代的 @Observable 宏,帮助你根据项目需求选择最合适的方案。 第一部分:基础状态管理(iOS 13+) 1. @State:本地视图状态 @State 用于管理视图内部的简单状态,当值改变时自动刷新 UI。 struct CounterView: View { @State private var coun


Nginx 从入门到精通:全面解析与实战指南
程序员果子2026/4/10

目录 前言:为什么要学 Nginx? 一、Nginx 基础入门:从零搭建第一个服务 1.1 初识 Nginx:它是什么,能做什么? 1.2 第一个 Nginx 服务:最小化配置实战 1.3 安装:Linux 里的 Nginx 魔法:从下载到部署,轻松拿捏! 二、核心架构与配置解析:读懂 Nginx 的 "运行逻辑" 2.1 架构精髓:Master-Worker 进程模型 2.2 配置骨架:从 http 到 location 的层级关系 2.3 静态资源服务:Nginx 的 "原


多Agent工作流开发
字节逆旅2026/4/2

最近 OpenClaw、Claude Code 特别火,我当时就在想,能不能写个自己的Agent,让它自动根据我的需求文件干活?比如我改个 tasks.md,它就自动跳出来把代码写了。这不比怼着ide开发高级多了? 最开始的想法非常简单粗暴:用 Node.js 写个脚本,利用 chokidar 盯着一个 todo 文件夹。只要文件一变,脚本就通过 child_process 里的 exec 去调 claude 命令。 初版脚本核心逻辑: const chokidar = require('cho


利用 Cloudflare 邮件路由实现无限子邮箱配置指南
墨风如雪2026/3/24

上几期文章我介绍了怎么把域名托管到CLoudFlare和免费白嫖CF CDN的操作,这次我演示的是我日常最喜欢的功能之一,邮箱路由功能。可以只需要一个域名就可以拥有属于自己的邮箱,而且可以创建无限的子邮箱提供使用。 在这里你不需要搭建复杂的邮局,只要你有一个托管在 Cloudflare 的域名,就可以用任意的前缀邮箱来注册你想要的账号,所有邮件都会自动转发到你指定的主邮箱里面,接收验证码会非常的方便。 强大的开源资源库 在正式配置之前,我这里先介绍一个收集了十分多使用CLoudFlare免费资源


告别登录中断:前端双 Token无感刷新
发现一只大呆瓜2026/3/16

前言 在前后端分离的项目中,为了安全,Token 通常会设置有效期。但如果 Token 过期时强制用户重新登录,会极大地破坏用户体验。如何做到在用户毫无察觉的情况下,自动完成 Token 的续期?本文将深度拆解 “双 Token 无感刷新” 的实现机制。 一、 为什么需要“无感刷新”? 举个简单例子,你正在某 App 编辑内容,中途切出几分钟,再切回来时,直接弹出登录页,提示“登录已过期,请重新登录”,这种场景很容易让用户流失。 传统的单 Token 方案存在一个两难境地: 有效期过短:用户操

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 聚合阅读