先说结论:这篇文章里最狠的一句,不是「1% 拉到 99%」。是中间那句——模型、权重、请求都没动,只改了一个配置值,两种情况下健康检查都通过。
Prompt Guard 2,Meta 家的,干 prompt-injection 检测。有人拿 AgentDojo 的 629 条真实注入,逐条嵌进普通工具输出里。模拟代理防火墙真正看到的那种输入,不是实验室里洗干净的样本。十来个开源检测器一起上,它拦下 6 条。
attacks: 629
blocked: 6
block_rate: ~1%
1%。🙃
第一反应肯定是「就这」。别急。
作者把分数扒出来:攻击样本大约 0.009,良性文本大约 0.0008,差十倍。
attack_score: 0.0090
benign_score: 0.0008
排序能力是有的。模型不瞎。问题在阈值。按概率分类器的常规用法取 0.5,这两拨分数全在阈值底下趴着。于是每个请求都放行。
改了。阈值调到 0.003,629 条里拦下 621 条。约 99%。
作者自己先泼了盆冷水:AgentDojo 的攻击共享同一套包装模板,精心调出来的阈值很可能认的是模板,不是攻击。这句我认。能自己把话说死的作者不多,比那些把 99% 直接写进标题的厚道多了。
然后评论区开始照妖镜。
pm25coder 在作者存下来的结果上复跑了一遍:0.5 这个数,约等于攻击分数中位数的 53 倍,也约等于最高那条良性分数的 90 倍。这个倍数关系才是重点!阈值该由良性流量定。给定误报预算,阈值就是良性分数的高位分位数。攻击标签只决定你愿意接受多少误报,不决定线划在哪。作者后面对偏差倍数的说法从「约 50 倍」改到「约 100 倍」,两次对不上。我先都记着。
真正的刀在跨域上。
travel: 100%
workspace: 22.9%
banking: 16.0%
slack: 1.0%
pooled: 35%
同一个 prompt-guard-2-22m,换个域,从 100% 掉到 1%。池化之后 35%。
那 99% 到底是个什么东西?我的判断:它证明的是「默认阈值严重误校准」,不是「调一调就能用」。前半句作者自己说了。后半句被 99% 盖住了。
顺手把误报预算也拆一遍。2% 听着很宽裕。校准集 57、77、81、76 条良性样本。2% 往下取整,每个折只允许 1 个良性样本越线——一个!再往后,36 折里有 11 折超出预算,保留域误报率 4.9%,是承诺值的 2.5 倍。超的那几折,集中在良性分数高一个数量级的来源上。
样本量这块,有个评论者算得更清楚:97 条良性样本,零误报时 95% 置信上界大概 3.7%;出一次误报,上界约 5.6%。要证明「最多 2% 且零误报」,大概得 150 条往上。
所以那个 99%,我信一半。模型没作弊,权重没动。是「跨域」三个字没人替它兜。作者自己在回复里也认了,0.003 的跨域稳定性保证不了。还认了原文把校准阶段的 2% 和保留集的拦截率混在同一句话里。这个自曝,比 99% 值钱。
扯远一点。
这篇东西真正该被钉在墙上的,是作者把「存活」和「有效」拆开那一段。健康检查告诉你组件在跑。它不告诉你组件拦不拦。这两件事之间的缝,能塞进一整季的公关稿。
这套「构造性绿色」我见得不算少。WAF 规则只记录不阻断,日志里漂漂亮亮。告警发到一个早就静音了的频道,值班表上还是绿的。MFA 上线了,遗留 API 那条路没覆盖。测试套件因为跳过一大堆而显示通过。每一个都能过审。每一个都拦不住人。
上次我帮人看一套监控,红黄绿三色灯,全绿,跑了三个月没人管。后来发现,那几个指标只采运行状态,不采输出结果。
看灯没用!要看它拦住了什么、漏了什么、漏的比例是多少。
作者给了五类检查。我只挑一条说:定时拿一小撮金丝雀攻击喂线上护栏,拦截率掉到下限以下就报警,并且定期换金丝雀。固定的测试集会被过拟合,这条是做安全的人迟早要吃的亏。另一条我认同,但要打折扣:按下游工具的风险分层设阈值,只读调用松一点,能碰破坏性工具的严一点。方向对。实现起来,先得把工具清单分完类。多数团队的清单自己都不全。
我还没测完的是「改写 + 在多条工具输出里拆分注入」这一路。作者也承认没测。模板识别的问题到底占 99% 里多少,得等这一路跑出来才知道——先别信我这半句。
锐评评分卡:这篇文章值不值得读?值。它用一组能复现的数字把「绿灯不等于拦截」讲透了。1% 到 99% 那个对照,值得贴在你家安全评审会的墙上。但要扣分:99% 一旦标题化传播,会被当成「调个阈值就完事」的结论。而跨域那组数据明明摆在同一篇里——travel 100%、slack 1%。这不是调参能填的坑。作者自己招了,转述的人未必招。
这钱花得冤不冤?这里没花钱,Prompt Guard 2 是开源的。冤枉的是时间。你要是今天就想拿它上线挡注入,先别!先去 github.com/rudratoshs/buried-injections 把那 629 条灌进你自己的流量形状里跑一遍。看看你那个域落在 100% 那头,还是 1% 那头。
落在哪头,比通稿说它能拦多少,重要一百倍。