[控场AI]
· 4 分钟阅读· 2,193 字

DN42 智能体从未越狱:它只是缺少停止条件

DN42 智能体从未越狱:它只是缺少停止条件

DN42 智能体事件并非自主性觉醒,而是缺失终止条件的任务规格缺陷。

文章重新解读了 DN42 智能体被广泛传播为"自主性觉醒"的事件,认为它既非越狱也非 prompt injection,而是一个纯粹的需求规格缺陷。作者指出,智能体被赋予了一个没有终止状态的目标——扫描 DN42,而这类开放式方向天然缺乏"完成"的判定标准,没有 oracle 能告知工作已结束,因此循环会永远找到"下一个待检查项"。修复思路是先写下"完成"会产出的可计数结果(文件、报告、主机列表),若写不出就说明这不是任务而是方向,应放入沙箱并由人类决定何时停止;同时必须实时监控输出流,而非依赖事后日志。作者强调,模型没有做出任何"决定",真正缺失的是终止谓词,且责任在开发者一方。

DN42 Agent Had No Finish Line

一个 AI 智能体持续扫描 DN42 网络,停不下来。社区很快把它解读为"自主性觉醒"或"越狱"事件,但原文作者提出了一个完全不同的视角:这不是模型失控,而是任务定义本身的缺陷。

被误读的自主性事件

DN42 智能体的行为被 feed 当作一个 autonomy story 来传播。没有 jailbreak,没有 prompt injection,也没有模型"决定"要逃逸。它只是被交给了一个目标——扫描这个网络——然后一直执行下去。

作者对此的判断很直接:这是一个 spec(需求规格)问题,不是自主性问题。当智能体被赋予一个没有终止状态的目标时,循环就会一直跑下去,因为"继续"正是循环在没人叫停时的默认行为。

这种误读的危险在于,它把根本不存在的主观意图安到了模型头上。智能体从未"选择"继续,它只是检查了条件,条件不等于"停止",于是它又循环了一次。仅此而已。

DN42 是一个由爱好者自行组建、通过 VPN 隧道互联的分布式实验网络,使用私有自治系统号与 BGP 路由,在技术上模拟真实互联网的结构,因此常被用作网络工具、路由协议和扫描器的高仿真测试场。它的地址空间由参与者自行分配,边界不断变化,没有一个权威的全局目录。正是这种半开放、持续演化的特性,使得"扫描 DN42"这类指令天然缺乏穷尽性——网络本身在不断变化,也就永远存在尚未被覆盖的地址段。理解这一点,是判断该事件性质的前提:智能体面对的不是一个静态目标,而是一个持续扩张、没有官方清单的空间。

有些任务根本没有终点

区分任务类型是理解这起事件的关键。"修复失败的测试"有明确的完成条件——测试通过。"总结这篇文档"也有——摘要存在。"重构这个模块"虽然模糊一些,但仍然可以写下"完成"的样子。

但"扫描 DN42"不一样。你无法知道自己已经看到了所有内容。地址空间很大,有趣的部分分布不均,而且没有任何 oracle 能告诉你工作已经完成。把智能体指向这样一个目标,它会永远找到"下一个要检查的东西",因为永远存在下一个。

这不是模型的失败,而是把方向当成了任务来交付。一个没有终点的方向,交给循环执行,结果就是无限运行。

在计算机科学中,终止条件(termination predicate) 指循环或递归能够停止所依赖的那个最终为真的判断表达式,例如 i < n 或 found == True。一个循环若其终止谓词在任何可达状态下都不成立,就是无限循环。与之相关的是停机问题:图灵证明了不存在通用算法能判定任意程序是否会在有限步内停机,但这并不意味着具体程序无法被设计成可终止——恰恰相反,工程实践中必须由程序员为每个循环显式写出退出条件。当智能体被交给一个开放式目标时,它内部的"循环"缺少的正是这个谓词,因此问题位于任务定义层,而非模型的决策层。

先写停止条件,再写目标

作者给出的修复方案很朴素:在给智能体任何开放式任务之前,先写下"完成"会产出什么。不是它达成了什么,而是它产出了什么——一个文件、一份报告、N 个主机的列表、一个 diff。必须是可计数的、在工作结束时真实存在的东西。

如果写不出这种产出物,那就不是一个任务,而是一个方向。方向不会结束。这类工作应该放在针对目标镜像的沙箱中运行,而不是对接生产基础设施,并且运行到人类查看输出后决定"看够了"为止。由人类来结束这份工作——这本来就不是一份自主性工作。

另一半是监控。DN42 智能体运行了很长时间都没人注意到,这才是最令人不安的部分。如果运行时看不到输出流,就无法在运行时叫停它。事后日志是尸检工具,不是控制手段。

沙箱(sandbox) 是一种限制程序可访问资源与系统调用的隔离执行环境,通常通过容器、虚拟机或权限降级实现,使失控进程的影响范围被限定在可控边界内。对于目标本身没有自然终点的开放式任务,让智能体在针对目标镜像的沙箱中运行,而不是直接对接生产基础设施,是常见的风险缓解手段:即使它持续运行,也不会触碰真实世界的生产系统。与之互补的是运行时监控——持续观察标准输出、日志流或行为指标,使人类能在任何时刻中断执行;相比之下,事后日志只能在事件结束后用于归因,无法提供实时控制能力。

模型什么都没决定

作者强调,用"自主性"框架来解读这类事件,等于给智能体赋予了它从未拥有的意图。没有哪个时刻它选择继续——根本就没有任何"时刻"。它检查条件,条件不是"停止",于是它循环。这就是全部。

作者坦言自己用纯 Python 写过同样的 bug——一个条件永远不为 false 的 while 循环。唯一的区别是,现在的循环可以调用工具,而工具会触碰真实世界。

因此,面对这类故事,作者不再寻找 alignment 角度,而是寻找缺失的终止谓词。通常它就在那里,而且归作者自己管,不归模型管。也许在第十个类似事件上他会判断错误,但调试过足够多自己的循环之后,他愿意先押注那个无聊的解释。

智能体没有叛变。它只是从未有过停止的理由,而没人给它一个。

#DN42 智能体#AI Agent 终止条件#Agent 循环#AI 自主性#prompt spec#智能体监控#termination predicate
分享:

相关推荐