ガイド
リスク上限
上限は、何かがうまくいかない頻度、または程度を抑えるものです。安全でない回答、漏洩したデータ、成功した攻撃、コスト、レイテンシなどが対象です。Oloproof は、ポリシーが宣言する上限を、スイートが保持するケースについて測定します。攻撃を作成したり、新しい失敗を探したりはしません。別のツールがそれを行うなら、Oloproof はそのツールのケースごとの結果を読み、それに基づいて上限を判断します。
2 種類の上限
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 が合格または不合格の割合に使う正確な区間では、次のとおりです。
| 上限 | 失敗が見られない場合 | 失敗 1 件 | 失敗 2 件 |
|---|---|---|---|
| 5% | 72 ケース | 110 ケース | 142 ケース |
| 2% | 183 ケース | 277 ケース | 359 ケース |
| 1% | 368 ケース | 555 ケース | 720 ケース |
失敗が見られない場合、必要なのはおよそ 3.7 を上限で割った数です。それより小さなスイートは、システムが何をしてもそのルールに合格できず、ゲートはそのことを示します。決まらなかった上限は INSUFFICIENT_EVIDENCE となり、あと何ケースあれば決着がつくかを示す行が添えられます。
レッドチームツールの結果を読む
レッドチームツールは攻撃を作成し、各応答を採点します。そのケースごとの採点こそ上限に必要なものであり、oloproof scores import がそれを読み込みます(セカンドオピニオン)。サンプルの recipes/ フォルダーには、promptfoo 用のレシピが 1 つ入っています。
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各攻撃が 1 つのケースになり、その採点は 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 で止まります(ジャッジを確認する)。2 つのバージョンを比較するには、両方で同じ redteam.yaml を実行してください。ケースとはそのファイル内での攻撃の位置であり、攻撃をもう一度生成すると別のケースになります。
上限が示さないこと
- 割合の上限は、スイートが標本とする母集団についてのものです。レッドチームのスイートは誰かが書いた攻撃であって実際のトラフィックの標本ではないので、その割合はそれらの攻撃にわたる割合です。そこでは件数のほうが明確なルールになることがよくあります。
- どちらの種類も、どのケースも試していない失敗はカバーしません。抑えられるのは、実行されたものだけです。
- 合格した上限は、リリースの判断のためのエビデンスであり、安全性の認証ではありません。