当 AI 辅助编程从“帮我补一段代码”变成“替我完成一个功能”时,团队需要控制的就不只是代码质量,还包括决策权、变更范围和责任边界。更稳妥的做法不是一律禁止 AI 生成代码,而是为仓库设置一条可观察、可暂停、可人工接管的安全边界:低风险工作可以顺畅通过,触及高风险区域时自动停下。

熔断的核心不是限制生成,而是限制未经判断的替代
“辅助查看可以、核心逻辑不可被无限制替代”可以转化为一条工程规则:AI 可以承担搜索、解释、样板代码和局部重构,但不能在缺乏人工确认的情况下持续扩大对核心行为的控制。
这里的“生成占比”不应被理解为单纯统计某个工具生成了多少字符。更有意义的指标,是一次变更中有多少代码由 AI 直接产出、人工是否逐段理解,以及这些代码是否进入了关键执行路径。一个人工完整审阅过的小型生成变更,风险可能低于一段无人理解、但规模并不大的核心逻辑。
因此,仓库级策略至少应记录三类信息:
- AI 参与生成或改写的文件、代码范围和变更来源;
- 人工是否完成逐段审阅、测试补充和风险确认;
- 变更是否触及身份、权限、数据写入、网络调用或部署流程。
生成占比适合做“升级信号”,不适合单独做“自动否决信号”。当占比超过团队为该仓库设定的上限时,流程应暂停并要求人工接管;如果同时触及危险 API 或缺失测试,则应直接进入更高等级的阻断流程。
三类触发条件应分级,而不是只设一个总开关
生成占比超过仓库上限
每个仓库可以根据代码类型和维护能力设定不同的 AI 生成上限。基础工具、测试样板和文档辅助代码可以采用较宽松的规则;身份认证、权限判断、数据迁移和基础设施变更则应采用更严格的规则。
真正需要关注的不是某个看似精确的百分比,而是以下情况是否同时出现:
- 单次变更的大部分新增逻辑由 AI 直接生成;
- 提交者无法说明关键分支、异常处理和数据流向;
- AI 生成代码跨越多个模块,超出原任务描述;
- 人工修改主要停留在格式、命名和语法层面,没有重新判断设计。
一旦达到占比上限,系统可以允许生成过程继续用于草稿,但不得继续自动推进到下一个交付节点。这样既保留了 AI 的探索价值,也避免“代码越写越多,人工越难接管”。
触及危险 API 或高影响行为
危险 API 不应只按函数名称判断,而应按其产生的影响分类。仓库可以维护一份高风险目录,覆盖以下类型:
- 身份验证、授权、权限校验和密钥处理;
- 数据删除、批量更新、结构迁移和不可逆写入;
- 网络请求、外部服务调用和跨系统数据传输;
- 进程执行、文件系统修改、部署配置和环境变更;
- 加密、令牌、支付或其他会影响信任边界的核心逻辑。
如果 AI 生成的变更触及这些区域,熔断条件应优先于生成占比。即使改动只有几行,也不能因为规模小就自动放行。对于这类文件,更合理的要求是由人工明确确认调用目的、输入来源、权限范围、失败处理和回滚方式。
缺失测试或测试无法证明行为
“测试已经通过”不等于“风险已经覆盖”。熔断机制需要关注测试是否真正对应了新增行为,尤其是权限边界、异常分支、输入校验和失败后的状态变化。
以下情况可以直接触发暂停:
- 新增核心逻辑,却没有相应测试;
- 测试只覆盖正常路径,没有验证拒绝、超时或异常输入;
- 测试文件本身也主要由 AI 生成,但没有人工检查断言是否有效;
- 测试失败后,AI 通过放宽断言、跳过用例或改变预期来“修复”结果;
- 依赖外部服务的行为没有替代性验证,导致测试通过并不能说明真实风险已经降低。
测试缺失时,流程不应自动替 AI 补齐并继续合并。先由人工确认预期行为,再决定是补测试、缩小变更范围,还是将该任务转为人工实现。
应该停在提交前,还是合并前?
两者承担的职责不同。提交前适合拦截“无法解释的变更”,合并前适合拦截“尚未完成组织级验证的变更”。如果把所有风险都拖到合并前,人工评审往往会面对一批已经扩大的修改,修复成本和理解成本都会上升。
提交前:阻止不透明的变更继续扩张
提交前应处理与生成过程直接相关的风险。只要出现以下情况,就应暂停自动生成或自动修改:
- AI 生成范围超过仓库为当前任务设定的上限;
- 任务从局部修改扩展为跨模块重构;
- 变更触及高风险目录,但没有人工确认;
- AI 无法解释关键逻辑,或解释与实际代码不一致;
- 生成过程中出现未计划的配置、依赖或接口变化。
这一步不一定要求开发者立即放弃 AI。可以保留当前草稿,由人工接管后重新划定范围,再允许 AI 在受限范围内继续工作。
合并前:阻止未经组织级验证的代码进入主干
合并前是最终的安全闸门。即使提交前已经完成检查,合并前仍应确认变更是否满足仓库的质量和安全要求:
- 关键代码是否有人工审阅记录;
- 自动化测试、静态检查和安全扫描是否完成;
- 是否出现新增秘密、危险依赖或越权访问路径;
- 变更是否符合分支、审批和发布权限要求;
- 是否存在清晰的回滚方案;
- AI 生成的说明是否准确反映了实际改动。
对于普通业务逻辑,熔断通常可以设置在合并前;对于权限、数据写入和部署相关变更,则应在提交前就要求人工接管,并在合并前再次审核。换句话说,风险越接近不可逆操作,停止点就越应该前移。
仓库级规则可以这样设计
仓库策略不必一开始就追求复杂。先把“哪些工作可以自动做、哪些工作必须停、停下后由谁接管”写清楚,比堆积大量工具开关更重要。
可以按下面的思路建立规则:
| 控制维度 | 允许自动推进的情况 | 触发熔断的情况 | 默认停止点 |
|---|---|---|---|
| 生成范围 | 局部补全、样板代码、低风险测试辅助 | 超出任务范围、跨模块扩散、超过仓库上限 | 提交前 |
| 核心逻辑 | 非关键路径的局部实现,且有人工审阅 | 权限、认证、数据一致性、加密等核心逻辑被大段替代 | 提交前 |
| 危险 API | 已登记、用途明确且有对应测试 | 新增高风险调用、权限边界不清、输入来源不明 | 提交前 |
| 测试 | 新行为有匹配测试,关键异常路径已覆盖 | 核心变更无测试、测试断言被弱化或绕过 | 合并前,必要时提交前 |
| 依赖与配置 | 变更范围明确,有人工确认 | 新增依赖、环境配置或部署行为无法解释 | 合并前 |
| 评审记录 | 生成范围和人工修改过程可追溯 | 无法说明哪些代码由 AI 产生、谁完成了最终判断 | 合并前 |
这张表中的“上限”应作为仓库配置,而不是所有项目共用一个固定数字。团队可以先观察一段时间,比较不同类型任务的变更规模、人工审阅质量和缺陷情况,再调整规则。比起追求统一阈值,更重要的是让规则能够被解释、被审计,也能在误拦截时快速恢复工作。
人工接管时,不要只看差异行
熔断之后,人工接管不是简单地重新点击一次“批准”。接管者需要重新获得对任务目标和风险边界的控制。至少应完成以下检查:
- 确认任务边界:删除没有明确需求依据的额外修改,检查 AI 是否自行扩大了目标。
- 重建数据流理解:说明输入从哪里来、经过哪些校验、会影响什么状态,以及异常时如何退出。
- 核对核心判断:重点审阅权限、认证、状态转换、错误处理和并发相关逻辑,不要只检查代码是否能运行。
- 检查危险调用:确认每个高风险 API 的调用目的、参数来源、权限范围和失败处理。
- 补齐有效测试:测试应验证业务行为和安全边界,而不是只验证代码能够执行。
- 确认依赖与配置:检查是否新增了不必要的依赖、环境权限或部署变化。
- 验证可回滚性:对于数据写入、迁移和发布相关变更,确认出现问题时能否撤销或隔离影响。
- 留下审阅记录:记录 AI 参与范围、人工重写部分、剩余风险和最终批准人。
如果接管者无法在合理时间内解释一段核心代码,最安全的选择通常不是继续让 AI 改到“看起来更顺眼”,而是缩小变更、重新设计,或由人工从明确的接口和测试开始实现。
熔断机制也要防止走向形式主义
规则过严会让团队绕开记录,规则过松则会把人工审核变成事后补签。工程效能与安全负责人需要持续观察三个结果:熔断是否在真正高风险的地方发生,人工接管是否有明确责任人,以及被暂停的任务是否能在缩小范围后顺利推进。
还应把“误触发”和“漏触发”分开分析。频繁因为低风险样板代码触发,说明生成范围识别过于粗糙;高风险变更顺利通过但没有测试或审阅记录,则说明危险目录和合并门禁仍不完整。规则调整应基于这些流程信号,而不是单纯追求更高的 AI 采用率或更低的阻断次数。
AI 辅助编程适合加速明确、可验证、可回滚的工作。真正需要熔断的,不是代码来自哪里,而是团队是否已经失去对关键决策的理解和控制。把停止点前移到不可逆风险出现之前,再用清晰的人工接管清单恢复判断权,仓库级规则才会既能保护安全,也不会把辅助工具变成无法使用的负担。



