新一代提示词工程 · 知识全景图面向有工程基础、提示词工程尚未系统化的工程师
显示设置

过拒与安全—可用性权衡

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实验台

  1. shellbash

    查看代码
    # 同一批正常请求样本,在「收紧前 / 收紧后」两版安全配置上各跑一遍
    # 样本目录: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 层(同层节点彼此无先后约束)
前置PE-A-03→PE-A-04 本节点→后继PE-A-05

在 交互全景图 中定位本节点。