首页 知识分组 G06 安全与鲁棒性 PE-A-04
过拒与安全—可用性权衡
Over-refusal and the Safety–Usability Tradeoff
PE-A-04 内容已写满 G06 安全与鲁棒性 第 16 层
安全 过拒 可用性
一句话结论
安全策略要同时报拦截率与过拒率两列,把处置拆成继续、降级、中止三种可判定结果;权衡的落点由业务风险决定,并须留下取舍记录。
本页结构(可跳转)
C1
成因一 分类器粒度过粗
把整段内容判为可疑
F1
改进一 拦截粒度做细
只剔除可疑片段而非整段失败
C1->F1
C2
成因二 安全指令过于绝对
遇任何可疑内容即中止
F2
改进二 处置规则可判定
区分继续 / 降级 / 中止三种结果
C2->F2
C3
成因三 层级冲突处理过保守
一律拒绝而非降级
F3
改进三 为可降级场景设计降级路径
读取外部内容时尤其关键
C3->F3
M
度量纪律
同时记录攻击成功率与正常请求拒绝率
定期用正常流量样本估算过拒率
⇒ 只优化一侧会把系统推向极端
F2->M
N
边界
权衡落点由业务风险决定,没有普适最优点
高风险场景可接受更高过拒率
但必须是有意识的取舍并写进指标
F3->N
权衡图:过拒的三类成因、三条改进方向,以及「拦截率与过拒率必须双向度量」的度量纪律与业务侧落点。 (本站自制)
01 为什么需要它
把拦截率当成安全工作的唯一成绩单,会系统性地奖励「多拦一点总没错」:每一次收紧阈值都能让拦截率上升,而代价要到用户正常请求被拒时才浮现,且很容易被记成个案抱怨。
过拒率的作用就是把这份代价放到同一张表上——它不反对安全策略,只要求安全收益与可用性损失被同时读出。 缺少这一侧读数,安全调优会朝过度保守单向漂移,而且漂移过程全程无声:没有任何一条监控会因为「今天比昨天多拒了几次正常请求」而报警。
适用边界
过拒率是可操作指标而非行业常数:它的数值取决于样本构成、判据口径与业务对风险的接受度,因此不同系统之间的过拒率不可直接横比,只能看同一系统在改动前后的自身变化。测量本身也有前提:用于估算过拒率的正常请求样本必须带人工或可判定的标签,样本量太小时抽样噪声就会被误读成策略回退或改进。
02 机制说明
过拒的成因通常落在三处。
第一处是拦截粒度:安全分类器把整段内容判为可疑,一处可疑文本就让整个任务失败。 第二处是安全指令的形态:提示里写着遇到任何可疑内容即中止,规则绝对且没有分层。 第三处是冲突处置:层级冲突或来源可疑时一律拒绝,而不是降级执行。 改进方向与成因一一对应:把拦截粒度做细,只剔除可疑片段而非整段作废;把安全指令改写成可判定的处置规则,让继续、降级、中止成为三种明确结果;为可降级的场景预留降级路径。 度量侧必须成对记录:攻击成功率与正常请求拒绝率同表,并定期用正常流量样本估算过拒率;只优化一侧必然把系统推向某个极端。 这条权衡的代价在近期证据里可以直接读到:有工作把过拒率压到标准偏好优化的一半而优先关系反而提高,也有工作在攻击成功率上取得数倍下降而效用不明显受损,但同一族的训练还伴随偏好得分与对话胜率的回退,说明安全侧收益很少零成本。
03 何时该用 / 何时不该用
04 实验台
shell bash
查看代码 # 同一批正常请求样本,在「收紧前 / 收紧后」两版安全配置上各跑一遍
# 样本目录:benign/*.txt(人工确认为正常请求);判据:被拒即计一次误拒
for v in before after; do
python3 - "$v" <<'PY'
import glob, json, subprocess, sys
v = sys.argv[1]
bad = []
for f in sorted(glob.glob("benign/*.txt")):
r = subprocess.run(["python3", "ask.py", "--safety", v, "--input", f],
capture_output=True, text=True)
if json.loads(r.stdout).get("refused"):
bad.append(f)
print("config=%s 误拒=%d/%d" % (v, len(bad), len(glob.glob("benign/*.txt"))))
PY
done
# 另跑一批恶意样本,输出同表:拦截率 / 过拒率两列都必须在报告里
python3 - <<'PY'
import json
s = json.load(open("adversarial-report.json"))
print("拦截率=%.1f%% 过拒率=%.1f%%" % (100*s["block_rate"], 100*s["over_refusal_rate"]))
PY预期观察:两版配置各自打印出误拒计数;若「收紧后」的拦截率上升而误拒计数同时跳升,说明这次收紧把可用性损失换成了安全收益,必须把两个数字一起写进报告再决定是否保留。命令输出里缺过拒率一列的版本不予采纳。
05 证据
主张 过拒率是可量化的训练侧指标:该工作在多级指令层级上同时提高优先级遵循并把过拒率压到标准 DPO 的一半,说明「更守层级」与「更少误拒」并非只能二选一。
分级 paper
来源 S-0041 https://arxiv.org/abs/2606.10860
原文 展开原文关键句 We formalize a k-level instruction hierarchy problem and instantiate it for k=5 ... raising macro pairwise priority adherence while keeping over-refusal at half the standard DPO rate.
主张 安全—可用性权衡的代价在厂商自述数据里可见:指令层级增强让对抗类指标明显上升,但同期对话胜率与偏好得分出现回退,因此安全侧收益必须以成对指标呈现,不能只报上升的那一列。
分级 vendor
来源 S-0017 https://openai.com/index/instruction-hierarchy-challenge/
原文 展开原文关键句 OpenAI's models are trained to follow a clear instruction hierarchy: System > developer > user > tool ... Chat WinRate vs o1 0.71 → 0.66 (-0.05); Preference Score 0.46 → 0.40 (-0.06).
主张 把防御下沉到模型内部表示层可以把梯度类注入攻击的成功率压低数倍,这为「不必靠整段拒绝来换安全」提供了可引用的技术路线;其代价是该方法需要训练或微调,不属于纯提示词手段。
分级 paper
来源 S-0042 https://arxiv.org/abs/2505.18907
原文 展开原文关键句 our proposal yields between 1.6x and 9.2x reduction in attack success rate on gradient-based prompt injection attacks
06 术语
术语 过拒 Over-refusal
界定 安全策略过严导致正常请求被拒绝的现象;它与拦截率构成安全—可用性权衡,须双向度量而非只优化一侧。
相关节点 —
07 失效模式
整段拦截 一处可疑文本就让整个任务失败,用户看到的是能力缺失而不是安全提示,正确内容被一并丢弃。 安全指令绝对化 提示里写「遇到任何可疑内容即中止」,模型只能二选一,本来可降级完成的请求被整体拒掉。 只报拦截率 报告缺过拒率一列,把正常请求被拒计成安全收益,防御在多次调优后整体偏严而无人察觉。 把过拒率当横向排名 不同系统的样本构成与判据口径不同,跨系统比数值会得出无法复现的结论。 用无标签流量估算过拒率 缺少人工或可判定标签,抽样噪声被当成策略回退,每次都按噪声改配置。
08 在本站知识结构中的位置
所属分组 G06 安全与鲁棒性 依赖深度 第 16 层(同层节点彼此无先后约束)
在 交互全景图 中定位本节点。