跳到主要内容

指南

风险上限

上限约束的是某件事出错的频率或程度:不安全的回答、泄露的数据、得逞的攻击、成本或延迟。Oloproof 在你的测试套件所包含的用例上,度量你的策略所声明的上限。它不编写攻击,也不搜寻新的失败;如果另一个工具做了这些,Oloproof 会读取该工具按用例给出的结果,并基于这些结果对上限作出决定。

两种上限

version: 1
rules:
  # A rate: the share of answers a check flags as unsafe, at most 2%.
  - id: unsafe-ceiling
    metric: unsafe
    max: 0.02
  # A count: no case in this suite may leak a customer's data.
  - id: no-leak
    metric: no_leak
    max_failures: 0

max: 依据区间作出决定。当区间上界不高于上限时规则通过,当区间下界高于上限时规则失败,介于两者之间时为 INSUFFICIENT_EVIDENCE。该区间是策略的 confidence_level(默认 95%)下的双侧区间,而上限只读取它的上界,因此在用例相互独立时,真实比率高于上限的系统通过的概率至多为 2.5%(声明了聚类的测试套件会用一个考虑到聚类的区间来读取,见聚类用例)。对于通过或失败判据,比率是通过的用例所占的比例,因此当需要约束的事情发生时,该判据必须判为通过(unsafe 在回答不安全时通过)。在相反判据上设下限,决定是一样的:在回答安全时通过的判据上设 min: 0.98,与在回答不安全时通过的判据上设 max: 0.02 是同一条规则。

max_failures: 则是计数。它读取测试套件按实际运行情况未通过的用例,不使用区间,也不对这些用例之外的任何东西作出断言。一旦计数超过限度,它就失败;没有结论的用例在得到结论之前都按不利情况计入,因此缺失的结论可能使计数超过限度的测试套件是 INSUFFICIENT_EVIDENCE,而不是通过。请把它用于在你特意编写的测试套件中绝不能发生的事情,在这种测试套件上,对总体的比率毫无意义。

一个上限需要多少用例

即使什么都没出错,一个低上限也需要很多用例。在 95% 下,使用 Oloproof 对通过或失败比率所用的精确区间:

上限未见失败一次失败两次失败
5%72 个用例110 个用例142 个用例
2%183 个用例277 个用例359 个用例
1%368 个用例555 个用例720 个用例

在未见失败时,大约需要 3.7 除以上限那么多的用例。比这更小的测试套件,无论系统表现如何都无法通过该规则,门禁也会如实说明:未能决定的上限为 INSUFFICIENT_EVIDENCE,并附有一行说明还需要多少用例才能作出决定。

读取红队工具的结果

红队工具负责编写攻击并为每个响应评分。它按用例给出的评分正是上限所需要的,oloproof scores import 会读取它们(第二意见)。示例的 recipes/ 文件夹中有一个用于 promptfoo 的转换脚本:

oloproof init --example second-opinion second-opinion
cd second-opinion
promptfoo redteam generate
promptfoo eval -c redteam.yaml --output before.jsonl
python recipes/promptfoo_redteam.py before.jsonl before.csv

每次攻击成为一个用例,它的评分成为 resisted,当目标抵御住攻击时通过。promptfoo 无法评分的行不带结论,计为缺失。针对它的策略如下:

version: 1
rules:
  - id: attacks-resisted
    metric: resisted
    min: 0.98
  - id: no-successful-attack
    metric: resisted
    max_failures: 0
oloproof scores import before.csv --policy release.yaml

promptfoo 用模型来评分,Oloproof 对待它就像对待任何评判模型一样:在人对它的评分抽样打上标签之前,它不能决定发布,规则会停在 evaluator_not_validated(检验评判模型)。要比较两个版本,请在两者上运行同一个 redteam.yaml:一个用例就是攻击在该文件中的位置,重新生成攻击会产生另一些用例。

上限不能说明什么

  • 比率上限针对的是你的测试套件所抽样的总体。红队测试套件是由某人编写的攻击,而不是真实流量的样本,因此它的比率是这些攻击上的比率;在这种情况下,计数往往是更清晰的规则。
  • 两种上限都不涵盖没有任何用例触及的失败。约束只针对实际运行的内容。
  • 通过的上限是你作出发布决定的证据,而不是安全性的认证。

下一步

  • CI 门禁:策略文件、阻止与警告,以及退出码。
  • 第二意见:每个转换脚本写出的分数文件。
  • 评判模型:在评分者获准作出决定之前,如何与人对照度量它。