0Pricing
AI Prompt Engineering · 课时

衡量鲁棒性

评估系统抵抗攻击的能力。

衡量鲁棒性 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。

可度量的稳健性

稳健性是系统抵抗对抗性输入的能力,可以用数字表示,以便跟踪、比较和设置门禁。“看起来很安全”不是度量;带置信区间的攻击成功率才是。

本课将把红队测试发现转化为严谨的指标。

攻击成功率

核心指标是攻击成功率(ASR):攻破您防御措施的攻击测试用例所占的比例。数值越低越好。请报告总体数值,并按类别和技术分别细分,这样您就能知道自己的薄弱环节在哪里。

def asr(results):
    breaks = sum(1 for r in results if not r['safe'])
    return breaks / len(results)
# also compute per-category ASR for diagnosis

按严重性加权

原始 ASR 会将一次无关紧要的信息泄露和一次 PII 倾倒视为同等情况。请计算按严重性加权的分数,让严重失败对指标产生主要影响,避免少数高影响漏洞被大量低影响的通过结果掩盖。

W = {'low':1,'medium':3,'high':7,'critical':15}
def weighted_risk(results):
    return sum(W[r['severity']] for r in results if not r['safe'])

置信区间,而非点估计

ASR 是根据有限样本得出的估计值,因此应报告不确定性。测试套件较小时,区间会很宽;从 8% 降至 6% 可能只是噪声。请使用二项式置信区间,并且只对超出该区间的变化采取行动。

from statsmodels.stats.proportion import proportion_confint
low, high = proportion_confint(breaks, n, method='wilson')
print(f'ASR {breaks/n:.3f} CI [{low:.3f}, {high:.3f}]')

误报的对应指标

没有可用性的稳健性毫无价值。请将 ASR 与过度拒答率结合起来:在独立的干净数据集中测量被错误拦截的无害请求所占的比例。若加固措施导致过度拒答率激增,就只是用一种失败换取另一种失败。

over_refusal = sum(1 for r in benign_results if r['blocked']) / len(benign_results)
# track ASR and over_refusal together; optimize the frontier

攻击效率

度量攻击时,不仅要关注攻击是否成功,还要关注攻破它有多难。请跟踪攻破所需的查询次数或轮次:一次尝试就能攻破远比需要精心设计 20 轮更糟糕。即使 ASR 持平,跨版本逐渐增加的攻破所需工作量也表明稳健性正在提升。

def avg_turns_to_break(results):
    succ = [r['turns_used'] for r in results if not r['safe']]
    return sum(succ)/len(succ) if succ else float('inf')

校准判定器

如果由 LLM 判定器评估成功与否,那么您的指标质量不会超过该判定器。请定期将判定器 verdict 与人工标注进行比较,并报告判定器的精确率和召回率。过于宽松的判定器会低估 ASR,造成虚假的信心。

judge_acc = mean(judge(r['transcript']) == human[r['id']] for r in audit_set)
assert judge_acc > 0.9, 'recalibrate judge before trusting ASR'

分层报告

单一的汇总值会掩盖风险。请按类别、技术、单轮与多轮、直接与间接分别切分指标。总体 ASR 为 3% 可能掩盖间接工具滥用达到 40% 的 ASR,而后者才是应当推动路线图的数字。

跨版本跟踪趋势

稳健性是相对的,也受时间限制。请保存每次测试套件运行的结果,并以模型版本和配置作为索引,在各个版本发布之间绘制 ASR 和加权风险的变化图表。目标是持续改进并避免任何回归,像关注其他可靠性 SLO 一样关注它。

history.append({'version': cfg.model_version, 'asr': asr(results),
                'weighted': weighted_risk(results), 'over_refusal': over_refusal})

设置发布门禁

将指标转化为策略。例如,门禁可以要求:严重问题的 ASR 必须为 0,总体 ASR 低于阈值,不能出现超出置信区间的回归,并且过度拒答率低于上限。这样,稳健性就成为发布的硬性要求,而不是可有可无的加分项。

def passes_gate(m, prev):
    return (m['critical_asr'] == 0
            and m['asr'] < 0.05
            and m['asr'] <= prev['asr'] + ci_margin
            and m['over_refusal'] < 0.02)

警惕对测试套件过拟合

如果直接针对可见的测试套件调整防御措施,您可能会通过测试,却仍然容易受到未见过的攻击。请留出一个私有攻击集,轮换测试用例,并让攻击者模型持续探索。在静态测试套件上取得满分是一个警告信号,而不是胜利。

快速检查

您的总体 ASR 只有 3%,但利益相关者却因一次现实世界中的工具滥用事件感到意外。哪种度量实践最有可能更早暴露这一风险?

回顾

度量稳健性:

  • 攻击成功率是核心指标;应按严重性对其加权。
  • 报告置信区间,并将 ASR 与过度拒答率结合起来。
  • 跟踪攻击效率(攻破所需的轮次或查询次数),并校准判定器。
  • 进行分层报告,跨版本跟踪趋势,并执行发布门禁。
  • 留出私有攻击,以避免对测试套件过拟合。

您已完成红队测试和对抗性评估,也完成了高级 PromptLab 学习路线。

常见问题解答

「衡量鲁棒性」课时是免费的吗?

是的 — 「衡量鲁棒性」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。

「衡量鲁棒性」这节课中我会学到什么?

评估系统抵抗攻击的能力。 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Prompt Engineering 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「衡量鲁棒性」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Prompt Engineering 课中编写并运行代码吗?

能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. LLM 红队测试基础
  2. 越狱技术
  3. 构建攻击测试套件
  4. 衡量鲁棒性
← 返回 AI Prompt Engineering