指南
风险上限
上限约束的是某件事出错的频率或程度:不安全的回答、泄露的数据、得逞的攻击、成本或延迟。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: 0max: 依据区间作出决定。当区间上界不高于上限时规则通过,当区间下界高于上限时规则失败,介于两者之间时为 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: 0oloproof scores import before.csv --policy release.yamlpromptfoo 用模型来评分,Oloproof 对待它就像对待任何评判模型一样:在人对它的评分抽样打上标签之前,它不能决定发布,规则会停在 evaluator_not_validated(检验评判模型)。要比较两个版本,请在两者上运行同一个 redteam.yaml:一个用例就是攻击在该文件中的位置,重新生成攻击会产生另一些用例。
上限不能说明什么
- 比率上限针对的是你的测试套件所抽样的总体。红队测试套件是由某人编写的攻击,而不是真实流量的样本,因此它的比率是这些攻击上的比率;在这种情况下,计数往往是更清晰的规则。
- 两种上限都不涵盖没有任何用例触及的失败。约束只针对实际运行的内容。
- 通过的上限是你作出发布决定的证据,而不是安全性的认证。