背景:为什么我们需要一套工程化体系来驾驭 AI Coding

AI Coding 的能力与风险

AI 编程助手(如 Cursor、Copilot、通义灵码等)已经具备强大的代码生成能力——给出一段需求描述,几秒钟内就能产出可运行的代码。但当我们真正在工程项目中使用 AI Coding 时,会面对一个核心矛盾:

AI 写代码很快,但它不知道你的项目长什么样。

一个新加入的 AI Agent,如果不给它任何项目上下文,它会按照自己的"常识"写代码:用 Jackson 序列化 JSON、用 @Autowired 注入 Mapper、用 @Transactional 管事务、用 RestTemplate 发 HTTP 请求。这些写法在通用场景下没有问题,但在我们的项目里全是违规的。

我们项目遇到的真实问题

在引入 AI Coding 的过程中,我们反复遇到以下问题:

问题 具体表现 根因
技术栈跑偏 AI 用了 Jackson 而非 FastJSON、用了 var 关键字(Java 9+ 语法)、用了 Spring 3.x 的 jakarta 包名 AI 不知道项目锁定了 JDK 1.8 + Spring Boot 2.3
架构违反 AI 把供应商代码写进了 business 层、跨层引用了 Mapper、反向依赖了上层模块 AI 不了解模块边界和依赖方向
跳过设计直接写代码 拿到需求就让 AI 开写,写完发现方向错了,全部返工 缺少"先设计再编码"的流程约束
文档和代码脱节 新增了错误码但 error-codes.md 没更新、设计文档还停留在 draft 状态、CHANGELOG 空白 缺少文档同步的强制机制
知识不可复用 每个 AI 会话都是"从零开始",上一次踩过的坑下次还会踩 项目知识没有结构化沉淀
交付质量不可控 PR 提交了才发现没写测试、Linter 报错一堆、编译都没过 缺少交付前的自动检查门禁

这些问题的本质不是 AI 能力不够,而是我们没有给 AI 提供足够的上下文和约束。AI 像一个能力很强但不了解项目的新人——你不说,它就按自己的方式来。

解决思路:Harness Engineering(驾驭式工程化)

Harness Engineering 的核心理念是:

AI 生成,人类驾驭。

不是限制 AI 的能力,而是通过一套分层文档体系为 AI 提供充分的项目上下文和硬性约束,让 AI 在"正确的轨道"上发挥能力。同时通过人工确认门禁确保关键决策由人类把控。

传统 AI Coding                        Harness Engineering
─────────────                        ──────────────────
开发者 → AI → 代码                     开发者 → PRD
         ↑                                ↓
         └ 没有约束,各写各的             AI Agent(受 Rules 约束 + 按需加载 Wiki)
                                            ↓
                                         设计文档 → 人工评审门禁 → 代码 → 自检 → 交付

这套体系做了什么

我们在项目中构建了一套四层文档体系,将"如何让 AI 正确地写代码"这个问题拆解为四个层面:

层次 解决什么问题 类比
Rules 层 告诉 AI"什么能做、什么不能做" 新人入职的技术红线手册
Skills 层 告诉 AI"遇到什么场景该怎么做" 新人入职的操作 SOP
Wiki 层 告诉 AI"项目长什么样、有哪些资产可以复用" 新人入职的项目知识库
Changes 层 告诉 AI"改完代码后要检查什么、同步什么" 新人入职的交付 Checklist

这四层不是独立存在的,而是协同运作:Rules 全程约束行为,Skills 按场景提供操作手册,Wiki 提供项目上下文,Changes 管控变更质量。AI Agent 在开发流程中按步骤按需加载对应文档,既保证了上下文充分,又避免了 token 浪费。

PRD 驱动的标准工作流

在这个体系下,团队的开发方式从"开发者 + AI 自由协作"变成了标准化的 7 步流程

PRD 输入 → 影响分析 → 技术设计 → 设计评审(人工门禁) → 代码生成 → 文档同步 → 交付自检
 Step 1     Step 2     Step 3      Step 4           Step 5      Step 6      Step 7

关键设计

  • 全流程只有一个人工卡点(Step 4 设计评审),其余步骤 AI 自动执行——兼顾效率与可控性
  • 每一步按需加载文档,单步 token 控制在 3000 以内——避免上下文膨胀导致生成质量下降
  • 每一步有明确的产出物——流程可追溯、可审查、可回退
  • 交付前必须通过 31 项自检 + 自动治理巡检——不达标不准交付

这套体系带来的价值

维度 之前 之后
开发效率 AI 会话从零开始,每次都要重新解释项目 AI 加载 Rules + Wiki 即获得完整上下文,直接开工
代码质量 依赖人工 Review 发现问题 Rules + Linter 35 条规则 + 交付自检三层拦截
设计质量 没有设计环节,直接写代码 强制设计文档 + 7 维度评审门禁
知识沉淀 知识在老员工脑子里 结构化存入 Wiki 层,人机共读
变更可控 PR 不知道改了什么、影响多大 影响分析 + 文档同步 + CHANGELOG 全链路追溯
Skill 复用 每次踩的坑下次还会踩 首次开发沉淀 Skill,后续直接复用

接下来的分享将分步展开:

  1. 四层体系详解:Rules / Skills / Wiki / Changes 每一层管什么、团队怎么用
  2. PRD 驱动标准工作流:7 步流程每一步做什么、读什么文档、产出什么
  3. 无 Skill 场景的处理:新功能模块没有现成操作手册时的兜底机制与沉淀策略
  4. 团队执行约定:哪些是硬性约定、谁负责什么、违反了怎么处理

一、四层体系:团队怎么用

第一层:Rules — 技术红线(不可触碰)

定位:项目的技术宪法,AI Agent 上下文自动注入,全程生效,无需手动加载。

团队执行要求:所有新增代码必须通过以下 4 项硬性约束,违反即视为不合格代码:

约束文件 管什么 一句话记忆
always-on.md 技术栈版本、依赖方向、JSON/HTTP/数据库/线程池/事务选型 "JDK 1.8、FastJSON 唯一、OkHttp3 统一、DalManager.of() 访问、TransactionTemplate 事务"
agent-workflow.md 开发流程顺序、设计文档要求、评审门禁、按需加载 "PRD → 设计 → 评审 → 编码 → 自检,一步都不能跳"
java-code-style.md 包结构、类命名、Lombok 使用、异常处理 "类名见名知义、Lombok 优先、异常不吞不裸抛"
java-testing.md 测试框架、Mock 策略、覆盖率 "JUnit 5 + Mockito、DalManager 必须 mockStatic、覆盖率 ≥ 95%"

团队约定:PR Review 时,Reviewer 有权直接拒绝违反 Rules 层的代码,不需要额外讨论理由。


第二层:Skills — 标准操作手册(按场景触发)

定位:当遇到特定开发场景时,AI Agent 按需加载对应的操作手册,确保产出符合规范。

团队执行要求:以下场景必须触发对应的 Skill,不得"凭感觉"写代码:

场景 加载哪个 Skill 它告诉你什么
收到 PRD 要开发 prd-to-code.md 从 PRD 到交付的完整 7 步流程,每步读什么文档、产出什么
需要全流程编排 flow-orchestration.md 流程的失败处理、重试策略、断点恢复机制
设计文档写好了 design-review.md 7 个维度逐项评审,通过后才准写代码
要对接新供应商 add-vendor-adapter.md 适配器三件套怎么写:InputConvertor → HttpResultParser → PortResultConvertor
要加新的数据库表 add-entity-mapper.md Entity → Mapper → Manager → XML → 单测,7 步按序走
要加新的 API 接口 add-api-endpoint.md Controller 和 SOA Service 两种暴露方式怎么选
提交前检查文档 doc-gardening.md 扫描所有 .md 的元信息,发现过期/无主/草稿文档
交付前治理巡检 auto-governance.md 读构建/测试/Linter 客观结果,自动修复简单问题,生成治理报告

团队约定:提交 PR 时,Commit Message 中注明触发了哪些 Skill(如 feat: 新增百行适配器 [prd-to-code, add-vendor-adapter]),方便 Reviewer 追溯。


第三层:Wiki — 项目知识库(人机共读)

定位:项目的"大脑",存放架构、规范、设计文档。AI Agent 和团队成员都从这里获取上下文。

团队执行要求:以下知识库文档需保持与代码同步,每次变更后同步更新:

架构知识(团队需要了解"系统长什么样")
文档 团队用途 维护责任
overview.md 新人入职第一份阅读材料,了解系统整体架构 架构变更时同步更新
boundaries.md 写代码前确认"这个类该放哪个模块",依赖方向是否合规 模块调整时同步更新
code-assets.md 设计新功能时先查这里:有哪些基类/接口可以复用,避免重复造轮子 新增基类/接口时同步更新
data-flow.md 理解同步/异步/文件三种数据流转路径,设计功能时参考 流转路径变更时同步更新
编码规范(团队需要知道"代码怎么写")
文档 团队用途 维护责任
README.md 规范总入口,快速定位到具体规范
naming.md 包/类/方法/变量/数据库五类命名标准
error-handling.md 异常怎么抛、错误码怎么定、事务怎么回滚
testing.md 测试怎么写、Mock 怎么做、覆盖率多少达标
logging.md 日志用什么框架、traceId 怎么传、敏感信息怎么脱敏
linter-rules.md 35 条 Linter 自动检查规则,报错消息含"问题→修复→文档"三要素 新增禁止规则时同步更新
功能设计文档(团队需要知道"这个功能怎么设计的")
文档 团队用途
_template.md 所有设计文档的标准模板,新增功能必须基于此模板
feature-sync-single-request.md 同步单笔请求的设计参考
feature-async-batch-sharding.md 异步批量分片的设计参考
feature-vendor-adapter.md 供应商适配器框架设计参考
feature-rate-limiting.md 限流方案设计参考
feature-scheduler-framework.md 调度框架设计参考
feature-trace-propagation.md traceId 传播方案参考
feature-high-concurrency-query.md 高并发查询设计参考(PRD 全流程实战案例)
feature-automation-layer.md 自动化层设计,自我验证与自我修复能力
参考资料(团队需要知道"参考资料在哪")
文档 团队用途
prd-template.md 写 PRD 的标准模板,所有人按此格式提需求
prd-high-Single-request.md 一份完整的 PRD 示例,学习正确写法
error-codes.md 错误码登记表,新增错误码必须在此登记
迭代计划(团队需要知道"当前在做什么")
文档 团队用途
current-sprint.md 当前 Sprint 任务看板
backlog.md 未来迭代待办池

第四层:Changes — 变更管理(每次变更必须走)

定位:确保每次代码变更可追溯、影响可控、交付有标准。

团队执行要求:每个 PR 必须完成以下 3 项变更管理动作:

动作 对应文档 什么时候做
变更前做影响分析 impact-analysis.md 写代码之前,分析改了哪些模块、影响范围多大
变更后登记错误码/API error-codes.md / api.spec.yaml 代码写完后同步更新
提交前逐项自检 pr-checklist.md PR 提交前,31 项清单逐条确认
变更记录写入 CHANGELOG.md PR 合并后记录变更历史

团队约定:PR 未完成自检清单的,Reviewer 有权直接 Request Changes。


二、PRD 驱动开发:团队标准工作流

流程全景图

开发者                        AI Agent                      文档体系
  │                              │                            │
  │  1. 提交 PRD                 │                            │
  │ ───────────────────────────▶ │                            │
  │                              │  2. 加载 AGENTS.md         │
  │                              │     + prd-template.md     │
  │                              │ ◀──────────────────────── │
  │                              │  3. 加载 boundaries.md    │
  │                              │     + impact-analysis.md  │
  │                              │ ◀──────────────────────── │
  │                              │  4. 加载设计模板           │
  │                              │     + data-flow.md        │
  │                              │  5. 生成设计文档 (draft)    │
  │                              │ ────────────────────────▶ │
  │                              │  6. 加载 design-review     │
  │                              │ ◀──────────────────────── │
  │  7. 评审报告 + 设计摘要       │                            │
  │ ◀──────────────────────────  │                            │
  │                              │                            │
  │  8. 人工确认「通过」          │                            │
  │ ───────────────────────────▶ │                            │
  │                              │  9. 加载 add-*.md skill   │
  │                              │ ◀──────────────────────── │
  │                              │  10. 生成代码 + 测试        │
  │                              │  11. 同步文档              │
  │                              │ ────────────────────────▶ │
  │                              │  12. 加载 pr-checklist    │
  │                              │ ◀──────────────────────── │
  │  13. 自检结果 + 交付          │                            │
  │ ◀──────────────────────────  │                            │

各步骤详解

Step 0:环境检查与工作区隔离(开始前 5 分钟)

谁做:AI Agent 自动执行

做什么

  • 检查 JDK 1.8 / Maven 3.6+ / Git 是否就绪
  • 创建 Git Worktree 隔离工作区,避免污染主分支
  • 校验 PRD 完整性,缺失章节则暂停等待补充

团队约定:环境不通过则阻断流程,不允许"先写着回头再修环境"。


Step 1:PRD 解析(理解需求)

谁做:AI Agent 加载文档,开发者确认解析结果

读什么

文档 为什么读
AGENTS.md 了解项目技术栈基线,确保不跑偏
prd-template.md 对照模板结构化解析需求
code-assets.md 查看有哪些基类可以复用,避免重复造轮子

产出:需求解析摘要,标记缺失信息为"待补充"。


Step 2:影响分析(确定改动范围)

谁做:AI Agent 分析,开发者确认影响范围

读什么

文档 为什么读
boundaries.md 确认功能该放哪个模块、依赖方向是否合规
impact-analysis.md 用影响分析模板,输出模块影响矩阵

产出:影响分析报告——改哪些模块、新增哪些文件、修改哪些文件、数据库是否变更、配置是否变更、有哪些回归风险。


Step 3:技术设计文档生成(写设计)

谁做:AI Agent 基于模板生成,开发者审阅

读什么

文档 为什么读
_template.md 设计文档标准模板,保证格式统一
data-flow.md 参考数据流转路径,确保设计符合系统流转模式
feature-*.md(1~2 个相似的) 参考已有功能设计,保持一致性

产出docs/design/feature-{功能名}.md,状态标记为 draft,包含目标、范围、分层设计、数据库约束、API 约定、测试要求、风险对策。


Step 4:设计评审(人工确认门禁 — 全流程唯一的人工卡点)

谁做:AI Agent 执行 7 维度评审,开发者做最终决策

读什么

文档 为什么读
design-review.md 7 维度评审检查清单

评审 7 维度

维度 检什么 不通过的典型问题
架构合规 模块归属对不对、依赖方向对不对 把供应商代码写进了 business 层
类设计 基类复用对不对、注解规范不对 没继承已有的 BasePortTrigger
数据库 表名前缀对不对、标准字段全不全 漏了 create_time / update_time
API 路径风格对不对、错误码登记没有 API 路径不符合 /api/v1/ 规范
测试方案 覆盖场景全不全、Mock 策略对不对 只测了正常路径没测异常路径
配置文档 Nacos 配置加没有、文档更新标注没有 忘了在 design 文档标注需要新增的配置项
风险评估 技术风险有没有、回归风险有没有 大表加索引没评估锁表风险

门禁规则

  • 开发者确认「通过」→ 设计文档 status 改为 active,继续 Step 5
  • 开发者要求修改 → 修复后重新评审
  • 开发者要求重新设计 → 回到 Step 3

禁止在未获得开发者确认前自动进入代码生成阶段。


Step 5:代码生成(按规范写代码)

谁做:AI Agent 按依赖方向自底向上生成,开发者验证

触发什么 Skill

如果 PRD 要求 加载这个 Skill
新增数据库表 add-entity-mapper.md
新增供应商对接 add-vendor-adapter.md
新增 API 接口 add-api-endpoint.md

代码生成顺序(严格遵守,不可乱序):

dal 层 → business 层 → ext 层 → app 层 → runner/soa 层 → 测试代码

关键约束(违反即返工):

  • 每个类必须有中文注释 + @author
  • JSON 用 FastJSON,HTTP 用 OkHttp3
  • 数据库用 DalManager.of(),不用 @Autowired 注入 Mapper
  • 事务用 TransactionTemplate,不用 @Transactional
  • 必须同步生成单元测试,覆盖率 ≥ 95%

Step 6:配置与文档同步(代码写完了别忘更新文档)

谁做:AI Agent 自动同步

读什么

文档 同步什么
error-codes.md 新增的错误码登记
api.spec.yaml 新增/修改的 API 定义
CHANGELOG.md 变更记录

同步清单

改了什么 必须同步更新
新增错误码 error-codes.md + CodeEnum.java
新增 API api.spec.yaml
新增功能 feature-.md(status → active)+ CHANGELOG.md |
改了模块结构 boundaries.md
改了数据流转 data-flow.md

Step 7:交付前自检(最后一道关卡)

谁做:AI Agent 逐项自检 + 自动治理巡检,开发者确认交付

读什么

文档 做什么
pr-checklist.md 31 项自检清单逐条确认
auto-governance.md 读构建/测试/Linter 客观结果,自动修复简单问题
doc-gardening.md 扫描文档健康度(过期/无主/草稿检测)

自检 5 维度

维度 检什么
规则合规 依赖方向、日志、注入、Entity 注解、JSON、HTTP、数据库、线程池、事务、限流、traceId、配置
代码质量 类注释、方法注释、空 catch、异常日志格式、import、单文件行数
测试检查 JUnit 5 + Mockito、命名、覆盖场景、Mock 策略、无外部依赖
文档同步 错误码、API、设计文档 status、last_updated、CHANGELOG
提交规范 commit message 格式、PR 粒度、Git hooks

团队约定:自检全通过后方可交付,任一项不通过则修复后重新自检。


三、团队执行约定总结

约定 内容 执行方式
PRD 驱动 所有新功能必须从 PRD 开始,禁止"直接写代码" 开发者提交 PRD → AI Agent 执行 7 步流程
设计先行 代码生成前必须有设计文档,且通过评审 Step 3 产出 draft 设计 → Step 4 评审门禁
人工卡点 设计评审是全流程唯一的人工确认点,其他步骤 AI 自动执行 开发者确认「通过」后方可写代码
Rules 不可违反 4 个 Rules 文件定义的技术约束是红线 Reviewer 有权直接拒绝违规代码
文档同步 代码变更必须同步更新受影响的文档 Step 6 文档同步清单
交付前自检 PR 提交前必须完成 31 项自检 + 自动治理巡检 Step 7 自检全通过方可交付
文档元信息 所有 .md 文件头部必须有 YAML front matter doc-gardening 定期扫描
Linter 三要素 Linter 报错消息含"问题→修复→文档"三要素 AI Agent 看到报错可自动修复

一句话总结:Rules 层画红线,Skills 层给手册,Wiki 层供知识,Changes 层管变更。PRD 进来走 7 步,中间人工卡一次,最后自检通过才交付。

Q:没有现成 Skill 时怎么办

根据上面的总结,在PRD 驱动开发中:团队标准工作流中的第9步,若开发的是新功能模块, 不存在现成的skill使用,那么应该怎么搞呢

先看现状:现有 3 个 Skill 覆盖了什么

Skill 覆盖场景
add-entity-mapper.md 新增数据库表(Entity → Mapper → Manager → XML)
add-vendor-adapter.md 新增供应商对接(InputConvertor → HttpResultParser → PortResultConvertor)
add-api-endpoint.md 新增对外接口(Controller / SOA Service)

如果 PRD 要求的是这三类之外的功能(比如新增调度任务、新增事件处理器、新增缓存策略等),确实没有现成 Skill 可加载。

答案:四道防线兜底,不存在"无人指导"的情况

即使没有匹配的 Skill,AI Agent 依然有足够的上下文来正确生成代码,因为体系设计了四道防线:


防线一:设计文档本身就是"临时 Skill"

Step 3 产出的 docs/design/feature-{功能名}.md 已经包含了完整的分层设计:

目标 → 范围 → 分层设计 → 数据库约束 → API 约定 → 配置项 → 测试要求 → 风险对策

Step 4 评审通过后,这份设计文档就是代码生成的"操作手册"。AI Agent 按照 Step 5 的通用代码生成顺序执行即可:

dal 层 → business 层 → ext 层 → app 层 → runner/soa 层 → 测试代码

prd-to-code.md 中 Step 5 的原文也说明了这一点:

按以下顺序生成代码(严格遵守 Rules 层全部规则)

也就是说,Skill 是锦上添花,不是必需品。没有 Skill 时,设计文档 + Rules 层约束 + 通用生成顺序就足够了。


防线二:code-assets.md 的决策树告诉你"继承谁"

code-assets.md 第 9 节有一个完整的基类选择决策树,覆盖了超出现有 Skill 范围的场景:

PRD 需要新增什么?
│
├─ 新增数据库表/字段 → 参考 add-entity-mapper skill
├─ 新增供应商适配器 → 参考 add-vendor-adapter skill
├─ 新增 SOA 服务接口 → 参考 add-api-endpoint skill
│
├─ 新增调度任务           ← 没有现成 Skill,但决策树告诉你:
│  ├─ 上下文工厂 → 继承 BaseSchedulerCxtFactory
│  ├─ 调度上下文 → 继承 BaseScheduleContext
│  ├─ 调度配置 → 继承 BaseSchedulerConfig
│  └─ 触发器 → 实现 Trigger 接口
│
├─ 新增 REST Controller → 参考 add-api-endpoint.md 场景一
│
└─ 新增事件处理           ← 没有现成 Skill,但决策树告诉你:
   └─ 实现 EventHandler<C, E>

即使没有专门的 Skill,Agent 通过这个决策树也能准确知道该继承哪个基类、实现哪个接口。


防线三:Rules 层始终约束代码质量

无论有没有 Skill,4 个 Rules 文件始终生效:

Rules 文件 保证什么
always-on.md 技术栈不跑偏、依赖方向不违反、JSON/HTTP/数据库/事务选型正确
agent-workflow.md 流程不跳步、设计文档必须有、评审门禁不跳过
java-code-style.md 包结构对、类命名对、Lombok 用对、异常处理对
java-testing.md 测试框架对、Mock 策略对、覆盖率达标

防线四:Step 4 设计评审 + Step 7 交付自检兜底
  • Step 4 评审:7 维度评审会检查架构合规性、类设计合理性,如果设计有问题,在这里就会被拦下来
  • Step 5.5 即时编译:代码写完立刻编译,编译不过不准往下走
  • Step 7 自检:31 项 PR 自检清单 + 自动治理巡检,Linter 35 条规则自动检查

但这还不够:团队应该建立"Skill 沉淀机制"

四道防线能保证代码质量不出问题,但如果同类型功能反复开发,每次都靠设计文档指导就太低效了。团队的执行约定应该是:

第一次做新类型功能         第二次做同类型功能
    │                         │
    ▼                         ▼
靠设计文档 + 决策树走完    加载沉淀下来的 Skill
    │                         │
    └───── 沉淀 ──────────────┘
          创建新 Skill

具体做法

时机 动作 谁做
新类型功能首次开发完成、自检通过后 将本次开发过程中的模式提炼成 .qoder/skills/add-{模式名}.md 开发者 + AI Agent 协作
Skill 创建后 更新 code-assets.md 决策树,标注"参考 add-{模式名} skill" AI Agent 自动
Skill 创建后 更新 AGENTS.md 快速导航表和 prd-to-code.md Step 5 的按需加载表 AI Agent 自动

举个例子:假设团队第一次要新增一个调度任务类型的模块,没有现成 Skill,流程如下:

  1. Step 3:设计文档中写清楚需要继承 BaseSchedulerCxtFactoryBaseScheduleContext 等
  2. Step 4:评审确认架构正确
  3. Step 5:按设计文档 + code-assets.md 决策树生成代码,Rules 层保证质量
  4. Step 7:自检通过,交付
  5. 沉淀:创建 .qoder/skills/add-scheduler-task.md,把这次的模式记录下来
  6. 下次:再做调度任务时,直接加载 add-scheduler-task.md,效率翻倍

团队约定

约定 内容
Skill 不是前提,是沉淀 没有现成 Skill 不阻断开发,靠设计文档 + 决策树 + Rules 兜底
首次开发必须沉淀 新类型功能交付后,必须创建对应的 add-{模式名}.md Skill
决策树同步更新 新增 Skill 时必须同步更新 code-assets.md 的决策树
Skill 评审纳入设计评审 Step 4 评审时,如果发现是"无 Skill 的新模式",评审报告中需标注"建议沉淀 Skill"

一句话总结:没有 Skill 不影响开发,但开发完不沉淀 Skill 就是技术债。体系的设计是——第一次靠设计文档走通,之后靠 Skill 提效。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐