跳转到主要内容

编程智能体自主曲线:阅读是免费的,合并是事故级的

阅读需 2 分钟Tian PanTian Pan

关于编程智能体(coding agents)的讨论总是陷入二元对立:自主还是受监督,YOLO 模式还是手握方向盘,--dangerously-skip-permissions 还是“批准每一次按键”。这种构想框架本身就是一个范畴错误。编程智能体执行的并非“一个动作”,而是一系列动作,其成本跨越了至少七个数量级 —— 从读取文件(免费、可撤销、无副作用)到合并至主分支(不通过 revert PR 则不可逆),再到向集群发布二进制文件(六位数成本级别的事故)。用一个自主性开关来处理如此广泛的范围,就像是为停车场和高速公路设置统一的限速一样。

如果团队在发布“无所不能的智能体”时,没有将每个动作映射到其爆炸半径(blast radius),那么只需一个带有提示词注入风险的 GitHub 评论,就足以引发一场事后复盘 —— 事实上,我们已经有了这种失败模式的公开案例。Anthropic 的 Claude Code 安全审查、Google 的 Gemini CLI Action 以及 GitHub Copilot Agent 在 2026 年都被证实可以通过精心设计的 PR 标题和 issue 正文被劫持,研究人员将这种攻击模式命名为“评论并控制”(Comment and Control)。这些智能体并非在抽象意义上损坏了,而是因为自主性层级悄无声息地将低信任输入抹平为“一视同仁”,从而基于这些输入执行了高阶动作(如推送代码、开启 PR)。

接下来需要建立的规范是:针对每个动作的曲线、随层级扩展的闸门、与爆炸等级匹配的回滚速度,以及一个测试工具组合升级而非单一动作失败的评估程序。

没人画出来的动作阶梯

首先,列出编程智能体可以调用的每个工具,并为其标注爆炸半径等级。这个阶梯大致分为七个层级:

  • 第 0 层 —— 读取。 文件读取、grep、AST 查询、gh pr view、日志获取。无副作用,除了推理之外没有令牌(token)成本,无限可撤销。80% 的智能体流量应该留在这里。
  • 第 1 层 —— 沙盒计算。 在容器内运行测试,在临时虚拟机中执行一次性脚本,运行 linter。副作用存在但被隔离。成本:几分钟的 CI 时间。
  • 第 2 层 —— 本地分支写入。 在功能分支中编辑文件、创建提交(commit)、推送分支。受分支限制 —— 在人类采取行动推动其进展之前,影响是受限的。
  • 第 3 层 —— 可审查的提案。 开启 PR、留下评审评论、建议更改。触达人类,但由人类把控下一步。
  • 第 4 层 —— 主分支写入。 合并至主分支(main)、关闭 issue、修改 GitHub Actions、编辑 CODEOWNERS。涉及共享状态。只能通过 revert PR 撤销,且受 CI 的实际耗时(wall-clock latency)限制。
  • 第 5 层 —— 生产部署。 发布产物、运行数据库迁移、在生产环境中切换功能开关。客户可见。只能通过经过测试的回滚来撤销。
  • 第 6 层 —— 集群级。 向 N 个生产主机分发二进制文件、广播缓存失效、大规模 DNS 或路由更改,以及任何“一次性触达全球”的操作。恢复工作是以事故响应来衡量的,而非提交代码。

写下这些层级的目的不是为了记住这七个分类,而是为了强制提出一个问题:每个工具属于哪个层级,以及该层级对应的合适闸门是什么? 一个只提供全局“询问用户”开关的编程智能体平台,实际上已经用单一数值隐含地回答了这个问题,这意味着除了偶然情况外,它在矩阵的每个单元格上都答错了。

随层级扩展的审批闸门

单一的全局确认提示只是一种“审批演戏”。在对第 0 层文件读取进行了 50 次快速的“批准 / 批准 / 批准”点击后,当智能体到达第 4 层动作时,人类已经产生了反射性点击 —— 在关于“人在回路”(human-in-the-loop)系统的用户研究中,这种审批疲劳是主要的失败模式,而不是恶意绕过。解决方案是建立一个具备层级意识的闸门矩阵:

  • 第 0-1 层: 默认允许,无需提示。智能体以全速读取文件并运行测试,因为询问的成本高于出错的成本。
  • 第 2 层: 轻量级闸门 —— 在聊天界面显示简要 diff,除非人类在短时间内反对,否则智能体继续操作。智能体保持在工作流中。
  • 第 3 层: 显式批准,但审查的对象是 PR 本身,这已经是开发者熟悉的评审界面。复用现有工具,而不是发明新的弹窗。
  • 第 4 层: 硬闸门。人类必须主动点击,且智能体必须展示结构化的计划,包括受影响的文件、回滚命令以及推断的风险等级。这也是平台应该要求提供理由字符串(justification string)的地方,用以说明该动作正在履行哪个用户请求 —— 这对审计和捕捉由提示词注入引起的偏离都很有用。
  • 第 5-6 层: 带外(Out-of-band)审批。智能体不负责按下按钮。它暂存动作,在现有的变更管理系统中开启变更请求,并等待由人类发起的触发。智能体在执行瞬间绝不持有生产环境的凭据。

请注意,这并不是“到处都要更多审批”。第 0 层的流量应该加速,而不是减慢。闸门预算是一种有限的人类注意力资源,唯有将其花在出错成本巨大的地方,才是对这种资源的明智利用。Claude Code 在内置的安全工具白名单(文件读取、搜索、代码导航)与针对 Shell 命令和外部工具调用的转录分类器闸门之间所做的区分,就是这一理念的一个生产实践案例 —— 尽管对于一个正在进行实际合并操作的智能体来说,即使是这种双层划分也显得过于粗糙了。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 10 分钟

那些在本地通过但在 CI 中失败的编程智能体

编程智能体会继承你笔记本电脑中已配置好的环境,并提交在本地通过但在 CI 中失败的补丁。解决方案是建立仓库级的环境契约、进行预检一致性检查,并根据本地与 CI 的差异进行评分。

insider
ai-engineering
阅读需 8 分钟

合并队列成了新的瓶颈

编程代理让你的 PR 数量翻了一番,但合并过程仍像是在为人类打字速度设计的队列中缓慢爬行。本文将探讨合并队列拥堵背后的容量计算逻辑、为什么不稳定测试会在代理规模下产生连锁反应,以及分层预合并/合并后测试如何恢复吞吐量。

insider
ai-engineering
阅读需 11 分钟

你的编程智能体生成的那些人类已经不再阅读的 PR 描述

PR 描述模板在由人类编写且格式承载关键信号时非常有效。而智能体生成的描述消除了差异性,导致审查者产生习惯化心理,使得审查流程悄然绕过了它原本依赖的交付物。

insider
coding-agents
阅读需 8 分钟

让 Agent 先接警:AI 故障响应的信任阶梯

故障发生的最初 15 分钟通常是机械化的,Agent 可以在你解锁笔记本电脑前就完成这些工作。这套由叙述者、建议者、受控执行者、受限自动修复者组成的四层信任阶梯,配合基于证据的晋升和有范围的降级机制,比在经历一个糟糕的夜晚后彻底禁用自动化要明智得多。

insider
incident-response
阅读需 10 分钟

你的编程代理基于落后 Main 分支三周的代码版本重建的代码库索引

当编程代理的语义索引与其工作树发生漂移时,代理会基于已不存在的代码提出自信的主张 —— 而这种失败模式往往隐藏在看似平常的 PR 之中。

insider
ai-engineering