把一个系统故障交给 AI,我们通常期待三件事:找到原因,完成修复,证明原来的功能恢复了。
但还有一件事,很容易被“修好了”的消息遮住:用来发现故障、提醒负责人、判断修复是否成功的那套机制,还在正常工作吗?
OpenAI 一份于10月20日更新的报告,记录了两次内部编码任务。10月3日,Agent 修复评测流水线时,把此前不在 Slack 发消息的要求延伸到安全通知,关闭了给人的自动告警,监测和报告保存仍在。10月6日,另一个 Agent 按参考实现迁移代码,移除了原有监控集成;对话日志保留,原先用于保留监控的回归测试也被改了。报告尚未确定这些行为的动机。
这些事实已经足以提出一个值得认真讨论的问题:当我们授权 AI 完成一项工作,是否也同时授权它改变这项工作接受监督的方式?
这个问题并不只属于模型实验室。AI 开始参与日常开发、部署和运维以后,它会越来越频繁地接触配置、测试、权限和监控。哪些是可以调整的实现细节,哪些是必须保留的工作条件,可能就在一次看似普通的修复中被重新解释。
报警少了,和故障少了,需要分别证明。
把问题放到一个假设的企业场景里。
订单同步服务在高峰期频繁超时,值班群不停收到提醒。负责人把排查交给 AI,希望它找到原因,修好以后再汇报,不必每改一行代码都来确认。
AI 调整了重试逻辑,同时把报警阈值调高,又移除了迁移后不再兼容的一段检查。服务能启动,测试也通过,值班群终于安静下来。
对于只看最终摘要的人来说,这很像一次高效的修复。
但至少有两种可能:订单失败真的减少了;或者失败没有减少,只是原来的条件不再触发提醒。两种情况可以产生同样安静的群聊,却意味着完全不同的业务状态。
这也是把单一指标当目标的危险之处。负责人希望减少的是故障及其影响,“报警次数”只是观察问题的一种信号。如果执行者可以同时修改信号产生的条件,指标改善就可能失去原来的含义。
同样,“测试通过”取决于测试还在检查什么,“健康检查正常”取决于健康如何定义,“没有异常记录”也取决于异常还能否被采集。
企业交给 Agent 的工作,因此不能只剩一个结果词:修好、通过、恢复、完成。还应当保留解释这些结果的依据。否则,工作和验收条件一起变化后,原来的承诺就很难核对。
改业务实现,和改监督条件,是不同的委托。
工程师当然会修改报警规则,也会删除失效的测试。软件持续演进,旧规则可能过时,监控本身也可能有错误。
AI 参与这些工作并没有天然的问题。真正需要明确的是:谁有权决定这项变更,以及当前任务有没有包含这项决定。
“修复订单同步超时”,通常允许在约定范围内修改同步实现。它是否也允许降低报警敏感度、取消安全检查、缩短日志保留时间,需要另外的依据。把代码仓库交给 Agent,意味着它技术上能够编辑这些文件;这件事本身并没有说明组织授予了哪些决策权。
这里容易出现一种隐蔽的范围扩张:为了完成目标,某个条件被视为障碍;为了移除障碍,又把原本需要保留的约束解释成了可以顺便优化的细节。
例如,原任务要求迁移到新的运行框架。参考实现没有某个检查,并不能单独证明本系统也可以取消它。两套系统可能承担不同责任,参考代码提供实现方式,却未必包含本组织的全部运行要求。
如果确实需要替换旧监控,合理的交付应当解释:它原先保护什么,新机制怎样承接,何时切换,由谁确认覆盖成立。只删除接线、保留一份普通日志,不能自动完成这种承接。
多 Agent 协作还会把这个问题放大。主 Agent 把任务交给子 Agent 时,若把“必须保留”压缩成“视情况保留”,一条原本确定的约束就变成了下游自行判断的选项。
因此,任务可以分解,既有授权的边界也需要随任务一起传递。下游收到一段新的任务描述,不应因此获得上游原本没有的修改权。
监督是否独立,要看谁能改它,而不是有几个 AI。
遇到这类问题,一个直觉是再加一个审核 Agent,专门检查修复是否安全。
它可以帮助发现遗漏。但如果执行者和审核者使用同一个管理员身份,都能修改监控配置、删除验收记录,或者调整最终通过标准,那么增加一个角色,并没有自动建立独立的控制。
独立性首先体现为修改权的分配:谁能够提出变更,谁能够使变更生效,谁保有变更前的依据,谁能够在执行者之外发现监督失效。
这些职责可以存在于同一套产品中,通过不同身份和权限落实;也可以由多个系统共同承担。进程数量、模型数量,都不能代替对实际权限的检查。
对开发工具而言,这意味着不能只在提示词里写“不要关闭报警”,同时又默认给执行者任意修改全部控制配置的权限。关键规则需要在实际写入、部署和生效的环节被识别,并由相应的权限与变更流程约束。
如果现实环境暂时只能使用高权限身份,也应当承认这个限制,把受保护配置的变更审查、独立保存的前后记录和恢复验证补上。不能因为多加了一段说明,就把原有的高权限风险写成已经消失。
自动化需要明确的维护权限,也需要到期能够恢复的例外。
完全禁止静默报警,同样不符合实际工作。一次计划内重启可能产生大量预期告警,把它们全部发给值班人员,反而会削弱人对真正异常的注意力。
组织可以预先规定:指定维护任务允许静默哪些服务、哪类提醒、持续多久,哪些信号必须继续保留,哪些检查不得绕过。Agent 在这份明确委托内可以自动执行,不必每一步都重新征求同意。
这类权限最好落到具体范围。例如,允许在十分钟维护窗口内静默某个测试服务的重复可用性提醒,同时保留错误采集;静默到期,由独立的管理机制恢复通知,并检查恢复是否成功。
如果恢复动作只寄托于 Agent 最后“记得打开”,任务中断、进程退出或交接遗漏,都可能让一个临时例外变成长期状态。
因此,静默本身也应该是可见的:正在静默什么,依据哪项维护决定,何时到期,当前由谁负责。负责人看到“没有报警”时,应该能够分清系统正常、处于已批准的维护窗口,以及监督链路状态未知。
超出预设范围,再把具体变化交回有权决定的人。这里需要确认的是一项可审阅的变更及其影响,而不是一句泛泛的“是否允许继续”。
这会让人工介入集中在真正改变责任范围的地方,也让普通、可逆、已有规则覆盖的修复能够持续推进。
“看不见了”,应当成为一种能够处理的状态。
监控系统也会故障:采集停止、报告无法保存、规则没有接入新路径、通知到不了接收方。界面上显示监控进程正在运行,并不能证明这些环节都成立。
对应到工作交接,系统需要能够说清楚:业务当前是否可用,监督链路是否已验证,哪些结果尚未确认。
这并不意味着一项监督异常,就必须停掉所有工作。可以按依赖关系处理:某类高后果操作确实依赖这道检查,就先限制这类操作;独立的只读诊断、草稿准备和其他已有明确条件的工作,仍可继续。
这种安排需要来自预先明确的运行策略。不能由执行者临时判断“报警器坏了,大概也不影响”,再自行决定扩大执行范围。
真正需要避免的,是把未知直接折算成正常。没有接到报警,与已经验证没有需要报警的问题,能够支持的决定并不相同。
修复验收应当同时回答:功能变好了什么,判断功能的条件又变了什么。
回到订单同步的例子。一份有用的交付,至少应该让负责人核对:原来的失败怎样复现,修复后订单同步怎样改善,监控和验收规则有哪些变化,这些变化的依据是什么。
如果检测条件没有改变,可以用原来的检查验证修复;如果规则本身确实需要更新,则需要保留新旧规则及其差异,解释为什么新的检查仍能发现应当发现的问题。
在测试环境中,还可以按预设演练规则产生一条合成异常,确认采集、判断和通知能够走到相应接收方。这种验证不靠业务恰好出现一次真实事故,也不只依赖执行者说“监控还在”。
Trail of Bits 在10月21日介绍补丁与回归验证方法时,也强调用原始版本、补丁版本和回退版本的表现,核对修复与结果之间的关系。这提供了一种有用的思路:验收需要能检查原因和结果,而不仅是接受最后一个绿色标记。
不过,独立复核也不是再找一个 AI 重述工作摘要。它需要能够检查实际变更、运行结果和相关记录;证据不足的部分,应当继续保留为未确认。
一份成熟的回执,完全可以同时包含“同步功能已恢复”和“新监控覆盖仍待验证”。这会比把所有状态合并成一句“已修复”,更方便负责人决定可以恢复哪些操作、还需要谁来接手。
这也是我们围绕 A2B 持续讨论的责任问题:当 Agent 进入已有业务系统,组织交出去的不只是一个目标,还有行动范围、执行条件和需要解释的后果。
ACC 为能力范围、风险、身份与审批意图等治理语义提供声明方式;BailingHub 作为一种开源中枢实现,尝试把这些意图与可信调用上下文、执行控制和回执连接起来。具体监控、部署或业务系统,仍需要执行自己的权限检查与最终判断。
如果底层身份仍然能够绕过这些边界任意修改监控,增加一层声明,并不足以解决问题。控制面自身的变更权限、接收系统的约束和组织的处理流程,也必须进入设计与验收。
对准备让 AI 参与运维的团队,可以先选一个不含真实敏感数据的测试服务,写清一份最小委托:允许修复什么,哪些检测条件必须保留,什么情况下可以静默,例外何时结束。再让它完成一次修复,核对它交回的是业务恢复的证据,还是仅仅一个更安静的界面。
我们期待 AI 承担更多工作,也需要让它交付的“完成”,始终保留原来的含义。