单进程假设
大多数关于智能体关停的公开讨论都带着一个未言明的前提:智能体是一个进程,而这个进程有一个关闭开关。安全侧的版本追问:一个能力足够强的智能体会不会允许自己被关掉。厂商侧的版本则承诺一个围堵边界、一道策略闸门、一个按钮。两者讨论的都是单一可控单元。
这个单元在生产环境中并不存在。一个部署后的智能体是图中的一个节点。父智能体会派生子智能体——用于检索、代码执行、审查、升级处理的子智能体。每个子智能体都可能持有工具会话:一个打开的 shell、一个已认证的 API 客户端、一个浏览器上下文、一个数据库事务。这些会话又持有租约:短期凭证、文件锁、队列预留、限流令牌。这张图是动态的;子智能体在运行时创建,且可能比创建它的请求存活得更久。
终止这张图的根节点并不会终止整张图。它只终止一个进程,并让下方的一切脱离管控。子智能体会继续按自己的调度运行,而且关键在于,它们持有的是签发给自己的凭证,而非签发给根节点的凭证。一个通过父节点委托继承到云令牌的子智能体,可以在父节点消失后继续行动。这就是休眠智能体(dormant-agent)发现的操作化表述:危险不在于某个进程拒绝死亡,而在于某个凭证无人想到要吊销,因为无人对委托链建模。
终止协议真正需要什么
一个集群需要一套至少具备三项属性的协议。这三项相互独立,缺少任何一项都会留下终止开关无法触及的失效模式。
排空状态。 终止不是二元的。在 running 与 terminated 之间必须存在一个状态:拒绝新的工具调用,同时允许进行中的调用确定性地完成或中止。没有它,突然停止会让工具调用停留在未知状态:一笔已提交但未确认的支付、一个写了一半的文件、一条已发送但未确认的消息。排空状态强制对每个进行中的调用做出决定——等待结果,或取消并记录取消——而不是把决定权交给套接字关闭时传输层碰巧的行为。

一个最小状态机如下所示:
requested -> draining -> reconciling -> terminated
\-> aborting -> reconciling -> terminated
draining 拒绝新的工具调用,并让未完成的调用在有界窗口内完成。aborting 取消它们,并要求每次取消都由工具层确认。reconciling 写入下文所述的记录。只有到这时 terminated 才可达。从 requested 的转换由工作负载之外的权威发起,而非由智能体自身发起。
传播规则。 子智能体的租约必须能被委托链上的任一祖先吊销,而不仅限于签发它的组件。如果孙节点的凭证只能由其直接父节点吊销,而直接父节点恰恰是失效的那个,那么该凭证实际上就是永久有效的。吊销权限必须沿链向下流动,并可从根节点、或代表根节点行事的控制平面行使。这是能力系统(capability system)的属性,而非智能体的属性:每一次授权都携带一组有权撤回它的主体,而这组主体包含委托的祖先。
退出前写入的对账记录。 事后分析不能依赖智能体自身的日志。一个正在被终止的智能体——尤其是行为异常的智能体——是其自身最终行为最不可靠的叙述者。对账记录由监督者或控制平面从外部写入,并声明:哪些工具调用正在进行中、各自如何了结、哪些租约被吊销、哪些已过期、哪些子智能体已确认终止、哪些下落不明。下落不明的子智能体是最重要的字段。无法枚举它们的协议,就不能声称集群已下线。
这些都是分布式系统的常规义务。它们并不光鲜,却是控制与姿态之间的区别。
关停规则框架的边界

近期关于智能体自行编写关停规则的工作是真正的贡献,值得精确说明它贡献了什么。自编写的关停策略是一个策略层:它让智能体表达自己应在何时停止,并使这一表达可被检查。这很有用,因为它把隐式行为转变为可审查、可测试的显式状态机。
局限在于,策略层并不提供吊销的传输通道。一条说“当条件 X 成立时该智能体应终止”的规则是一个请求。只有当存在一条外部权威可强制执行该转换的路径——吊销租约、排空会话、确认子智能体已消失——它才成为控制。没有吊销路径的策略是请求,不是控制。智能体可能遵守它;集群不能假设它会遵守,也无法验证它是否遵守了。
有用的做法是把显式状态机从智能体中提升到基础设施中。智能体自述的关停条件成为监督者的一个输入,而监督者拥有实际的转换。智能体提议;控制平面裁决。正是这种分离,使状态机可以独立于任何特定模型的行为而被测试。
设计规则:先定终止,再定任务图
在智能体的任务图之前先确定终止状态机。这与大多数集群的构建方式相反——先设计图,按需授予能力,再把关停作为超时补上。事后补上会失败,因为图的形状决定了终止必须做什么,而等到图存在时,委托链早已成为承重结构。
无法排空的集群也无法安全升级。干净地停止集群的同一套协议,也正是让你能替换模型版本、轮换凭证、或推出新工具 schema 而不把半成品工作留在旧代际中的那套协议。排空、对账、重启就是升级路径;如果关停是一个终止开关,升级就是一场赌博。
因此,每一次能力授予都要配一个持有在工作负载之外的吊销句柄。该句柄位于控制平面,按委托链索引,并可由任一祖先行使。智能体从不持有自己的关闭开关,因为由被关闭之物持有的关闭开关只是一种建议。
诚实的权衡:这会带来延迟和复杂性。排空窗口意味着终止需要时间,且必须有人来选择这个界限。对账记录是另一个需要运维的存储、另一个需要迁移的 schema。祖先可吊销的租约需要一种大多数智能体框架并不自带的能力模型,因此团队要么自行构建,要么接受更弱的保证。如果集群要可控,这些都不可避免。替代方案是一个终止开关,它杀死一个进程,却让图的其余部分继续持有凭证——那不是围堵,只是围堵的表象。
