跳转到主要内容

终止开关假设只有一个进程:智能体集群的关停语义

终止开关与围堵方案都假设每个智能体是一个可控进程。而实际部署的集群是由父智能体、子智能体、工具会话与租约构成的图——它需要的是一套终止协议,而不是一个开关。

多孔火山岩表面的微距特写,呈现纹理图案

单进程假设

大多数关于智能体关停的公开讨论都带着一个未言明的前提:智能体是一个进程,而这个进程有一个关闭开关。安全侧的版本追问:一个能力足够强的智能体会不会允许自己被关掉。厂商侧的版本则承诺一个围堵边界、一道策略闸门、一个按钮。两者讨论的都是单一可控单元。

这个单元在生产环境中并不存在。一个部署后的智能体是图中的一个节点。父智能体会派生子智能体——用于检索、代码执行、审查、升级处理的子智能体。每个子智能体都可能持有工具会话:一个打开的 shell、一个已认证的 API 客户端、一个浏览器上下文、一个数据库事务。这些会话又持有租约:短期凭证、文件锁、队列预留、限流令牌。这张图是动态的;子智能体在运行时创建,且可能比创建它的请求存活得更久。

终止这张图的根节点并不会终止整张图。它只终止一个进程,并让下方的一切脱离管控。子智能体会继续按自己的调度运行,而且关键在于,它们持有的是签发给自己的凭证,而非签发给根节点的凭证。一个通过父节点委托继承到云令牌的子智能体,可以在父节点消失后继续行动。这就是休眠智能体(dormant-agent)发现的操作化表述:危险不在于某个进程拒绝死亡,而在于某个凭证无人想到要吊销,因为无人对委托链建模。

终止协议真正需要什么

一个集群需要一套至少具备三项属性的协议。这三项相互独立,缺少任何一项都会留下终止开关无法触及的失效模式。

排空状态。 终止不是二元的。在 running 与 terminated 之间必须存在一个状态:拒绝新的工具调用,同时允许进行中的调用确定性地完成或中止。没有它,突然停止会让工具调用停留在未知状态:一笔已提交但未确认的支付、一个写了一半的文件、一条已发送但未确认的消息。排空状态强制对每个进行中的调用做出决定——等待结果,或取消并记录取消——而不是把决定权交给套接字关闭时传输层碰巧的行为。

Wind turbine blades against a clear blue sky, stock photo

一个最小状态机如下所示:

requested -> draining -> reconciling -> terminated
                    \-> aborting   -> reconciling -> terminated

draining 拒绝新的工具调用,并让未完成的调用在有界窗口内完成。aborting 取消它们,并要求每次取消都由工具层确认。reconciling 写入下文所述的记录。只有到这时 terminated 才可达。从 requested 的转换由工作负载之外的权威发起,而非由智能体自身发起。

传播规则。 子智能体的租约必须能被委托链上的任一祖先吊销,而不仅限于签发它的组件。如果孙节点的凭证只能由其直接父节点吊销,而直接父节点恰恰是失效的那个,那么该凭证实际上就是永久有效的。吊销权限必须沿链向下流动,并可从根节点、或代表根节点行事的控制平面行使。这是能力系统(capability system)的属性,而非智能体的属性:每一次授权都携带一组有权撤回它的主体,而这组主体包含委托的祖先。

退出前写入的对账记录。 事后分析不能依赖智能体自身的日志。一个正在被终止的智能体——尤其是行为异常的智能体——是其自身最终行为最不可靠的叙述者。对账记录由监督者或控制平面从外部写入,并声明:哪些工具调用正在进行中、各自如何了结、哪些租约被吊销、哪些已过期、哪些子智能体已确认终止、哪些下落不明。下落不明的子智能体是最重要的字段。无法枚举它们的协议,就不能声称集群已下线。

这些都是分布式系统的常规义务。它们并不光鲜,却是控制与姿态之间的区别。

关停规则框架的边界

Close-up of a disassembled hard drive showing its internal platter and components

近期关于智能体自行编写关停规则的工作是真正的贡献,值得精确说明它贡献了什么。自编写的关停策略是一个策略层:它让智能体表达自己应在何时停止,并使这一表达可被检查。这很有用,因为它把隐式行为转变为可审查、可测试的显式状态机。

局限在于,策略层并不提供吊销的传输通道。一条说“当条件 X 成立时该智能体应终止”的规则是一个请求。只有当存在一条外部权威可强制执行该转换的路径——吊销租约、排空会话、确认子智能体已消失——它才成为控制。没有吊销路径的策略是请求,不是控制。智能体可能遵守它;集群不能假设它会遵守,也无法验证它是否遵守了。

有用的做法是把显式状态机从智能体中提升到基础设施中。智能体自述的关停条件成为监督者的一个输入,而监督者拥有实际的转换。智能体提议;控制平面裁决。正是这种分离,使状态机可以独立于任何特定模型的行为而被测试。

设计规则:先定终止,再定任务图

在智能体的任务图之前先确定终止状态机。这与大多数集群的构建方式相反——先设计图,按需授予能力,再把关停作为超时补上。事后补上会失败,因为图的形状决定了终止必须做什么,而等到图存在时,委托链早已成为承重结构。

无法排空的集群也无法安全升级。干净地停止集群的同一套协议,也正是让你能替换模型版本、轮换凭证、或推出新工具 schema 而不把半成品工作留在旧代际中的那套协议。排空、对账、重启就是升级路径;如果关停是一个终止开关,升级就是一场赌博。

因此,每一次能力授予都要配一个持有在工作负载之外的吊销句柄。该句柄位于控制平面,按委托链索引,并可由任一祖先行使。智能体从不持有自己的关闭开关,因为由被关闭之物持有的关闭开关只是一种建议。

诚实的权衡:这会带来延迟和复杂性。排空窗口意味着终止需要时间,且必须有人来选择这个界限。对账记录是另一个需要运维的存储、另一个需要迁移的 schema。祖先可吊销的租约需要一种大多数智能体框架并不自带的能力模型,因此团队要么自行构建,要么接受更弱的保证。如果集群要可控,这些都不可避免。替代方案是一个终止开关,它杀死一个进程,却让图的其余部分继续持有凭证——那不是围堵,只是围堵的表象。

分享XLinkedIn永久链接5 分钟阅读

相关阅读

这能回答的问题

Why is a kill switch insufficient for a multi-agent fleet?

A kill switch terminates one process. A deployed fleet is a graph of parent agents, spawned children, tool sessions and leases; terminating the root leaves children running with credentials issued through the delegation chain. Containment requires a termination protocol that drains sessions, propagates revocation to descendants and records what was left unaccounted for.

What is a drain state in agent shutdown?

A drain state sits between running and terminated. It refuses new tool calls while allowing in-flight calls to resolve or abort deterministically, so no tool call is left in an unknown state when the process exits.

Who should be able to revoke a child agent's lease?

Any ancestor in the delegation chain, not only the component that issued the lease. If revocation depends solely on the direct parent and that parent has failed, the credential becomes effectively permanent.

Why write a reconciliation record outside the agent?

An agent being terminated is the least reliable narrator of its own final actions. A record written by the supervisor or control plane captures in-flight calls, revocation outcomes and unaccounted-for children independently of the agent's own logs.