最佳实践 · 案例复盘

AI Coding 提效的天花板是信任,不是速度 —— 一个工业级 Harness 的落地复盘

当 AI 代码率冲到 95% 之后,提效收益却被返工和审查吃掉了。一支风险敏感业务团队的工程同学给出的答案是:把"约束"做成可验证的物理对象。本文是这套实践的脱敏复盘 —— 看一个完整的 AI Coding 信任体系怎么从需求一路咬合到发布。

作者 栗子 更新于 2026 年 5 月 约 18 分钟
CHAPTER A

真正的瓶颈:不是 AI 写得慢,是 AI 写完不敢上线

本文素材来自一支风险敏感业务团队(资金链路 + 状态机 + 多领域规则)2026 年的内部工程复盘,公开版本保留方法论与架构骨架、隐去内部专有系统名、规则代号与具体度量数字。重点不是"他们用了哪个工具",而是"他们对 AI Coding 的失败模式给出了什么结构化的回应"。

一个反直觉的观察

当一支团队把 AI 代码率从「占比 30%」推到「占比 95%」之后,他们没有得到对应的提效曲线。复盘后他们看到的现象是:

AI 编码阶段省下来的时间,几乎被代码审查阶段的反复返工抵消掉了。返工率高达 30%。问题不是 AI 写得慢,是 AI 写完不放心上线。

更关键的发现:返工的根因不在代码质量本身,而在约束没说清、没传递、没验证。AI 在约束缺失的地方,会用训练数据里的"普遍模式"自动填充 —— 而这些"普遍模式"恰恰不适用于他们这种特殊领域:

  • "退款金额不能超过原始支付总额" —— 通用场景下 AI 会假设成立,但在部分退款 + 优惠券抵扣的真实业务里成立不了。
  • "金额必须用 BigDecimal" —— AI 经常默认用 Double,跑得通但精度会出问题。
  • "状态机转换必须满足 X 前置条件" —— AI 在长对话里会"忘记"早期给出的约束。

三个架构级转变

团队对失败模式的归纳,最后浓缩成三个转向 —— 每一个都是从"事后补救"换成"系统级前置":

传统做法为什么不够新做法
事后代码审查问题在需求 / 设计阶段已经埋入,到 CR 时修复成本指数级增长约束前置:在需求与技术方案阶段就把约束说清,编码前就有显性的红线
AI 编码时实时执行约束上下文截断、约束遗忘、优先级覆盖是 AI 的固有缺陷 —— 实时约束不可靠验证契约:每条约束都自带"验证方式",编码后逐条验证而不是编码时实时检查
人工审查作为门禁人工审查速度跟不上 AI 产出速度,大量风险区根本看不过来自动化门禁:3 道门禁全覆盖,机器判定为主、人工介入为辅

这三句话背后有一个共同的洞察:AI Coding 的风险防控不能依赖 AI 本身,而要依赖外部系统。

类比一下自动驾驶:你不会指望司机实时纠正自己的判断错误,而会依赖传感器 + 规则引擎 + 安全气囊组成的多层防护。AI Coding 的逻辑是一样的 —— 提效靠 AI,但防错靠 Harness。

CHAPTER B

四要素 × 两层防御:把约束做成可验证的物理对象

四要素:约束的物理载体

团队把 Harness Engineering 的理念落地为四个互相咬合的核心要素 —— 不是文档清单,是有结构、可索引、能被流程消费的物理对象:

需求输入 → [Wiki 提供上下文] → [Rules 注入约束] → [Skills 执行流程] → [Changes 记录轨迹]
              ↑                  ↑                    ↑                    ↑
        "系统长这样"        "这些红线不能碰"       "按这个流程做"      "做了什么一目了然"

① Rules · 不可妥协的红线

规则是 Harness 的"宪法" —— 不随需求变化的稳定约束(Invariant Constraints),数百条规则按严重等级分层。所有 Skill 的检查逻辑、门禁的准出条件、验证契约的判定标准,全部来源于 Rules:

等级定位处置方式典型示例
L0 卡点红灯,必须阻断流程立即中止企业级编码红线 + 业务规则 + 领域规则(如交易、结算、库存)
L1 警告黄灯,需人工确认不阻断,但须留痕过度实现 / 约束遗忘
L2 提示绿灯,参考建议可选执行日志使用 SLF4J + 结构化输出
资金专项 L0资金安全硬卡点不可降级、不可申诉资金链路变更必须对账验证

这个等级表里最重要的不是"L0 / L1 / L2",而是"处置语义"分层:L0 是机器可判定的硬卡点;L1 需要人工介入;L2 / L3 是可降级的建议。让自动化和人工审查各司其职 —— 机器负责确定性判定,人负责模糊性判断。

⚙️ 一条规则只要"不能被机械化执行",在 Agent 流程里就是无效约束。规则不是越多越好。

② Skills · 可复用的标准化流程

Skills 是 Harness 的"执行引擎"。覆盖从需求到发布的完整链路,每个 Skill 封装一个完整的质量保障流程:

技能模块所属阶段核心能力规则规模关联门禁
需求质量评价独立(任意阶段可调)多维度结构化评价数十条G1
需求风险识别防范准备多阶段漏斗 + 多风险域 + FMEA百余条G1
技术方案与约束注入防范准备多阶段漏斗生产,约束直出双格式百余条G1
任务拆解与约束绑定防范准备约束解析 → 任务拆解 → AI 执行适配数十条G1
代码审查与全维验证验收验证多维度全维审查 + 约束合规 + AI 偏差检测近百条G2
发布风险评估验收验证多分组评估 + Go/No-Go 决策十余条G3

关键在 Skill 之间的数据流 —— 不是简单的调用链,而是结构化产物的"接力赛":

  • 需求风险识别 产出风险标签 → 注入技术方案的风险感知
  • 技术方案 产出约束清单(双格式)→ 供任务拆解绑定
  • 任务拆解 产出约束索引表 → 供代码审查逐条验证
  • 代码审查 产出约束合规报告 → 供发布风险评估聚合决策
  • 发布风险评估 产出 Go/No-Go 决策 → 最终门禁判定

每一步约束都在"增值"而不是"传递" —— 每个阶段都为约束增加新维度,最后形成一条可追溯的数据闭环。

③ Wiki · AI 的业务上下文

Wiki 告诉 AI "系统长什么样",而非让 AI 从代码里反向猜测。包含链路梳理、数据模型、业务流程、技术规范四类知识。和 AGENTS.md 的"地图而非手册"理念一致 —— 顶层索引(100 行内)+ 按需加载详细文档,避免上下文窗口过载。

三件事的分工很清楚:Rules 告诉 AI"不能做什么",Skills 告诉 AI"按什么流程做",Wiki 告诉 AI"系统是什么样" —— 三者共同构成 AI 的完整上下文。

④ Changes · 全链路可追溯

每个需求从分析到部署的全过程文档,构成完整追溯链:需求追溯(任务 → PRD 编号)/ 约束追溯(约束 → 任务绑定 → 代码实现)/ 变更追溯(文件 → 变更类型 → 关联任务)/ 决策追溯(设计决策 → 多要素记录卡)。

四条追溯链交织成一张完整的变更网络:从任何节点(需求 / 约束 / 文件 / 决策)出发,都能追踪到所有关联节点。这不是"事后补文档",而是"流程中自动记录"。

两层防御:约束的运行机制

四要素是"弹药",两层防御才是"作战体系" —— 它决定约束如何被注入、传递和验证:

防御层时机核心问题关键动作产出
防范准备层编码前"AI 拿到的输入是否足够好?"需求澄清 → 方案设计 → 约束注入 → 任务拆解约束索引表 + 执行序列
验收验证层编码后"AI 的输出是否满足约束?"全维代码审查 → 约束合规验证 → 发布风险评估Go/No-Go 决策

这里有一个关键的工程取舍:中间不设"编码时约束层"。因为 AI 编码时根本无法可靠地实时执行约束 —— 上下文截断、约束遗忘、优先级覆盖是固有缺陷。所以团队的选择是:把"约束执行"从不可靠的实时检查,换成可靠的批量验证。

这和传统软件工程"编译时检查 vs 运行时检查"的取舍是同一个味道 —— 在 AI 场景下,"编码后验证"比"编码时实时检查"更可靠。

CHAPTER C

验证契约:让"约束覆盖率"从空话变成可追踪的数字

什么是验证契约

验证契约(Verification Contract)的核心思想是:每条约束都必须有一个明确的验证方式 —— 怎么验证、什么时候验证、谁来验证、预期结果是什么。没有验证方式的约束就是"无效约束",因为它无法被机械化检查。

每条约束都会被结构化为一份"契约",字段如下:

字段说明示例
约束 ID对应技术方案阶段输出的约束编号C-001
约束描述约束的具体内容(自然语言)"涉及金额的字段类型必须为 BigDecimal"
约束等级L0 / L1 / L2 / L3L0
关联任务绑定的编码任务编号T3
验证方式静态扫描 / 单元测试 / 代码审查 / 运行时静态扫描 + 代码审查
验证阶段G1 / G2 / G3G2
预期结果验证通过的判定条件金额字段类型为 BigDecimal
验证状态待验证 / 已通过 / 未通过待验证

这本质上是契约式设计(Design by Contract)在 AI Coding 场景的落地。传统契约式设计定义的是模块间的契约;这里定义的是"约束定义方"和"约束验证方"之间的契约 —— 定义方承诺约束可验证,验证方承诺逐条核对。

约束的完整生命周期

一条约束从诞生到被验证,经历四个阶段,没有任何一个阶段允许"丢":

阶段角色关键产出
① 约束提出(技术方案阶段)"生产车间"约束清单(双格式:人读 + JSON)
② 约束绑定(任务拆解阶段)"按需分发"约束索引表 —— 每个任务只看到与自己相关的约束子集
③ 约束验证(代码审查阶段)"逐条核对"约束合规报告 —— 每条约束有明确的通过/不通过判定
④ 约束确认(发布风险评估阶段)"聚合决策"Go/No-Go 决策 —— L0 违规数量、约束覆盖率、AI 偏差程度

关键创新是阶段 ① 的"约束直出双格式":每条约束同时输出 Human 可读格式(自然语言)和结构化 JSON 格式(含 ID、等级、验证方式、预期结果等 10 个字段)。这种双格式设计确保约束从"文档"到"可执行检查项"的无损传递 —— 下游模块直接消费 JSON,不依赖人去重新理解文档。

度量指标:从空话到数字

有了验证契约,"约束覆盖率 ≥ 95%" 这种过去听起来像空话的指标,第一次变成了可度量、可追踪的数字:

指标定义目标度量时机
验证契约完整率有验证契约的约束数 / 总约束数100%G1 门禁
验证契约消费率已验证的契约数 / 总契约数100%G2 门禁
约束覆盖率已落地的约束数 / 总约束数≥ 95%代码审查阶段
AI 偏差率AI 偏离约束的次数 / 总约束数L0 = 0代码审查阶段

这是从"希望 AI 遵守约束"到"验证 AI 遵守了约束"的范式转变 —— 也是整套 Harness 最核心的"信任工程"。

CHAPTER D

三道门禁:质量关卡,不是橡皮图章

3 道门禁全程卡点

团队的设计原则是"不信任、要验证"。三道门禁分别守在三个关键卡口,每一道都是自动化判定 + 模式感知:

门禁位置核心准出阻断行为模式差异
G1 设计准入技术方案 → 编码L0 = 0,评分 ≥ 85,约束完备性,资金安全通过不允许进入编码hotfix 跳过 / standard 全量 / major +人工审计
G2 审查准入代码审查 → 发布CR 风险 L0 = 0,约束覆盖率 ≥ 95%,AI 偏差 L0 = 0,评分 ≥ 85不允许提交发布hotfix 简化 / standard 全量 / major +双人审计
G3 发布准入发布 → 线上影响范围可控,风险评估 ≤ 中,评分 ≥ 85不允许上线hotfix 评估 / standard 全量 / major +灰度校验

每道门禁守的角度都不一样:

  • G1 验证"输入是否完备" —— 约束是否都提取了、技术方案是否覆盖了关键风险、资金安全是否评估了。
  • G2 验证"输出是否合规" —— 代码是否满足了所有约束、是否有 AI 幻觉、约束覆盖率是否达标。
  • G3 验证"发布是否安全" —— 影响范围是否可控、风险是否在可接受范围内。

三道门都是自动化判定,不是人工审批 —— 这是关键。AI 一天可以生成数千行代码,但人审一天只能扫数百行;如果门禁是人工的,门禁就会成为瓶颈,最终被绕过。让机器根据规则和评分公式自动判定,每条代码都过全量检查,而不是抽检。

统一评分公式

整个 Harness 用同一套评分语义在三道门之间做一致性判定:

方式一:Score = 100 - (L0 × 10) - (L1 × 5) - (L2 × 2) - (L3 × 0.5)
方式二:Score = SUM(weight × result) / SUM(weight) × 100
分数区间判定行动
≥ 85通过进入下一阶段
70 – 84有条件通过限期修复,问题自动同步到测试侧
< 70不通过大幅重构后重新申请
L0 > 0不通过修复所有 L0 后重新申请

评分公式的核心思想是问题越严重,扣分越重 —— 一个 L0 扣 10 分、一个 L3 只扣 0.5 分。这不是简单加权,而是反映了不同等级问题的"修复成本和风险量级"差异。

变更规模自适应:门禁不能扼杀效率

团队对一个常见担忧"门禁太重会扼杀效率"给出了一个简单回答 —— 变更规模自适应:

变更规模判定条件门禁流程
微小变更< 50 行,非资金 / 状态 / 安全相关仅过代码审查快速验证
标准变更50 – 500 行,或涉及业务逻辑完整门禁流程
重大变更资金 / 状态 / 核心链路,或 > 500 行加强版门禁(增加人工评审)

这设计成立的关键是资金安全 L0 不可申诉 —— 不管在哪一档变更里,资金类 L0 都不可降级、不可豁免。这不是"太严格",而是 ROI 决策:一条资金规则的 L0 准出,可能防止的就是一个真实生产故障。

⚙️ 三道门禁的真正价值,不是"挡得严",而是"挡得准" —— 该挡的(资金、状态机、L0 缺陷)一行不让过;不必挡的(小补丁、文案修改)走快速通道。

CHAPTER E

六个核心模块:从需求质量到 AI 偏差检测

整个 Harness 落地为六个核心 Skill 模块,每个解决 AI Coding 流程中一类具体问题。本章是把整套流程"展开来看"。

E.1 需求风险识别 + 技术方案与约束注入

在最新架构里,需求风险识别已经从独立模块合并为技术方案的 Phase 0(需求澄清与风险识别)。合并的动机很直接:风险识别和方案设计不该割裂 —— 风险信号应该直接驱动约束的提取,而不是先识别风险、再写方案、再手动对齐。

这个模块用了一个多阶段漏斗式生产流程,每个阶段都有 Gate,上一阶段未通过不能进入下一阶段:

Phase 0: 需求澄清与风险识别
    ↓ Gate: 需求无歧义,风险标签已标注
    ↓ 交互式追问:最多 3 轮 / 维度,15 轮总计,必须等待用户回答
Phase 1: 需求承接与场景识别
    ↓ Gate: 目标可度量,场景识别完成
Phase 2: 架构设计与约束注入
    ↓ Gate: 架构图覆盖所有交互系统
Phase 2.5: 设计决策追问  ★关键阶段
    ↓ Gate: 关键决策有替代方案
    ↓ 交互式追问:最多 2 轮 / 维度,10 轮总计,决策链 7 要素必须记录
Phase 3: 详细设计与约束注入
    ↓ Gate: 接口契约完整
Phase 4: 三板斧与容灾设计
    ↓ Gate: 三板斧判定
Phase 5: 约束汇聚与一致性验证
    ↓ Gate: 约束覆盖率 = 100%
Phase 6: 质量验收与输出
    ↓ Gate: G1 门禁通过

Phase 0 的"Socratic 五维追问"

这不是简单地问"有什么遗漏吗",而是 5 个维度的递进式追问:

维度追问目标典型问题
意图真实目的"这个功能要解决的根因是什么?去掉它能达成同样目标吗?"
完整性遗漏检查"如果并发请求量 ×10、数据量 ×100,系统行为会怎样?"
歧义多义消除"这里的'正常处理'具体指什么?在不同角色看来含义相同吗?"
约束隐性约束显式化"这个金额计算有哪些被假设但没被写出来的规则?"
角色多视角对抗"攻击者会怎么利用这个功能?运维怎么排查异常?"

追问过程是交互式的 —— AI 提出问题后必须暂停等待用户回答,不能自问自答。最多 3 轮 / 维度,15 轮总计。这一阶段产出的风险标签(如 has_fund_pattern / has_state_change / has_business_logic)会贯穿后续所有阶段,驱动代码审查阶段哪些维度被条件激活。

Phase 2.5 的"设计决策追问"

实践里发现很多技术方案的问题不是"设计有问题",而是"决策有问题" —— 决策过程没有记录,替代方案没有考虑,触发条件和可逆性没有说明。所以 Phase 2.5 强制每个关键决策必须记录决策链 7 要素:

决策 ID / 背景 / 选项 / 理由 / 取舍 / 触发条件 / 可逆性

同样是交互式追问,AI 不能自己回答自己的问题 —— 每个决策都必须等待用户在选项之间做选择。这就是这个模块和"审查型"模块最大的不同:它是"生产型"的,不只检查方案好不好,而是引导你生成完整的方案。

E.2 任务拆解与约束绑定

技术方案产出的是一份平铺的约束清单,但 AI 编码是按任务执行的。如果约束清单没有绑定到具体任务,AI 在编码时要么面对整个清单(上下文过载)要么完全看不到约束(约束遗忘)。

这个模块的解法是三步走:

  1. 约束解析:把约束清单解析为可执行的结构化数据 —— ID、描述、等级、验证方式。
  2. 任务拆解:把需求拆解为文件级粒度的编码任务,每个任务明确:要改哪些文件、改什么内容、预期产出。
  3. 约束绑定:为每个任务精确匹配它相关的约束子集,形成"约束索引表" —— AI 在编码任务 T3 时只需要关注 T3 相关的约束。

"按需绑定"是这一步的关键 —— 它有效缓解了上下文窗口的压力,也让审查阶段有一份"按任务索引的清单"可以直接对照逐条核对。

E.3 代码审查与全维验证

这是验收层最核心的模块,合并了多个审查维度的近百条规则。设计理念是聚焦式审查 —— 不是泛泛检查所有维度,而是根据技术方案阶段的风险标签条件激活对应维度:

维度核心关注条件激活
代码规范命名、结构、注释规范始终
约束合规验证契约逐条验证始终
资金安全金额计算、幂等、对账检测到资金模式
状态并发状态机、并发控制、分布式锁检测到状态变更
安全漏洞SQL 注入、XSS、越权、数据泄露始终
性能可靠性能基线、限流、降级始终
AI 偏差幻觉 API、过度实现、约束遗忘始终
业务逻辑交易 / 结算 / 售后 / 库存 / 价格 等领域检测到业务逻辑
架构风险循环依赖、接口兼容检测到架构变更
需求-设计-代码对齐3 层对齐验证始终

这里最有差异化的是 AI 偏差专项检测 —— 传统代码审查不会去检查"AI 幻觉 API"或"AI 过度实现",但这恰恰是 AI 生成代码的独特缺陷模式:

风险类型等级核心检查逻辑解决的问题
幻觉 APIL0代码中调用的 API 必须在项目依赖中存在AI 编造了不存在的库或方法
过度实现L1代码实现范围不得超出任务定义AI 超出需求自行添加功能
约束遗忘L1代码须覆盖当前任务绑定的所有约束AI 忽略了明确给出的约束
AI 偏差放大L0AI 代码与设计偏差程度超过阈值AI 实现偏离了设计方案

传统审查假设"代码是人写的" —— 人会犯逻辑错误、漏边界条件,但不会编造一个不存在的 API。AI 会。AI 会调用一个看起来很像但实际不存在的库方法,会实现需求里根本没提到的功能,会在长对话里遗忘早期给出的约束 —— 这些用传统维度去查几乎查不出来。

E.4 发布风险评估

代码审查通过 ≠ 可以安全发布。发布风险评估关注的是"发布行为"本身的风险:变更影响范围有多大?是否有灰度策略?回滚方案是否就绪?资金安全专项是否通过?

这一步采用多分组评估 + Go/No-Go 决策模式:每个分组独立评估风险等级,最终聚合为整体风险判断。关键设计是"影响分析内化" —— 不再依赖人工填写影响范围,而是通过变更追溯链自动推断。

到这一步,验证契约的闭环就关上了:技术方案定义约束 → 任务拆解绑定约束 → 代码审查验证约束 → 发布风险评估确认约束。四阶段形成完整闭环,没有任何一个阶段允许约束"消失"。

E.5 需求质量评价:独立的源头守门人

"PRD 质量参差不齐"是 AI Coding 的"源头污染" —— 低质量 PRD 直接导致 AI 产出低质量代码。这不是 AI 的问题,是输入的问题。

需求质量评价模块用多维度结构化评价覆盖完整性、一致性、可测试性、边界条件等维度。它的关键设计是"独立调用":不绑定任何特定阶段,任何时间点都可被开发者主动调用。这让它能扮演整个体系的"前置过滤器" —— 在所有约束工作开始之前,先确保输入质量。

六个模块的关系:E.1 / E.2 是"把约束说清",E.3 / E.4 是"把约束验完",E.5 是"不让坏输入进来"。三个动作各自独立,组合起来才是完整的信任工程。

CHAPTER F

编排系统:让整个流程自动化、可恢复、可追溯

六个 Skill 模块如果各跑各的,就只是六个孤立的工具。让它们咬合成一台"机器",需要的是编排系统 —— 这是整套 Harness 的"神经中枢"。

F.1 三层编排架构

编排不是简单的脚本调度器,而是一个有状态、可恢复、上下文感知的多 Agent 工作流引擎。它的核心设计原则是"关注点分离":

  • 路由层:只管"走哪条路" —— 根据需求类型 / 变更规模 / 是否涉及资金,决定走哪种执行模式。
  • 规划层:只管"怎么走" —— 把模式翻译为具体的 Phase 序列、Skill 调用顺序、门禁检查点。
  • 执行层:只管"走好每一步" —— 调度具体的 Skill 执行、维护状态、处理失败重试。

三层之间通过结构化数据(路由决策、交付计划、状态文件)传递信息,而不是通过隐式状态。这是让整个系统"可调试、可恢复、可追溯"的根。

F.2 三种执行模式

路由层根据多维度评估自动选择执行模式 —— 不是简单按行数判断:

模式适用场景耗时执行范围门禁策略
hotfixP0 / P1 线上紧急修复15 – 30 min仅代码审查 → 发布评估G1 跳过,G2 / G3 advisory(建议性,不阻断)
standard常规迭代需求1 – 3 hr技术方案 → 任务拆解 → 代码审查 → 发布评估全量门禁,自动判定
major资金 / 状态机 / 架构重构3 – 8 hr全链路 + 增强门禁全量 + 隔离 Agent + 人工审计 + 资金二元判定

路由依据是 task_type / change_size / involves_fund / involves_state_machine / is_architecture_refactor 的组合判断 —— 越靠近资金 / 状态机 / 架构核心,门禁越重。

F.3 Agent 角色分离:不能"既当运动员又当裁判"

这是整个编排系统里最关键的一条设计决策:

Agent 角色职责会话隔离能否修改源码
architect(架构师)执行技术方案 + 任务拆解可选可以
code_reviewer(审查者)执行代码审查 + 全维验证必须隔离禁止
release_analyst(发布风险评估师)执行发布风险评估必须隔离禁止
gate_auditor(门禁审计)执行门禁判定必须隔离禁止

执行者可以写代码、写测试;审查者只能读代码、写审查报告;门禁审计者只读规则和产出物。这种隔离确保审查者在独立的会话中工作 —— 看不到执行者的内部推理过程,只能看到最终的代码和文档。

这是把"人类组织里的回避制度"翻译到 Agent 流程里 —— "既当运动员又当裁判"在多 Agent 架构里同样必须被禁止。

F.4 TDD + CQG 编码流:让 AI 编码也有质量门

编码阶段(Phase 1.5)采用一套严格的工作流。这不是传统意义上的"先写测试再写代码",而是用 TDD 作为约束落地的验证机制:

RED 阶段:基于约束清单编写测试用例
    ↓ 确认测试编译通过但执行失败
指纹锁定:SHA-256 锁定测试文件,执行者无法修改
    ↓ 锁定后测试文件不可变
GREEN 阶段:编写实现代码,使所有测试通过
    ↓ 遇到资金安全约束冲突时必须暂停
CQG(代码质量门):fmt → lint → build → test 四步硬检查
    ↓ 任何一步失败即阻断
进入代码审查阶段

指纹锁定是这一步的关键创新 —— 测试文件一旦锁定,编码 Agent 就无法修改测试来"适应"实现。只有审查 Agent 才能解锁。这防止了 AI 为了通过测试而修改测试的"自欺"行为。

CQG 四步硬检查是代码进入审查阶段的前提:格式化 → 静态分析 → 编译通过 → 单元测试通过。任何一步失败都阻断流程,不允许"带病审查"。

F.5 Context Pack:上下文窗口的精准调度

AI 的上下文窗口是有限资源。Context Pack 解决的核心问题是:在每个阶段,只给 AI 看它需要看的内容,而不是把所有文档塞进去。

Context Pack来源 → 目标 AgentToken 预算核心内容
design_context_packPhase 1 → code_reviewer24 K技术方案、约束清单、风险标签
coding_context_packPhase 1.5 → Coding Agent16 K任务描述、约束索引、相关代码
review_context_packPhase 2 → release_analyst20 K代码审查报告、约束合规报告、AI 偏差检测
release_context_packPhase 3 → gate_auditor16 K发布风险评估、变更影响范围、门禁规则

关键创新是三级优先级管理:

  • P0 必传:约束清单、门禁规则、资金安全规则 —— 无论如何不能压缩。
  • P1 重要:技术方案核心章节、代码变更摘要 —— 空间允许时全量注入,空间不足时摘要。
  • P2 参考:Wiki 知识库、历史变更记录 —— 按需注入,空间不足时省略。

当上下文超出 Token 预算时,按三阶段压缩:结构化提取 → 摘要压缩 → 紧急截断。约束清单在三阶段压缩中始终不可压缩 —— 它是硬红线。

这和操作系统的虚拟内存管理是同一个设计思想 —— 按需加载,而非全量驻留。约束清单是"不可换出的内存页"。

F.6 状态机 + 断点续跑 + 可观测性

编排层内置完整的状态机,每个阶段的状态持久化到 state.json:

  • 状态:in_progress / completed / failed / paused
  • 检查点:phase-start → execute → interactive-waiting → gate-check → fix → phase-end
  • 事件:skill_started / skill_completed / gate_passed / gate_failed / fix_requested / fix_completed

中断后,Phase Runner 读取状态文件和心跳记录,自动生成恢复计划,经人工确认后从最近检查点继续执行 —— 无需从头开始。门禁判定失败后自动进入"修复循环"(最多 3 轮:修复 → 重跑 Skill → 重检门禁),3 轮用尽仍未通过则阶段失败、人工介入。

整个 AI Coding 过程的"可观测性"分三层:

  • Decision Log(decisions.json):路由决策、设计决策、门禁判定、修复策略、上下文压缩等所有关键决策。
  • Execution Trace(trace.jsonl):步骤级追踪,每个 Skill 内部的执行步骤和耗时。
  • Metrics(metrics.json):性能指标、Token 消耗、错误统计。

这让整个流程从"黑盒"变成"白盒" —— 出了问题可以追溯到是哪个决策、哪个步骤、哪个约束出了问题。

CHAPTER G

可迁移到你团队的 7 个工程范式

把上面这些细节折叠起来,下面这 7 条是从这套实践里能直接迁移到任何 AI Coding 团队的工程范式 —— 不依赖任何具体工具,只是一种工作方式上的取舍。

① 把"约束"做成可验证的物理对象,不是文档

很多团队的约束写在 PRD 注释、技术方案附录、Wiki 散页里 —— 这些都不是约束,是"愿望"。一条真正的约束至少要有:ID / 等级 / 验证方式 / 预期结果。如果它不能被机械化执行,在 Agent 流程里就是无效约束。

② 不在编码时实时检查约束,在编码后批量验证

AI 的上下文截断、约束遗忘、优先级覆盖是固有缺陷。让 AI 在编码时实时执行所有约束 = 把约束扔进黑盒。改成"编码后逐条验证" —— 就像类型检查从动态语言搬到了静态分析阶段,一个量级的可靠性差距。

③ 角色分离:执行者 ≠ 审查者

同一个 Agent 写代码 + 自评代码 = 又当运动员又当裁判,无效审查。让审查 Agent 在独立会话里工作,看不到执行者的内部推理过程,只看代码和文档。这条规则在多 Agent 系统里和人类组织一样重要。

④ 测试文件指纹锁定:禁止"修改测试来通过"

这是一个简单但效果惊人的小设计 —— 测试一旦写好就 SHA-256 锁定,编码 Agent 不能再改。它直接堵死了 AI 最常见的"自欺"路径:"实现写不出来,那就改测试。"

⑤ Context Pack 优先级管理:约束是不可换出的内存页

当 Token 预算紧张时,约束清单 / 门禁规则 / 资金安全规则一行都不能丢 —— 哪怕代价是把 Wiki 全部省略。这是一个看起来简单、但实操中经常踩坑的取舍:很多团队压缩上下文时第一反应是删约束,因为约束最长。结果就是 AI"看不见护栏"。

⑥ 门禁是自动化的,不是人工审批

AI 一天产数千行代码,人审一天扫数百行 —— 人工门禁就是瓶颈,最终被绕过。让规则和评分公式自动判定,每条代码全量过 → 这才是配得上 AI Coding 速度的门禁。同时配合"变更规模自适应" —— 小修小补走快速通道,核心变更走全量检查,门禁就不会成为效率的敌人。

⑦ AI 偏差专项检测:传统审查的盲区

幻觉 API、过度实现、约束遗忘、AI 偏差放大 —— 这四类是 AI 生成代码独有的缺陷模式,传统审查维度根本不会去查。任何打算把 AI 代码率推高的团队,都需要把这四类作为专门的审查维度独立出来 —— 否则 AI 写得越多,未被发现的"AI 特有缺陷"就越多。


把这 7 条放回到一句话里:

约束不是限制 AI,而是让 AI 可信;编排不是增加流程,而是让提效可持续。

AI Coding 的速度天花板,最终不是 AI 写得多快,而是团队敢让多少 AI 写的代码直接上线。这个差距就是"信任工程"要解决的问题。

← 返回最佳实践