
做 Agent Harness 的人,很容易把「模型有没有识破注入」当成安全 KPI。HarnessRisk(lifecycle-oriented agent harness safety benchmark)用 128 个沙箱用例、六个生命周期阶段、三套 Harness × 六种模型,把这个错觉拆开了:Detection 高,ASR 仍可能不低;任务 Utility 高,也可能同时攻击成功。
HarnessRisk 把 Harness 责任拆成六个阶段:
每个用例都是「良性用户目标 + 嵌在工作流产物里的对抗指令」。轨迹上分开记四件事:Utility、Attack Success Rate(ASR)、Persistence、Detection。完成任务与是否被攻破,不再混成一个分数。
跨 14 组 model–harness 配置,ASR 大约在 12.6%~80.9%,Utility 仍多在 75.0%~97.6%。没有一组被评成「全生命周期安全」。
同一模型,换 Harness,安全可以差四倍以上。
GLM-5.2 在 OpenClaw 上 ASR 约 54.7%,换到 Nanobot 约 12.6%。安全排序会随 Harness 变——评「模型安不安全」而不绑运行时,结论会漂。
有用但不安全,是常态而不是例外。
大量轨迹一边做完用户任务,一边让攻击目标得逞(报告里 useful-but-unsafe 大约落在 38%~59% 量级,随 Harness 变化)。只看成功率的业务看板,会系统性地漏掉这件事。
高检测 ≠ 低攻击成功。
MiniMax M3 挂在 OpenClaw 上时,Detection 可到约 97.9%,ASR 仍约 31.2%。模型「喊出来了」,执行层照样可能放行,或把脏状态写进记忆 / 技能 / 配置。
Detection 与 ASR 负相关(论文报告 Pearson 约 -0.71),说明「认出」仍然有用;但相关性不是闸门。闸门必须接在 Action Control 与 State Persistence 上。
三个 Harness 上,Harness Configuration 都是最脆弱阶段之一:攻击不必一上来就外泄密钥,只要在「看起来合法」的工作流里改弱审批、改安全敏感参数,后面的 Runtime / Action 就会在授权外衣下失控。
这对工程的含义很具体:
我自己的落地顺序是:
示意:把检测结果变成权限衰减,而不是再生成一段警告话。
from dataclasses import dataclass
@dataclass
class SafetyEvent:
detected: bool
phase: str # config|extension|runtime|persist|action|recovery
@dataclass
class Gate:
tools: set
can_persist: bool
needs_human: bool
def on_detect(event: SafetyEvent, gate: Gate) -> Gate:
if not event.detected:
return gate
blocked = {"shell", "network", "payments", "deploy"}
return Gate(
tools=gate.tools - blocked,
can_persist=False,
needs_human=True,
)
g0 = Gate(tools={"read", "write", "shell", "network"}, can_persist=True, needs_human=False)
g1 = on_detect(SafetyEvent(True, "runtime"), g0)
print(sorted(g1.tools), g1.can_persist, g1.needs_human)
# ['read', 'write'] False TrueHarnessRisk 真正有用的结论不是「某某模型更安全」,而是:
下一台 Agent 上线前,与其追问「它能不能看出来」,不如追问:看出来之后,权限、落盘和对外动作,谁在 12 微秒量级里把它按住。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。