本文へスキップ

ガイド

リスク上限

上限は、何かがうまくいかない頻度、または程度を抑えるものです。安全でない回答、漏洩したデータ、成功した攻撃、コスト、レイテンシなどが対象です。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: 0

max: は区間に基づいて判断します。ルールは、区間の上端が上限以下であれば合格し、下端が上限を上回れば不合格になり、その間であれば 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: 0
oloproof scores import before.csv --policy release.yaml

promptfoo はモデルで採点するので、Oloproof はそれをほかのジャッジと同じように扱います。人がその採点のサンプルにラベルを付けるまでは、それはリリースを判断できず、ルールは evaluator_not_validated で止まります(ジャッジを確認する)。2 つのバージョンを比較するには、両方で同じ redteam.yaml を実行してください。ケースとはそのファイル内での攻撃の位置であり、攻撃をもう一度生成すると別のケースになります。

上限が示さないこと

  • 割合の上限は、スイートが標本とする母集団についてのものです。レッドチームのスイートは誰かが書いた攻撃であって実際のトラフィックの標本ではないので、その割合はそれらの攻撃にわたる割合です。そこでは件数のほうが明確なルールになることがよくあります。
  • どちらの種類も、どのケースも試していない失敗はカバーしません。抑えられるのは、実行されたものだけです。
  • 合格した上限は、リリースの判断のためのエビデンスであり、安全性の認証ではありません。

次に読むページ

  • CI のゲート では、ポリシーファイル、ブロックと警告、終了コードを扱います。
  • セカンドオピニオン では、すべてのレシピが書き出すスコアファイルを扱います。
  • ジャッジ では、採点者が判断を許される前に人と照らし合わせて測定することを扱います。