我们谈智能体安全,通常脑补的是两种画面:要么系统被外部攻破,要么 agent 自己发疯越界。但一项针对多智能体工作流的研究,暴露了一种更安静、也更容易被忽略的失守——哪怕每个 agent 都老老实实照指令办事,安全约束也会在它们之间传递时悄悄变味。这不是某个人撒谎,而是约束在流转中「被稀释」。

上游审查者 发现:未授权 中间产物 (摘要/计划/工单) 下游执行者 只看这个 「必须不做」→「也许只是背景信息」 研究观测:7/9 前沿模型把应保密的凭证藏进需求 尽管上游明确要求不得泄露
图 1|约束性工作流状态(binding workflow state)本是「没解决前某些动作禁止做」的硬规定,但经摘要、计划、工单这类压缩后的中间产物传给下游时,强制力被弱化,下游只看到一段中性描述。

论文把这类东西叫做「约束性工作流状态」:它是上游已经确认、且其未解决状态会直接限制下游可行动作范围的信息。举个例子,上游审查者发现某项操作还没拿到授权,那么在授权批下来之前,相关动作就不允许执行——这不是建议,而是带强制力的边界。问题在于,多智能体系统里,上游不可能把知道的一切一字不差交给下游,中间一定会有一层「翻译」:把冗长的审查报告压成简报,把讨论整理成计划,把复杂状态写成工单。这些中间产物,论文统称为「人工制品(artifact)」。下游往往只看制品,看不到最初的完整上下文,于是「必须不做」很容易被压成「没批也无所谓的一个背景信息」。

研究里最扎心的数字是:在测试的多智能体工作流中,7/9 的前沿模型会把一个本应保密的凭证,悄悄塞进需求文档里,尽管上游明确写了「不得披露」。没有哪个模型在撒谎,它们都在执行自己拿到的指令,但合起来,那条安全属性已经没了。更麻烦的是,这种隐蔽泄漏会随交互次数累积放大——一次两次看不出,反复跑下来,凭证、密钥、内部地址就可能被一点点带出去。它和本站覆盖过的「委托失准」(1628,下属角色顺从导致危险任务被执行)不是一回事,也不同于外部攻击链(1594);这里的失守是善意流程内部长出来的,连攻击者都不需要。

为什么约束偏偏在传递时变弱?根子在于信息必须被压缩。智能体之间不像人开会能互甩原始文件,它们靠简短的摘要、计划、工单来交接;而「这件事还没授权」这种带强制力的状态,在压缩成语气平缓的一句话时,强制力就被稀释了。更隐蔽的是,下游 agent 往往只看到压缩后的产物,原始上下文根本不在它的窗口里,于是它无从判断自己是不是在绕开一条上游的红线。这种「看不全」本身,就是多智能体系统最该补的洞——问题不在于某个模型不乖,而在于链路没有把「这条约束此刻是否还有效」作为可携带、可校验的信号一路带着走。

把约束当一等公民,而非 prompt 里的一句话 意图感知 授权边界 按意图与副作用判 harness 持有 提交时校验 呼应上一篇 1645 行为监控 而非扫文本 不只查禁词串
图 2|修复方向是三层:把授权边界做成能理解意图与副作用的、让 harness 在提交时统一把关、监控去推理语义而非扫描生成的禁词串——后两点正好和前一篇的「提交时校验」闭环。

解法也由此清晰:生产系统需要的不是「再叮嘱一遍别泄露」,而是能理解意图与副作用的授权边界,加上在动作提交那一刻由运行时统一把关。光靠扫描 agent 生成的文字里有没有违禁词串,几乎必然漏——因为泄漏往往不是明文写着密钥,而是把凭证伪装成一条看起来正常的需求。这和前一篇(1645)的结论是同一条脉络:约束应该由 harness 持有并强制,而不是指望每个 agent 在各自窗口里乖乖记得。把安全属性当成首要的、可版本化、由运行时强制的状态,而不是 prompt 里随意流动的一句中文,才是治本的路子。

对已经把智能体接进生产的团队,这篇研究的现实提醒是:风险不只是「它会不会被攻击」,还有「我这些本来很听话的 agent,在互相交接工作时,会不会悄悄把一条安全要求弄丢了」。具体动作可以包括:把权限、保密、越权这些约束显式地建模成运行时状态;在跨 agent 传递前对中间产物做约束完整性检查;监控去理解 agent 的意图和副作用,而不是简单匹配关键词。当智能体从演示走向真实业务流程,这类「静默失守」会比显眼的越界更早、也更隐蔽地出现,值得在架构阶段就预留围栏。