把攻击成功率从17.63%压到1.75%,看上去是一次干净利落的胜利。但同一张表里,任务效用也从47.73%掉到了42.68%。一边是攻击少了,一边是正常活儿也干不利索了,这笔账到底怎么算,得看你的流量里有多少任务真的带着注入。

打开网易新闻 查看精彩图片

Meta的LlamaFirewall是一套开源护栏框架,由三部分组成:PromptGuard 2,一个小型的越狱与注入检测器;AlignmentCheck,一个思维链审计器,检查智能体的推理是否偏离了用户目标;以及CodeShield,对生成的代码做静态分析。相关论文于2025年5月6日提交至arXiv,编号2505.03574。

被引用最多的是AgentDojo上的评测,这是一个包含97个真实任务的基准,攻击者把指令藏在工具输出里。论文报告的结果是:无护栏时攻击成功率为17.63%,单用PromptGuard 2降到7.53%,单用AlignmentCheck降到2.89%,两者叠加降到1.75%。对应的任务效用分别是47.73%、47.01%、43.09%和42.68%。

读这张表有两个细节不能漏。其一,这些是来自AgentDojo排行榜的静态轨迹,横跨十种不同的语言模型,使用的是“important_instructions”攻击。其二,这种攻击是嵌在工具输出里的固定模式。静态轨迹无法对防御做出反应:一个看到护栏拒绝的攻击者会调整策略,而录下来的轨迹按定义不会。

这不是说结果不好。在标准基准上把攻击成功率降一个数量级,是真实且有用的信号,说明这套组合能很好地处理已知模式。但它不告诉你,这个数字在你的流量上会变成多少。

攻击成功率只是交易的一半

攻击成功率是有条件的:它是被攻击任务中攻击得手的比例。而效用是在大多为良性的任务上测的。生产环境里这两类任务混在一起,混合比例可以估:带注入的任务占多大份额。

组合护栏让出了5.05个百分点的绝对效用,相对损失10.6%,换回15.88个百分点的攻击成功率。设dU为效用损失(0.0505),dASR为消除的攻击成功率(0.1588),q为带注入任务的占比,H/V为一次成功攻击的伤害,以一次完成任务的价值为单位。护栏划算的条件是避免的伤害超过损失的价值:q × dASR × (H/V) > dU,即盈亏平衡点q* = dU / (dASR × H/V)。

用论文的数字算,组合护栏对无护栏的盈亏平衡点值得细看。如果一次成功注入的代价约等于一个丢失的任务,你需要近三分之一的流量被攻击,全套护栏才回本。如果一次成功注入严重100倍——未授权支付、凭证泄露、仓库被删——那么大约每300个任务里有一个是恶意的,护栏就值得跑。同一份基准结果,能支撑相反的部署决定。

谁胜出取决于攻击流行度

把四种配置放在一起比,而不是只拿一个对零。按每任务净值 = 效用 − q × ASR × (H/V) 计算,取H/V = 10作为示例(并非实测值),论文的数字给出这样的图景:最便宜的组件,那个小型分类器,在中间区间是最优选择;重量级的LLM审计器只有在被攻击份额很高、或单次成功伤害很大时,才赚得回它的效用成本;全套组合只在这个区间的顶端胜出。

这是个模型,带着常见的简化:假设测得的效用不随流行度变化,假设一次成功攻击的代价是固定的H,假设你流量上的攻击成功率与基准一致。每一条都在某个方面不成立。重点不是精确的交叉点,而是形状:不存在与流量无关的“最佳”配置,单一个头条攻击成功率数字无法给它们排名。

要多少次试验才能分出高下

假设你想在自己的流量上确认AlignmentCheck单独(2.89%)与组合护栏(1.75%)之间的差距。这是两个比例的对比,在双侧alpha为0.05、功效80%时,所需样本量很大:每臂约2700次注入试验。而要把17.6%和7.5%分开,只需要168次。最后那点提升,恰恰是你的测试套件最没能力确认的。

Wilson 95%区间讲的是同一个故事。在每个配置629个注入案例时(这个数字仅用于示意一个中等规模的套件),1.75%的区间大约是1.0%到3.1%,2.89%的区间大约是1.8%到4.5%,两者大幅重叠。一个看起来是40%相对提升的点估计,在这个样本量下落在噪声范围内。

这也是阈值赢家诅咒里那个选择问题:候选之间的小差距,在有限测试集上按argmax挑出来,换到新数据上会向均值回归。如果你在300个案例的套件上比较四个护栏并上线了第一名,就要做好前两名排名在新数据上令人失望的准备。

怎么算自己的账

整套分析能塞进一段短脚本,把输入换成你自己测到的值即可。脚本里定义Wilson区间函数和每臂样本量函数,配置字典填入各方案的攻击成功率与效用,再打印样本量和净值,取argmax后检查它的置信区间。

用的时候有三条实务提醒:

  • q从日志里估,不要从基准里估。数一数你的系统里工具输出或检索内容中,出现针对智能体的指令式文本的频率。哪怕只是粗略的0.1%、1%、10%,答案就会差一个数量级。
  • H/V按动作类别分别估。只读的搜索动作和支付动作不共享同一个伤害数字。按类别做决定优于全局决定,理由和按类别的盈亏平衡点不同是一样的。
  • 每个攻击成功率都带上区间。一个没有n的“1.75%”不是能和任何东西比较的结果。

还有哪些数字不能和攻击成功率比

更新的护栏论文报告的是不同指标,且不能换算。例如SingGuard-NSFA(arXiv:2607.13081,2026年7月13日提交)在其自建的、覆盖133种语言、超过93000个样本的基准上报告F1至少94%,在一个3435样本的跨源集合上F1为91.29%,检测耗时约50毫秒。在有标注的安全与不安全输入集合上的F1,衡量的是分类质量;智能体基准上的攻击成功率,衡量的是智能体、工具与防御交互之后的端到端结果。一个高F1的分类器,如果注入从它从未见过的通道进来,仍可能留下很高的攻击成功率;一个普通的分类器,如果智能体本来就很少听从注入指令,也可能给出很低的攻击成功率。

读一份护栏公告时,对每个数字都记下四件事:单位是什么(输入、步骤还是任务),总体是什么(良性、被攻击还是混合),攻击者是静态的还是自适应的,效用代价是多少。缺了其中两项的说法是营销数字,不是工程输入。

合理的上线路径

  1. 先在每个工具输出上跑便宜的分类器,记录它的决定,先不要拦截。你从标记率里学到q,并人工审计误报。
  2. 在影子模式下用自己的任务测效用。公开基准上5个点的损失,在你的工作负载上可能是1个点,也可能是15个点。
  3. 按动作类别给昂贵的审计器设闸。只在H/V很大的动作前跑基于LLM的检查,比如资金流动、删除、对外发消息。盈亏平衡表说明,在只读步骤上不值得为它付费。
  4. 针对自适应攻击者重新评估。静态轨迹的结果是难度的下限,不是上限。用看到护栏拒绝之后才写出的攻击来红队这套组合。
  5. 宣布赢家之前重跑样本量计算。如果两个选项的攻击成功率相差不到两个点,你大概需要数千次试验,或者干脆按成本和延迟来选。

回到开头那个问题:攻击成功率降10倍,是不是就等于风险降10倍?只有当你的流量就是基准的攻击构成、且攻击者不调整时,才成立。风险是q × ASR × H按动作类别求和,那个10倍只作用于攻击成功率这一项。