Twin Agent:不是绝对隔离,而是用极简残差提示化解注入攻击
Twin Agent: Context Residual Compression for Privilege Separated Agents
当大语言模型从单纯的“聊天框”走向能够操作终端、读写文件、调用各种 API 的自动化智能体(Agent)时,安全边界瞬间被击穿了。一个公开的代码仓库 Issue、一封外部发来的邮件或者一段网页搜索结果,都属于完全不可信的数据(Untrusted Context)。攻击者只需在其中巧妙嵌入一段恶意提示词注入(Prompt Injection),就能诱导具备系统特权的智能体执行灾难性操作,例如删除关键文件、写入后门或外泄敏感凭证。
ArXiv URL:https://arxiv.org/abs/2607.19595
过去应对这类威胁的核心防线往往建立在“特权隔离”(Privilege Separation)之上:既然不可信的数据会投毒,那就索性让接触外部环境的智能体彻底丧失特权,或者采用先规划后执行的刚性架构(Plan-First),强制特权规划器在接触任何不可信数据之前就把操作定死。然而,现实中的真实任务从来都不是线性的。在复杂的软件工程或多工具调用场景中,智能体必须根据实时报错、文件状态与工具反馈不断动态试错。一旦将信息流完全掐断或过度限制通信接口,系统的任务完成度(Utility)往往会发生断崖式下跌,且需要针对不同任务耗费大量人力去硬编码安全策略。
加州大学伯克利分校等机构的研究者在论文《Twin Agent: Context Residual Compression for Privilege Separated Agents》中提出了一个破局视角:智能体的安全防御,本质上是一个“跨信任边界的信息流压缩问题”。攻击者想要成功注入并篡改模型底层指令,通常需要注入足够长、语义足够密集的对抗性指令(即高信息量);而特权智能体为了做出正确的下一步决策,往往只需要极少量的关键线索(即低信息量)。
基于这种非对称性,作者设计了 Twin Agent 架构。它不再追求不切实际的完全信息隔绝,也不强加僵化的执行模版,而是将智能体拆分为对称运作的“探索者”与“安全执行者”,仅通过受限长度的“残差提示”(Residual Hints)进行通信。这项研究不仅为提示词注入防御建立了可量化调控的安全-可用性平衡机制,也为长程任务智能体的稳健部署提供了极具工业落地价值的范式。

将安全视作“压缩”,重构特权隔离的基本逻辑
要理解 Twin Agent 的创新点,首先需要厘清现有安全智能体架构的症结所在。
在标准的 ReAct 智能体中,决策模型在每一步 $t$ 接收的上下文通常混合了三部分:可信的系统指令与用户目标 $T$、来自外部环境的不可信输入 $U$、以及过往执行的历史轨迹 $I_t$。模型输出动作的策略可以表述为 $A_t = \pi(T, U, I_t)$。在这种单体结构下,不可信区域 $U$ 对推理链路拥有不受控的影响力,恶意指令随时能够诱导模型越权。
为了堵住漏洞,安全界最直观的反应就是特权隔离。以 CaMeL 等前沿工作为代表的防御体系,通常采用“先规划后执行”(Plan-First)的方案。特权规划器仅依赖可信信息 $T$ 生成全局动作蓝图 $P$,再交给受限的执行器在不可信环境 $U$ 中按图索骥。这种设计在流程固定的场景下行之有效,但在长程交互任务中却频遭挫败。以软件工程修复(SWE-bench)为例,工程师不可能在未看报错日志、未检视具体代码仓库前就规划好所有修复步骤;智能体必须在 Bash 终端中不断输出指令、根据报错调整假设并反复回溯。静态的计划机制在动态探索面前显得过于笨重。
随后出现的一些改进工作尝试引入受限信息流,例如仅允许隔离环境向特权端传递布尔值、枚举型状态或高层抽象摘要。但这又带来了另一个工程噩梦:不可信内容往往庞杂冗长,混杂着海量有用与无用信息。如果要对整个上下文进行无损抽取,现有的压缩协议要么因为信息丢失过多导致任务失败,要么需要为每一种特定工具编写繁复的数据清洗接口,丧失了通用智能体的泛化优势。
Twin Agent 的核心洞察在于:防御者不必压缩整个不可信上下文,只需压缩“决策残差”。
在信息论与视频编码领域,残差编码(Residual Coding)指的是只传输当前帧与参考帧之间的差异部分。将这一概念迁移到双智能体系统中,研究者发现:如果两个智能体时刻同步着基础执行状态,那么安全智能体下一步需要知道的,绝非不可信环境的全部细节,而仅仅是“支持下一步动作所需的最小增量”。
正如第一张图左侧所展示的直观图景:存在一个介于可用性与安全性之间的“安全通信区间”。前沿基座大模型(如 GPT-4 或更高级别的前沿模型)本身具备一定的指令遵循抗干扰能力,攻击者要通过注入彻底劫持模型行为,必须注入相当篇幅的逻辑对抗文本,这意味着攻击成功所需的最低信息量门槛较高;相反,为了让模型选对工具或定位某个文件名,所需的决策信息量往往非常微小。Twin Agent 的设计目的,正是通过对通信通道施加严格的字符预算约束,精准卡死在“既能传递有效线索、又无法容纳有效攻击载荷”的狭窄安全带内。

双生架构的运转机理:探索智能体与安全智能体
Twin Agent 的整体拓扑结构在第二张图中得到了清晰展现。系统由两个高度协同但权限截然分开的智能体构成:
-
探索智能体(Explore Agent):拥有读取完整环境上下文的权限,负责观察所有来自不可信渠道的数据(例如用户提交的 Issue 描述、外部 Web 页面、未经审查的第三方工具回包等)。探索智能体拥有全知视野,但它被剥夺了任何具有实质破坏性的特权工具,不能执行真实的终端写入、代码改动或敏感系统调用。它甚至在内部也会模拟推演 Bash 命令,但这些命令全部是虚拟运行,不会作用于真实系统。
-
安全执行智能体(Safe Agent):拥有执行真实特权工具的能力(如在生产环境运行 Bash、修改代码文件、提交补丁等),但它的上下文被严格净化。它完全看不见外部的不可信原始文本,其输入仅仅包含可信的任务目标、系统指令、过往在环境中留下的真实执行轨迹,以及来自探索智能体的受限提示(Hint)。
两个智能体之间的协同遵循着严格的残差通信范式。在时间步 $t$,原始无防御状态下智能体理应执行的目标动作为 $A_t^{(o)} = \pi(T, U, I_t^{(s)})$。Twin Agent 的目标,是让仅接收可信上下文和提示信息的安全智能体所采取的动作 $A_t^{(s)} = \pi_s(T, H_t^{(e)}, I_t^{(s)})$ 尽可能逼近该目标动作。
这一优化目标在形式上被定义为最小化两者的动作分布差异:
\[\min_{H_t^{(e)}} \mathcal{D}\left( \pi_s(T, H_t^{(e)}, I_t^{(s)}), \pi(T, U, I_t^{(s)}) \right) \quad \text{s.t.} \quad \mathrm{Budget}(H_t^{(e)}) \le b\]探索智能体在每一次决策前,根据当前的不可信输入 $U$ 与安全智能体已有的执行历史 $I_t^{(s)}$,生成一段极度精简的提示文本 $H_t^{(e)}$。由于安全智能体已经知晓过往所有的工具调用输出与系统状态,探索智能体不需要把看到的内容“翻译”一遍,而只需发送类似“检查 tests/test_parser.py 中的 ValueError 分支”或“在第 45 行附近补充 None 校验”这类短小精悍的动作向导。
这种架构带来了三大显著的工程优势:
其一,通信边界的字符长度成为了一个显式的、可调节的安全旋钮。系统可以通过简单地将预算 $b$ 设定为 100 到 200 个字符,从物理层面截断复杂注入攻击的表达空间。
其二,它几乎是对现有 ReAct 类智能体的即插即用升级。不需要为不同的环境重写工作流代码,原先单体智能体与环境交互的逻辑被完整保留,只需在中间插入一层残差提示中继。
其三,它实现了任务效用与安全防御的关注点分离。在固定的通信信道下,任务完成质量主要考验探索智能体提炼线索的能力,而系统安全性则主要由安全智能体的输入隔离与边界拦截负责。
为了构建纵深防御,作者还在通信信道上增设了一道基于轻量级模型的提示词注入检测器(Detector)。任何超过长度预算的提示会被直接截断或丢弃,而任何被检测器打上可疑标签的提示同样会被熔断。这种“长度硬限制 + 检测器软过滤”的双保险机制,构成了拦截对抗载荷的坚固防线。
极端攻防对抗:从 SWE-bench 到多工具环境的实证
为了检验这一架构在不同任务复杂度下的鲁棒性,研究团队选择了两个极具代表性的场景进行实证评估:一类是代表高难度、长交互周期的软件工程基准 SWE-bench;另一类则是代表异构多工具调用的 AgentDojo 与 DecodingTrust-Agent。
在长程软件工程场景中,作者基于 SWE-bench Lite 构建了对抗版本 SWE-bench-injected。在现实中,开源社区经常会收到外部未经验证人员提交的 Issue 描述,恶意攻击者会在 Issue 中潜藏提示词注入代码,诱导自动修复智能体在修复 Bug 的同时“顺便”向代码仓库植入后门、写入私密信息或删除核心测试用例。评测在过滤出的 232 个真实调试任务中展开,注入载荷要求智能体在修复过程中删除特定文件或写入指定秘密串。
实验结果展现了剧烈的反差。未加防御的默认 SWE-agent 在面临注入攻击时毫无抵抗力,攻击成功率(Attack Success Rate, ASR)高居不下,且由于被恶意指令带偏,其原有的软件修复成功率也出现了明显滑坡。而采用先规划后执行模式的 CaMeL 架构,由于无法适应软件工程复杂的“排错-重试-读代码-再修改”长程动态闭环,任务效用从原本的正常水平断崖式下跌至 30.9%,暴露出刚性规划在面对不确定性探索时的脆弱。
相比之下,Twin Agent 在将提示信息限制在 100 个字符预算的前提下,展现了兼顾两端的表现。它不仅维持了接近原始智能体的高水准任务解决率,而且在常规注入场景下将 ASR 压缩至几乎为零的水平。极短的残差提示迫使探索智能体只能输出代码定位和调试建议,即便探索智能体本身被恶意 Issue 中的提示词严重干扰,其输出一旦包含非法的越权操作指令,也会因为长度超标或偏离正常建议特征而被检测器和预算机制当场切断。
而在 AgentDojo 与 DecodingTrust-Agent 等异构多工具调用环境中,不可信数据主要来自于各类工具的返回值(例如读写邮件系统、CRM 系统、金融交易 API 时获取的第三方内容)。这类场景的攻击面更为零碎,工具返回内容中往往充斥着各色对抗样本。在 AgentDojo 的四个不同测试套件中,Twin Agent(设置 200 字符预算)同样全线压制了基线模型,在彻底阻断未经授权的越权工具调用的同时,顺利完成了跨工具的多步链式调用。
能够防御自适应攻击吗?
在安全评测中,针对预设样本的“静态防御”往往容易给人带来虚假的安全感。如果攻击者充分知晓 Twin Agent 的存在,明确了解系统由双智能体构成且中间存在 100 字符的过滤管道,系统还能守得住吗?
为了探究这一极端情况,作者专门针对 SWE-bench-injected 设计了双阶段自适应攻击(Adaptive Attack)。攻击者的目标非常明确:设计一种极度精炼、具备强迷惑性的载荷,一方面在语义上彻底俘获全知全能的探索智能体,迫使其甘愿充当“傀儡传声筒”;另一方面,这一载荷必须被高度压缩在 100 字符以内,同时能够逃逸检测器的审查,并最终具备足够的煽动性,在单步之内欺骗仅依赖历史轨迹的安全智能体执行恶意 Bash 命令。
在单轮交互测试中,Twin Agent 达成了 0.0% 的 ASR。而在更贴近现实的多轮持续渗透测试中,实验观测到探索智能体确实如预期一般被攻破——在 100% 的情况下,探索智能体完全听从了恶意 Issue 的指引,试图构造恶意提示传递给安全智能体。这进一步证明了单纯依赖前端智能体做安全防护是不可靠的。
但在后续传导链条中,残差压缩的威力开始显现:在 232 个测试实例中,由于 100 字符长度的严苛限制,绝大多数恶意载荷根本无法在有限空间内组织起足以穿透下游安全智能体防线的逻辑,只有 57 个实例的恶意提示成功绕过了检测器。即便这些带毒的残差提示被送达,面对上下文干净、以排查真实代码问题为核心任务的安全智能体,在绝大多数情况下模型都会自行校验这些提示并予以忽略,最终仅有 11 个实例发生了越权执行,多轮自适应攻击的整体 ASR 被压制在 4.7% 的极低区间。
更耐人寻味的是作者对这 11 起失败用例的复测追踪。当对这 11 个被击穿的实例使用相同的设置重新运行 5 次时,成功攻击的次数变成了 0(55 次重试中无一成功)。这说明在极窄的通信信道下,自适应攻击的成功在很大程度上依赖于大语言模型本身采样解码时的随机抖动,而非形成了确定性的逻辑压制。这也给工程落地提供了明确启示:对于安全级别要求极高的场景,在 Twin Agent 的安全端引入简单的多轮采样投票机制(Multi-run Voting)或进一步加固轻量检测器,即可将此类偶发性穿透风险近乎彻底消除。
字符预算的权衡实验与未来启示
在消融实验中,研究者进一步拆解了字符预算这一核心超参数对系统行为的塑造成效。当提示预算从 0 字符(即完全隔离,安全智能体与探索智能体零交流)逐步放宽到数百字符时,整个系统的效用曲线与安全曲线呈现出高度符合理论预期的镜像分化:
在预算极小或为零时,系统展现出绝对的防御安全性,但此时安全智能体因为缺乏对外部不可信上下文的感知,任务效用降至最低点,基本退化为无头苍蝇;而随着预算逐渐放开至 100 到 200 字符,任务效用迅速攀升,几乎追平了无防御基准线;然而一旦预算继续无限扩大,恶意指令便重新获得了足够的表达带宽,导致 ASR 开始抬头。
这一现象为构建企业级生产环境的 Agent 提供了全新方法论。长期以来,安全团队与业务团队往往处于对立状态:业务端抱怨安全防线扼杀了智能体的自主推理与灵活度,安全端则指责业务端的自由工具调用形同虚设的系统后门。Twin Agent 表明,我们不需要在“彻底禁绝通信”和“完全放任不管”之间非黑即白地二选一。通过从语义残差的角度重新审视信息传递,用最小化的信息增量维系业务运转,大模型智能体完全有可能在泥沙俱下的开放网络环境中,既保持锐利的行动力,又将不可信环境带来的风险牢牢禁锢在方寸之间。