首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Spec Coding 的 Landing Zone

Spec Coding 的 Landing Zone

作者头像
用户5602664
发布2026-06-02 13:30:26
发布2026-06-02 13:30:26
920
举报

企业上手 Spec Coding,不需要一次性准备好几十份文档

但你确实需要准备好三件东西。这三件东西就像地基——少一块,上面的楼就会塌。而且它们是逐层递进、每层带来质变的关系,不是"都准备好才有效"的并列关系。

代码语言:javascript
复制
约束层(AI 不能乱来 + 输出必须验证)
    ↓ 有了约束,AI 的输出才有下限
上下文层(AI 了解你的项目)
    ↓ 有了上下文,AI 的输出才贴合你的架构
规格层(AI 知道要做什么)
    ↓ 有了规格,AI 的输出才对题
━━━━━━━━━━━━━━━━━━━━━━━
    → Spec Coding 开始工作
以下还有一层"扩展层",但不是地基的一部分。
它在三层跑顺之后才需要。

下面逐层拆解。每一层回答三个问题:准备什么?解决了什么?不准备会怎样?

第一层:约束层 —— AGENTS.md + 验证门禁

准备什么

约束层包含两部分:约束文件(告诉 AI 怎么干)和验证门禁(确认 AI 干对了)。

① AGENTS.md

放在项目根目录,AI 每次对话自动加载。最少包含 5 个部分:

代码语言:javascript
复制
# 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 遵守了。最少需要:

代码语言:javascript
复制
## 验证命令(生成代码后必须运行)
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> 冲突

好心帮你"优化"红线模块

改动了财务逻辑,引发对账问题

同时生成测试和实现

你改实现时测试也跟着变,碍手碍脚

有了约束 + 门禁之后,这些错误基本消失。

不准备会怎样

代码语言:javascript
复制
没有约束层的 AI Coding:
用户需求 → AI 生成 → [引入错误依赖] → 编译失败
                        → [跳过分层] → 架构不一致
                        → [格式不统一] → Code Review 被批
                        → [改动红线模块] → 生产事故


每一轮生成都要人工修正 30%~50%,
"AI 帮我写代码"变成"AI 写 + 我改 + 再 Review",
实际效率可能比手写还低。

这一层带来的具体提升

指标

无约束层

有约束层

AI 首轮代码编译通过率

~30%(估算)

~85%(估算)

每次生成后需要人工修正的比例

40%~60%

10%~20%

Code Review 关注点

"代码有没有按规范写"

"业务逻辑对不对"

新手用 AI 写出的代码质量

差异极大

接近中级开发者

以上数字基于落地观察的估算范围,非精确统计。不同团队因技术栈复杂度、AI 工具差异会有波动。

维护成本:

  • AGENTS.md 随技术栈升级需要同步更新(每个大版本升级时)
  • 红线列表随业务变化需要补充(每季度审视一次)
  • 验证命令随构建工具变更需要调整
  • 月均维护时间:15~30 分钟

第二层:上下文层 —— Context Pack

准备什么

Context Pack 是一组让 AI 了解你项目历史决策和现有资产的文件。最少包含三份:

① 现有资产清单

代码语言:javascript
复制
## 现有公共服务(可直接调用,禁止重复实现)
- OrderService:订单核心服务,提供 createOrder / cancelOrder
- ProductService:商品信息查询
- UserService:用户信息和权限
- RedisTemplate:已注入,直接用
- RocketMQTemplate:已注入,直接用
## 已有的基础设施类
- ResultVO<T>:统一返回包装
- BizException:业务异常
- BaseEntity:含 createTime / updateTime / createBy / updateBy

② 踩坑记录

代码语言:javascript
复制
## 历史踩坑记录
### 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

重新造轮子,写一个一模一样的

不知道之前踩过并发坑

再踩一遍,线上出问题

不知道支付系统不能直接调

绕过订单中台直接调支付,引发对账混乱

不知道某个模块的历史原因

建议"优化"一个本来就有意保留的实现

不准备会怎样

代码语言:javascript
复制
有了约束层,但没有上下文层:
AI 生成的代码 → 规范是对的(分层/命名/返回格式)
                → 但调用了已存在的接口(重复实现)
                → 或在不该加逻辑的地方加了(越过系统边界)
                → 或没考虑已知的并发问题


结果是:代码"看起来对",但和现有系统冲突。
合并后要花更多时间处理集成问题。

这一层带来的具体提升

指标

只有约束层

约束 + 上下文

重复实现已有服务的概率

~30%(估算)

<5%

越过系统边界的错误

偶发

几乎为零

重复踩历史坑的概率

~40%(估算)

<10%

集成阶段需要返工的工作量

30%~40%

5%~10%

以上数字非精确统计

关键点:约束层解决的是"代码风格"问题,上下文层解决的是"系统一致性"问题。两者叠加,AI 从"写得对"升级为"写得对且不冲突"。

维护成本:

  • 资产清单随项目迭代需要更新(每加一个新 Service 就补一条)
  • 踩坑记录需要持续积累(每次线上出问题后补一条)
  • 依赖图谱随系统间关系变化需要修订
  • 月均维护时间:30~60 分钟(踩坑记录是主要开销,但同时也是最有价值的部分)

第三层:规格层 —— Spec 文档集

准备什么

Spec 文档是 AI Coding 的"输入"。约束层和上下文层解决的是输出的质量,Spec 解决的是输出的方向——让 AI 做正确的事。

最少需要 3 份核心 Spec:

① 用户故事与验收标准(US + AC)

代码语言:javascript
复制
## US-001:虚拟商品自动识别
作为一个订单系统,
我希望自动识别订单中的虚拟商品,
以便对虚拟商品执行自动发货流程。
### 验收条件
- AC-01:商品条码命中虚拟商品清单 → 标记为虚拟商品
- AC-02:商品金额为 0 → 标记为虚拟商品
- AC-03:同时命中条码清单 AND 金额为 0 → 标记为虚拟商品
- AC-04:以上条件都不满足 → 标记为实体商品
- AC-05:虚拟商品进入自动发货队列,实体商品进入普通发货流程
- AC-06:并发场景下同一订单不重复处理

② API 接口规格

代码语言:javascript
复制
## POST /api/order/{orderId}/classify
### 请求
| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| orderId | Long | 是 | 订单 ID |
### 响应 200
{
  "code": 0,
  "data": {
    "orderId": 12345,
    "productType": "VIRTUAL",
    "autoShipEnabled": true
  }
}
### 响应 404
| 字段 | 说明 |
|------|------|
| code | 1001 |
| message | 订单不存在 |

③ 数据模型

代码语言:javascript
复制
## 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 之后:

代码语言:javascript
复制
Spec(精确输入)→ AI 生成 → 对照 AC 验证 → 差多少补多少
整个过程可控、可追溯、可重复。

不准备会怎样

代码语言:javascript
复制
有了约束 + 上下文,但没有 Spec:

AI 生成的代码 → 规范对(分层/命名/返回格式)
               → 架构对(不冲突/不越界)
               → 但做的东西不是你想要的

结果是:代码质量不差,但方向错了。
返工成本 = 重新理解需求 + 重新生成 + 重新 Review,
比没有约束层更浪费时间。

这一层带来的具体提升

指标

只有约束+上下文

约束+上下文+Spec

一次生成就满足业务需求的比例

~40%(估算)

~75%(估算)

需求偏差导致的重做次数

每 2~3 个任务 1 次

每 5~6 个任务 1 次

沟通澄清次数

每个任务 2~3 轮

每个任务 0~1 轮

从"提需求"到"代码可 Review"的时长

2~3 轮对话

1 轮对话

以上数字非精确统计。

维护成本:

  • Spec 随需求变更必须同步更新(每次需求变更时)
  • 如果 Spec 和代码漂移,AI 会基于错误的规格生成
  • 月均维护时间:取决于需求变更频率,通常 1~2 小时/迭代

扩展层:从个人到团队

前三层解决的是"一个人在一个项目上用 AI Coding"的问题。企业落地时还会遇到第四个问题:怎么从一个人扩展到一群人? 这不是地基的一部分,而是地基上面的第一层楼。三层没跑顺之前,不需要碰这层。

需要准备什么

① 团队共享模板

不是每个人写自己的 AGENTS.md,而是团队有一个"主模板",新项目基于它初始化。这和"每个人从零写一份"的区别:

个人模板

团队模板

新项目启动时间

每项目 2~3 小时

30 分钟

代码风格一致性

依赖个人自觉

AI 自动遵守

最佳实践传播

不传播

新成员天然获得

② Spec 分工机制

代码语言:javascript
复制
## Spec 分工
- PM / 产品:写用户故事(US)和验收条件(AC)
- 架构师:写 API 接口规格和数据模型
- Tech Lead:审查 Spec 的一致性和可实现性
- 开发:AI 生成代码 + 人工 Review + 补充边界情况

③ Skill 库(第一个月先建 3~5 个)

代码语言:javascript
复制
Skill Hub 初始化清单(第一个月,不需要更多)
- 编码规范.skill(命名/日志/异常/返回值的标准写法)
- CRUD 标准流程.skill(最常见的代码模式)
- 分页查询.skill(高频场景的标准实现)
- 事务管理.skill(什么时候加 @Transactional)

解决了什么

个人问题

团队放大后

每个人写的 AGENTS.md 不一样

AI 在不同仓库生成风格各异的代码

每个人理解的 Spec 格式不同

接口字段名不一致,集成出问题

好的 Prompt 只在个人手里

团队整体效率没有提升

一个人踩的坑只有一个人知道

其他人继续踩

不准备会怎样

代码语言:javascript
复制
前三层在一个人的仓库里运行良好,
但扩展到 3 个团队、10 个项目后:

每个项目的 AGENTS.md 各异 → AI 在每个项目里"重新学习"
没有共享的 Skill → 好的实践无法复制
Spec 格式不统一 → 跨团队协作时接口不一致

结果是:个人效率提升了,但团队效率没有提升。
组织级的效果为零。

这一层带来的具体提升

指标

个人级(前三层)

团队级(+扩展层)

新项目接入 AI Coding 的时间

每项目重新写规范

从模板初始化,30 分钟

团队代码风格一致性

依赖个人自觉

AI 自动遵守统一规范

最佳实践的传播

不传播

Skill 库自动让所有人受益

新成员上手 AI Coding 的时间

自行摸索 1~2 周

按 Skill 库 1~2 天

维护成本:

  • 团队模板随技术栈演进需要更新
  • Skill 库需要持续沉淀(但这是"越积越厚"的资产,不是负担)
  • Spec 分工机制需要随团队结构调整
  • 月均维护时间:20~40 分钟(Skill 沉淀不计入,因为它本身就是工作产出)

总结:三层地基 + 一层扩展

代码语言:javascript
复制
三层地基(必须)
━━━━━━━━━━━━━━
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 不再犯低级错误"就够

代码语言:javascript
复制
到位标准:
拿到一个新的业务需求,让 AI 生成代码,
编译通过率 ≥ 80%,分层/命名/返回格式不需要人工修正。

不到位信号:
AI 每次都在 import 不存在的包、跳过分层、格式混乱。
→ 说明约束写得太笼统,需要更具体的规则。

过头信号:
AGENTS.md 写了超过 50 条规则,AI 开始违反其中某些规则。
→ 规则太多等于没有规则,应该合并、删减到 15~20 条核心约束。

上下文层:写到"AI 不再重复造轮子"就够

代码语言:javascript
复制
到位标准:
AI 不会重复实现已有的 Service、不会调用被禁止的系统、
不会踩之前踩过的坑。

不到位信号:
新项目里 AI 又写了一个和现有功能重复的类。
→ 说明上下文文件没有覆盖到这个项目,需要补充。

过头信号:
踩坑记录写了超过 50 条,AI 的上下文窗口被挤占。
→ 只保留最近 10~15 条高频坑,更早的归档到文档库按需引用。

规格层:写到"一次生成不需要大幅修改"就够

代码语言:javascript
复制
到位标准:
一份完整的 Spec(US + API + 数据模型 + AC),
AI 一次生成的代码覆盖 80% 以上的 AC。

不到位信号:
每次生成后需要大幅重写才能用。
→ 说明 Spec 不够精确(AC 模糊、接口字段不完整)。
注意:不是 Spec 要写更多,而是要写得更精确。

过头信号:
一份 Spec 写了 30+ 页,AI 生成时遗漏了关键约束。
→ Spec 太长反而导致 AI 注意力分散,应该拆分为"核心Spec(5页内)+ 附录"。

团队层:写到"新项目 30 分钟启动"就够

代码语言:javascript
复制
到位标准:
新项目基于团队模板初始化 AGENTS.md 和 Context Pack,
30 分钟内可以开始用 AI 写代码。

不到位信号:
每个新项目都要花几天写规范,团队没有共享资产。
→ 说明 Skill 库和模板机制需要完善。

过头信号:
Skill 库建了上百个 Skill,团队成员不知道该用哪个。
→ 只保留每个季度 Top 10 最常用的 Skill,其余归档。

一个实操建议:从"这一个需求"开始

很多企业的误区是:先花两周把整个项目的 Landing Zone 铺完,然后再开始用 AI 写代码。

更好的做法是反过来:

代码语言:javascript
复制
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 小时),但需要提前知道。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沐然云计算 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一层:约束层 —— AGENTS.md + 验证门禁
    • 准备什么
    • 解决了什么
    • 不准备会怎样
    • 这一层带来的具体提升
  • 第二层:上下文层 —— Context Pack
    • 准备什么
    • 解决了什么
    • 不准备会怎样
    • 这一层带来的具体提升
  • 第三层:规格层 —— Spec 文档集
    • 准备什么
    • 解决了什么
    • 不准备会怎样
    • 这一层带来的具体提升
  • 扩展层:从个人到团队
    • 需要准备什么
    • 解决了什么
    • 不准备会怎样
    • 这一层带来的具体提升
  • 总结:三层地基 + 一层扩展
  • 关于"阶段性目标":怎样才叫到位了
    • 约束层:写到"AI 不再犯低级错误"就够
    • 上下文层:写到"AI 不再重复造轮子"就够
    • 规格层:写到"一次生成不需要大幅修改"就够
    • 团队层:写到"新项目 30 分钟启动"就够
  • 一个实操建议:从"这一个需求"开始
  • 持续维护:最大的隐性成本
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档