企业上手 Spec Coding,不需要一次性准备好几十份文档。
但你确实需要准备好三件东西。这三件东西就像地基——少一块,上面的楼就会塌。而且它们是逐层递进、每层带来质变的关系,不是"都准备好才有效"的并列关系。
约束层(AI 不能乱来 + 输出必须验证)
↓ 有了约束,AI 的输出才有下限
上下文层(AI 了解你的项目)
↓ 有了上下文,AI 的输出才贴合你的架构
规格层(AI 知道要做什么)
↓ 有了规格,AI 的输出才对题
━━━━━━━━━━━━━━━━━━━━━━━
→ Spec Coding 开始工作
以下还有一层"扩展层",但不是地基的一部分。
它在三层跑顺之后才需要。下面逐层拆解。每一层回答三个问题:准备什么?解决了什么?不准备会怎样?
约束层包含两部分:约束文件(告诉 AI 怎么干)和验证门禁(确认 AI 干对了)。
① AGENTS.md
放在项目根目录,AI 每次对话自动加载。最少包含 5 个部分:
# AGENTS.md
## 1. 项目身份
- 语言:Java 17 / Python 3.11 / TypeScript
- 框架:Spring Boot 3.2 / FastAPI / Next.js
- 构建工具:Maven / Poetry / pnpm
## 2. 技术栈快照
| 类别 | 产品 | 版本 |
|------|------|------|
| ORM | MyBatis-Plus | 3.5.3.1 |
| 数据库 | MySQL | 8.0 |
| 缓存 | Redis | 7.0 |
## 3. 项目结构
src/main/java/com.xxx.module/
├── controller/ # HTTP 入口
├── service/ # 业务逻辑
├── mapper/ # 数据访问
└── entity/ # 实体类
## 4. 永久红线
| 编号 | 禁止 | 原因 |
|------|------|------|
| RED-01 | 修改 com.xxx.finance.* | 财务对账逻辑,高风险 |
| RED-02 | 引入新依赖不申请 | 安全合规 |
| RED-03 | 在 Controller 中写 SQL | 违反分层 |
## 5. AI 行为约束
- 禁止臆造不存在的接口——调用前必须确认
- 禁止同时生成测试和实现——先生成实现,确认后再生成测试
- 禁止明文密钥——使用占位符 ${SECRET_KEY}
- 所有接口返回 ResultVO<T>,不使用裸 Map
实际准备时间:10~30 分钟。
② 验证门禁
约束写了之后,必须有办法确认 AI 遵守了。最少需要:
## 验证命令(生成代码后必须运行)
1. mvn compile # 编译通过
2. mvn test # 单元测试全绿
3. mvn checkstyle:check # 代码规范检查
## AI 生成代码 Review Checklist
□ 实现是否覆盖了所有 AC?
□ 是否调用了已存在的服务(而非重复实现)?
□ 是否在红线模块之外?
□ 异常处理是否符合 BizException 规范?
□ 是否有对应的单元测试?
□ 测试覆盖了所有 AC 场景?
验证门禁不是"以后再加"的锦上添花——没有验证,约束等于没写。AI 可以嘴上答应所有规则,实际输出完全不管。门禁是约束的"执行牙齿"。
约束层解决的是 AI Coding 里最普遍、最致命的问题:AI 不知道你的项目有什么规矩,且不会主动遵守。
没有约束层的时候,AI 会:
行为 | 后果 |
|---|---|
按自己的习惯 import 库 | 引入不存在的依赖,编译失败 |
按通用架构写代码 | 跳过 Service 层,在 Controller 里写业务逻辑 |
用自己的返回格式 | 和项目的 ResultVO<T> 冲突 |
好心帮你"优化"红线模块 | 改动了财务逻辑,引发对账问题 |
同时生成测试和实现 | 你改实现时测试也跟着变,碍手碍脚 |
有了约束 + 门禁之后,这些错误基本消失。
没有约束层的 AI Coding:
用户需求 → AI 生成 → [引入错误依赖] → 编译失败
→ [跳过分层] → 架构不一致
→ [格式不统一] → Code Review 被批
→ [改动红线模块] → 生产事故
每一轮生成都要人工修正 30%~50%,
"AI 帮我写代码"变成"AI 写 + 我改 + 再 Review",
实际效率可能比手写还低。指标 | 无约束层 | 有约束层 |
|---|---|---|
AI 首轮代码编译通过率 | ~30%(估算) | ~85%(估算) |
每次生成后需要人工修正的比例 | 40%~60% | 10%~20% |
Code Review 关注点 | "代码有没有按规范写" | "业务逻辑对不对" |
新手用 AI 写出的代码质量 | 差异极大 | 接近中级开发者 |
以上数字基于落地观察的估算范围,非精确统计。不同团队因技术栈复杂度、AI 工具差异会有波动。
维护成本:
Context Pack 是一组让 AI 了解你项目历史决策和现有资产的文件。最少包含三份:
① 现有资产清单
## 现有公共服务(可直接调用,禁止重复实现)
- OrderService:订单核心服务,提供 createOrder / cancelOrder
- ProductService:商品信息查询
- UserService:用户信息和权限
- RedisTemplate:已注入,直接用
- RocketMQTemplate:已注入,直接用
## 已有的基础设施类
- ResultVO<T>:统一返回包装
- BizException:业务异常
- BaseEntity:含 createTime / updateTime / createBy / updateBy
② 踩坑记录
## 历史踩坑记录
### 2026-03-15:并发场景重复发货
- 问题:虚拟商品自动发货在并发下重复触发
- 根因:缺少分布式锁
- 修复:使用 Redis 锁,key = order:{orderId}
- 教训:所有自动处理流程必须考虑并发
### 2026-02-20:关键字匹配误判
- 问题:商品名含"虚拟"但不是虚拟商品
- 根因:仅用关键字匹配,没有结合 ID 清单
- 修复:关键字 + ID 清单双重验证
- 教训:单一规则容易误判
③ 系统依赖图谱
## 本系统可以调用的
- 商品系统(product-service):REST API,查商品信息
- 用户系统(user-service):gRPC,查用户信息
## 禁止直接调用的
- 支付系统(payment-service):由订单中台统一调用
→ 原因:支付逻辑复杂,需要统一对账
约束层告诉 AI 怎么写代码,上下文层告诉 AI 你的项目里有什么、什么不能动。
没有上下文层的时候,AI 会:
行为 | 后果 |
|---|---|
不知道已有 OrderService | 重新造轮子,写一个一模一样的 |
不知道之前踩过并发坑 | 再踩一遍,线上出问题 |
不知道支付系统不能直接调 | 绕过订单中台直接调支付,引发对账混乱 |
不知道某个模块的历史原因 | 建议"优化"一个本来就有意保留的实现 |
有了约束层,但没有上下文层:
AI 生成的代码 → 规范是对的(分层/命名/返回格式)
→ 但调用了已存在的接口(重复实现)
→ 或在不该加逻辑的地方加了(越过系统边界)
→ 或没考虑已知的并发问题
结果是:代码"看起来对",但和现有系统冲突。
合并后要花更多时间处理集成问题。指标 | 只有约束层 | 约束 + 上下文 |
|---|---|---|
重复实现已有服务的概率 | ~30%(估算) | <5% |
越过系统边界的错误 | 偶发 | 几乎为零 |
重复踩历史坑的概率 | ~40%(估算) | <10% |
集成阶段需要返工的工作量 | 30%~40% | 5%~10% |
以上数字非精确统计
关键点:约束层解决的是"代码风格"问题,上下文层解决的是"系统一致性"问题。两者叠加,AI 从"写得对"升级为"写得对且不冲突"。
维护成本:
Spec 文档是 AI Coding 的"输入"。约束层和上下文层解决的是输出的质量,Spec 解决的是输出的方向——让 AI 做正确的事。
最少需要 3 份核心 Spec:
① 用户故事与验收标准(US + AC)
## US-001:虚拟商品自动识别
作为一个订单系统,
我希望自动识别订单中的虚拟商品,
以便对虚拟商品执行自动发货流程。
### 验收条件
- AC-01:商品条码命中虚拟商品清单 → 标记为虚拟商品
- AC-02:商品金额为 0 → 标记为虚拟商品
- AC-03:同时命中条码清单 AND 金额为 0 → 标记为虚拟商品
- AC-04:以上条件都不满足 → 标记为实体商品
- AC-05:虚拟商品进入自动发货队列,实体商品进入普通发货流程
- AC-06:并发场景下同一订单不重复处理
② API 接口规格
## POST /api/order/{orderId}/classify
### 请求
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| orderId | Long | 是 | 订单 ID |
### 响应 200
{
"code": 0,
"data": {
"orderId": 12345,
"productType": "VIRTUAL",
"autoShipEnabled": true
}
}
### 响应 404
| 字段 | 说明 |
|------|------|
| code | 1001 |
| message | 订单不存在 |
③ 数据模型
## order_classify_log(订单分类记录)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | bigint | 主键 |
| order_id | bigint | 订单 ID |
| product_type | varchar(20) | VIRTUAL / PHYSICAL |
| auto_ship_enabled | tinyint | 是否自动发货 |
| classify_result | varchar(500) | 分类详情 |
| create_time | datetime | 创建时间 |
Spec 解决的是 AI Coding 里最核心的问题:AI 不知道"做什么"。
没有 Spec 的时候:
工作方式 | 典型结果 |
|---|---|
"帮我做一个虚拟商品功能" | AI 按自己的理解做,和你的业务规则差很远 |
"帮我修复这个 Bug" | AI 修了它以为的 Bug,不是你要的那个 |
口头描述 + 边聊边改 | 10 轮对话后 AI 已经忘了最初的意图 |
有了 Spec 之后:
Spec(精确输入)→ AI 生成 → 对照 AC 验证 → 差多少补多少
整个过程可控、可追溯、可重复。有了约束 + 上下文,但没有 Spec:
AI 生成的代码 → 规范对(分层/命名/返回格式)
→ 架构对(不冲突/不越界)
→ 但做的东西不是你想要的
结果是:代码质量不差,但方向错了。
返工成本 = 重新理解需求 + 重新生成 + 重新 Review,
比没有约束层更浪费时间。指标 | 只有约束+上下文 | 约束+上下文+Spec |
|---|---|---|
一次生成就满足业务需求的比例 | ~40%(估算) | ~75%(估算) |
需求偏差导致的重做次数 | 每 2~3 个任务 1 次 | 每 5~6 个任务 1 次 |
沟通澄清次数 | 每个任务 2~3 轮 | 每个任务 0~1 轮 |
从"提需求"到"代码可 Review"的时长 | 2~3 轮对话 | 1 轮对话 |
以上数字非精确统计。
维护成本:
前三层解决的是"一个人在一个项目上用 AI Coding"的问题。企业落地时还会遇到第四个问题:怎么从一个人扩展到一群人? 这不是地基的一部分,而是地基上面的第一层楼。三层没跑顺之前,不需要碰这层。
① 团队共享模板
不是每个人写自己的 AGENTS.md,而是团队有一个"主模板",新项目基于它初始化。这和"每个人从零写一份"的区别:
个人模板 | 团队模板 | |
|---|---|---|
新项目启动时间 | 每项目 2~3 小时 | 30 分钟 |
代码风格一致性 | 依赖个人自觉 | AI 自动遵守 |
最佳实践传播 | 不传播 | 新成员天然获得 |
② Spec 分工机制
## Spec 分工
- PM / 产品:写用户故事(US)和验收条件(AC)
- 架构师:写 API 接口规格和数据模型
- Tech Lead:审查 Spec 的一致性和可实现性
- 开发:AI 生成代码 + 人工 Review + 补充边界情况
③ Skill 库(第一个月先建 3~5 个)
Skill Hub 初始化清单(第一个月,不需要更多)
- 编码规范.skill(命名/日志/异常/返回值的标准写法)
- CRUD 标准流程.skill(最常见的代码模式)
- 分页查询.skill(高频场景的标准实现)
- 事务管理.skill(什么时候加 @Transactional)个人问题 | 团队放大后 |
|---|---|
每个人写的 AGENTS.md 不一样 | AI 在不同仓库生成风格各异的代码 |
每个人理解的 Spec 格式不同 | 接口字段名不一致,集成出问题 |
好的 Prompt 只在个人手里 | 团队整体效率没有提升 |
一个人踩的坑只有一个人知道 | 其他人继续踩 |
前三层在一个人的仓库里运行良好,
但扩展到 3 个团队、10 个项目后:
每个项目的 AGENTS.md 各异 → AI 在每个项目里"重新学习"
没有共享的 Skill → 好的实践无法复制
Spec 格式不统一 → 跨团队协作时接口不一致
结果是:个人效率提升了,但团队效率没有提升。
组织级的效果为零。指标 | 个人级(前三层) | 团队级(+扩展层) |
|---|---|---|
新项目接入 AI Coding 的时间 | 每项目重新写规范 | 从模板初始化,30 分钟 |
团队代码风格一致性 | 依赖个人自觉 | AI 自动遵守统一规范 |
最佳实践的传播 | 不传播 | Skill 库自动让所有人受益 |
新成员上手 AI Coding 的时间 | 自行摸索 1~2 周 | 按 Skill 库 1~2 天 |
维护成本:
三层地基(必须)
━━━━━━━━━━━━━━
Layer 1 约束层 AGENTS.md + 验证门禁 代码下限保障 ★★★★☆
Layer 2 上下文层 Context Pack 系统一致性 ★★★★☆
Layer 3 规格层 Spec 文档集(最少3份) 做对的事 ★★★★★
一层扩展(三层跑顺后再加)
━━━━━━━━━━━━━━━━━━━━━━
Layer 4 团队层 共享模板 + Skill 库 组织级放大 ★★★★☆
阶段 | 包含层级 | 总准备时间 | 适用场景 | 关键指标 |
|---|---|---|---|---|
起步期 | Layer 1 + 2 | 30 分钟 | 第一个 AI Coding 项目 | AI 生成代码不再"瞎搞" |
规范期 | Layer 1 + 2 + 3 | 2 小时 | 有明确需求的正式项目 | AI 做对的事 |
扩展期 | Layer 1~3 + 4 | +半天 | 多个团队推广 | 组织级效率提升 |
每层是前一层的必要前提,不是可选项。没有约束层直接写 Spec → AI 生成的代码风格混乱;有了 Spec 但没有约束层 → AI 生成的代码"内容对但格式错";三层都有但不做验证 → 你不知道 AI 是不是真的做对了。
前面说了三层 + 扩展层,但企业经常问的是:"做到什么程度就可以停了?"这个问题很重要——不是越多越好,每一层都有边际收益递减点,也有"做过头"的风险。
到位标准:
拿到一个新的业务需求,让 AI 生成代码,
编译通过率 ≥ 80%,分层/命名/返回格式不需要人工修正。
不到位信号:
AI 每次都在 import 不存在的包、跳过分层、格式混乱。
→ 说明约束写得太笼统,需要更具体的规则。
过头信号:
AGENTS.md 写了超过 50 条规则,AI 开始违反其中某些规则。
→ 规则太多等于没有规则,应该合并、删减到 15~20 条核心约束。到位标准:
AI 不会重复实现已有的 Service、不会调用被禁止的系统、
不会踩之前踩过的坑。
不到位信号:
新项目里 AI 又写了一个和现有功能重复的类。
→ 说明上下文文件没有覆盖到这个项目,需要补充。
过头信号:
踩坑记录写了超过 50 条,AI 的上下文窗口被挤占。
→ 只保留最近 10~15 条高频坑,更早的归档到文档库按需引用。到位标准:
一份完整的 Spec(US + API + 数据模型 + AC),
AI 一次生成的代码覆盖 80% 以上的 AC。
不到位信号:
每次生成后需要大幅重写才能用。
→ 说明 Spec 不够精确(AC 模糊、接口字段不完整)。
注意:不是 Spec 要写更多,而是要写得更精确。
过头信号:
一份 Spec 写了 30+ 页,AI 生成时遗漏了关键约束。
→ Spec 太长反而导致 AI 注意力分散,应该拆分为"核心Spec(5页内)+ 附录"。到位标准:
新项目基于团队模板初始化 AGENTS.md 和 Context Pack,
30 分钟内可以开始用 AI 写代码。
不到位信号:
每个新项目都要花几天写规范,团队没有共享资产。
→ 说明 Skill 库和模板机制需要完善。
过头信号:
Skill 库建了上百个 Skill,团队成员不知道该用哪个。
→ 只保留每个季度 Top 10 最常用的 Skill,其余归档。很多企业的误区是:先花两周把整个项目的 Landing Zone 铺完,然后再开始用 AI 写代码。
更好的做法是反过来:
Week 1 Day 1:选一个真实的、非核心的需求(比如一个 CRUD 接口)
↓
花 30 分钟铺 Layer 1 + 2(AGENTS.md + Context Pack)
↓
让 AI 用这个需求生成代码
↓
看看哪里错了 → 更新 AGENTS.md / 补充 Context
↓
Week 1 Day 2~5:每天做 2~3 个类似需求
每遇到一次 AI 犯错 → 补一条规则或一条踩坑记录
↓
Week 2:开始写 Layer 3(Spec)
用"这周做完的需求"反推 Spec 模板
下周的需求直接用 Spec 驱动
效果:第一周结束时,你的 AGENTS.md 和踩坑记录已经比任何模板都精准——因为它们来自真实的错误,不是假设。
这也是为什么之前的文章说"前 4 周是训练期"。Landing Zone 不是"准备好再开始",而是"开始的过程中持续完善"。
前面每层末尾都标注了维护成本,这里汇总一下:
层级 | 月均维护时间 | 维护性质 |
|---|---|---|
约束层 | 15~30 分钟 | 技术栈升级时更新 |
上下文层 | 30~60 分钟 | 踩坑记录是主要开销,但也是最有价值的资产 |
规格层 | 1~2 小时/迭代 | 随需求变更而变, unavoidable |
团队层 | 20~40 分钟 | 模板和 Skill 随团队演进更新 |
总计:每月的维护开销约 2~4 小时。这不是负担——对比"每次生成代码后人工修正 40%~60%"的代价,这点维护时间是极低成本的。
但企业需要提前知道这个数字,才能判断"值不值"。不提维护成本,等于只讲了收益没讲代价,是不完整的。
本文是"大模型做方案,小模型做实现"的配套落地文章。理论讲了"为什么",这篇讲"怎么做"。
核心信息只有一句:Spec Coding 需要约束层、上下文层、规格层三层地基。每层解决一个不同维度的问题,每层带来可量化的提升。不要一次性铺完,在实战中逐层建立,前 4 周是正常的训练期。维护成本不高(每月 2~4 小时),但需要提前知道。