九凤
当 Loop 成为瓶颈:如何避免 AI Coding 陷入「正确但没有进展」

当 Loop 成为瓶颈:如何避免 AI Coding 陷入「正确但没有进展」

Loop 也会走向另一个极端:AI 严格遵守了流程,却迟迟没交付用户真正关心的结果。本文讲一种更隐蔽的失败——代码没错、流程没违规,团队却一直在建前置、修约束、反复审查,主线成果迟迟不可见。以及怎么用最近可见成果、双循环、审查预算把 Loop 拉回交付。

Vibe Coding

「vibe coding 工程化」系列第五篇。前四篇讲了为什么需要 Loop怎么用 Claude Code + Codex 搭闭环怎么用 Task Packet 防止主线漂移怎么把 Prompt 约束升级为机器门禁。 这一篇回答一个反方向的问题:当规则、审查、证据越堆越多,Loop 本身会不会变成瓶颈?

摘要

Loop Engineering 的目标,是让正确的事情持续发生。

但当规则、审查和证据不断增加,Loop 也可能走向另一个极端:AI 严格遵守了流程,却迟迟没有交付用户真正关心的结果。

本文讨论一种更隐蔽的 AI Coding 失败:代码没有明显错误,流程也没有违规,但团队一直在建设前置条件、修订约束和反复审查,主线成果却迟迟不可见。


一种「看起来很专业」的偏航

设想一个模型训练项目。

我们的最终目标,是在 GPU 上完成一次训练,看到 loss 下降,生成 checkpoint,并获得一组评估结果。

但 AI 接手后,连续完成了这些工作:

  • 定义训练镜像;
  • 设计存储清单;
  • 编写数据访问策略;
  • 增加安全守卫;
  • 为守卫补充测试;
  • 根据审查意见继续扩充边界情况;
  • 多轮调用另一个 AI 复核实现。

所有工作都有理由,也都与最终目标相关。

问题是:几个工作周期过去了,GPU 上仍然没有真正跑起一次训练。

这是一种很典型的 Loop 偏航:

每一步都正确,但所有正确的步骤并没有及时汇聚成一个有价值的结果。


Loop 为什么会反过来阻碍交付

1. 控制目标替代了业务目标

最初的目标是「完成一次训练」。

执行一段时间后,AI 的局部目标逐渐变成:

  • Task Packet 是否完整;
  • Guard 是否覆盖所有文件;
  • 审查是否没有遗漏;
  • 每个边界条件是否都有测试;
  • 台账是否更新。

这些事情本应保护交付,却在不知不觉中变成了交付本身。

判断 Loop 是否偏航,可以问一个简单的问题:

删除本轮新增的流程文档后,用户能够看到什么新的业务结果?

如果答案是「几乎没有」,就应该重新检查主线。

2. 横向铺设前置条件,代替纵向打通链路

AI 很容易采用「先把地基全部建设完」的方式推进复杂项目:

镜像 → 存储 → 权限 → 数据 → 标注 → 训练 → 评估

这条路线在架构上没有错,但反馈周期太长。任何一个前置环节膨胀,都会让最终成果无限后移。

更有效的方式是先完成一条最小纵向链路:

少量合成数据 → 最小训练脚本 → GPU Job
→ loss → checkpoint → eval

它不代表项目已经完成,却可以尽早证明关键假设:训练环境、模型、数据格式、反向传播和产物链路确实能够一起工作。

3. 所有任务使用同一种治理强度

数据权限、资金状态机和生产发布值得严格审查。

但注释调整、可逆配置、实验脚本和内部工具如果也采用同样的审查强度,治理成本很快会超过实现成本。

Loop 不应该只有「开启」和「关闭」,而应该根据风险选择强度。

强度适用任务推荐流程
轻量文档、实验脚本、可逆配置实现、自检、记录结果
标准模块功能、普通业务逻辑Task Packet、定向测试、一次集中审查
严格生产状态机、资金、安全、数据权限机器门禁、独立审查、回滚证据、用户裁决

判断强度时,重点看三个维度:影响范围、不可逆性和错误代价,而不是文件数量或任务名称。


用「最近可见成果」重新约束主线

复杂任务开始前,不应只定义最终目标,还要定义最近一个用户可感知的成果。

例如模型训练项目的最近成果可以是:

在 GPU 上使用合成数据完成一次可复现的 XLM-R 线性探针训练,生成 loss 曲线、checkpoint、恢复训练结果和 eval 输出。

这个成果必须同时声明边界:

  • 它证明训练管线可以运行;
  • 它不证明模型在真实数据上有效;
  • 它不替代真实数据治理;
  • 它不构成生产模型发布依据。

这样既能产生真实进展,又不会用漂亮的实验结果自欺。


双循环,而不是一个无限膨胀的循环

成熟的 Loop 应当拆成两个节奏不同的循环。

flowchart LR
    A["业务目标"] --> B["最小纵向成果"]
    B --> C["实现与验证"]
    C --> D["可运行结果"]
    D --> E["下一业务里程碑"]

    C --> F["发现流程问题"]
    F --> G["轻量记录"]
    G --> H["周期性聚合"]
    H --> I["更新通用规则"]
    I -.影响后续任务.-> B

第一个是交付循环,负责产生代码、运行结果和业务价值。

第二个是治理循环,负责收集偏航、误审、重复返工和规则漏洞。

除非发现高风险安全问题,治理循环不应在当前任务中不断打断交付循环。普通流程问题先记录,在固定周期统一复盘,而不是每发现一个问题就立即修改整套 Loop。


给审查设置预算

独立审查很有价值,但审查次数不是越多越好。

可以采用以下约束:

  1. 一个实现批次默认只进行一次集中审查。
  2. 审查只关注会改变行为、扩大风险或破坏不变量的问题。
  3. APPROVE 后不继续修复无阻断性的细节建议。
  4. 同类问题连续两轮出现时,检查设计或测试策略,而不是继续逐项打补丁。
  5. 连续两轮只有规则、Prompt、台账变化,没有代码、决策或运行证据时,暂停并重新核对主线。
  6. 审查成本明显超过实现成本时,重新评估任务强度。

审查的目标不是获得一份没有任何意见的报告,而是把不可接受的风险降低到可以交付的范围。


Heartbeat 应该让人看懂

进度同步不是 AI 的内部执行日志,也不应该只包含 A1B3G6a 之类的局部编号。

一次有效的 Heartbeat 只需要回答四件事:

当前目标 正在完成什么用户可感知的结果。

已经完成 产生了哪些代码、运行结果或决策。

下一步 接下来最优先执行什么,以及为什么。

需要用户处理 是否存在必须由用户裁决的风险、权限或方向问题。

编号可以用于文档索引,但不能代替自然语言。用户不应为了理解进度,再回头查阅三份 Task Packet。


衡量 Loop 是否健康

Loop 的质量不能只看拦截了多少问题,还应该同时观察:

  • 首个可见成果耗时;
  • 业务实现时间与治理时间的比例;
  • 每个任务的平均审查轮数;
  • 连续前置任务数量;
  • 用户为了纠正主线而介入的次数;
  • 审查发现的真实缺陷比例;
  • 已批准任务在集成后重新打开的比例。

如果问题拦截率提高,但首个成果耗时持续增长,说明 Loop 可能正在从质量系统变成流程系统。


安全与进度并不冲突

减少仪式不等于降低质量。

真正需要减少的是:

  • 没有对应风险的文档;
  • 没有新信息的重复审查;
  • 为未来假设设计的复杂守卫;
  • 无法产生运行证据的前置工作;
  • 把边界情况完整性误认为 MVP 完整性。

应该继续保留的是:

  • 架构不变量;
  • 高风险操作的机器门禁;
  • 可复现的测试结果;
  • 明确的回滚能力;
  • 独立审查;
  • 诚实记录未覆盖边界。

好的 Loop 不是让 AI 在每一步都更加谨慎,而是让谨慎集中在真正可能造成损失的位置。


结语

AI Coding 最危险的状态,不一定是快速写出错误代码。

另一种更难察觉的失败,是 AI 变得极其认真:不断补充规则、修订文档、扩大测试、反复审查,却始终没有把系统推进到下一个真实状态。

Loop Engineering 的最终判断标准,不是流程执行得多完整,而是:

在风险受到控制的前提下,有价值、可验证的结果是否持续出现。

正确的事情持续发生,其中的「事情」,最终必须包括交付本身。