Vai al contenuto

Guide

Tetti di rischio

Un tetto limita quanto spesso, o quanto, qualcosa va storto: risposte non sicure, dati divulgati, attacchi che riescono, un costo o una latenza. Oloproof misura i tetti che la tua policy dichiara, sui casi che la tua suite contiene. Non scrive attacchi e non cerca nuovi fallimenti; se lo fa un altro strumento, Oloproof legge i risultati per caso di quello strumento e decide il tetto su di essi.

Due tipi di tetto

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: decide su un intervallo. La regola passa quando il limite superiore dell'intervallo è pari o inferiore al tetto, fallisce quando il suo limite inferiore è al di sopra, ed è INSUFFICIENT_EVIDENCE nel mezzo. L'intervallo è bilaterale al confidence_level della policy, 95% per impostazione predefinita, e un tetto ne legge solo l'estremità superiore, quindi un sistema il cui tasso reale è sopra il tetto passa al massimo il 2.5% delle volte, quando i suoi casi sono indipendenti (una suite che dichiara dei cluster viene letta con un intervallo che ne tiene conto, Cluster). Per un criterio di pass o fail, il tasso è la quota di casi che passano, quindi il criterio deve passare quando è accaduta la cosa da limitare (unsafe passa su una risposta non sicura). Una soglia minima sul criterio opposto decide allo stesso modo: min: 0.98 su un criterio che passa su una risposta sicura è la stessa regola di max: 0.02 su uno che passa su una risposta non sicura.

max_failures: conta. Legge i casi che non sono passati nella suite così come è stata eseguita, senza intervallo, e non afferma nulla oltre quei casi. Fallisce non appena il conteggio supera il limite; un caso senza verdetto conta contro il limite finché non ne ha uno, quindi una suite con verdetti mancanti che potrebbero portarla oltre il limite è INSUFFICIENT_EVIDENCE, non un pass. Usalo per ciò che non deve mai accadere in una suite che hai scritto apposta, dove un tasso su una popolazione non significherebbe nulla.

Quanti casi servono a un tetto

Un tetto basso richiede molti casi, anche quando nulla va storto. Al 95%, con l'intervallo esatto che Oloproof usa per un tasso di pass o fail:

TettoNessun fallimento osservatoUn fallimentoDue fallimenti
5%72 casi110 casi142 casi
2%183 casi277 casi359 casi
1%368 casi555 casi720 casi

Senza fallimenti osservati, servono circa 3.7 diviso il tetto. Una suite più piccola di così non può passare la regola qualunque cosa faccia il sistema, e il gate lo dice: un tetto non deciso è INSUFFICIENT_EVIDENCE, con una riga che indica quanti casi in più lo deciderebbero.

Leggere i risultati di uno strumento di red team

Uno strumento di red team scrive gli attacchi e valuta ogni risposta. I suoi voti per caso sono ciò di cui un tetto ha bisogno, e oloproof scores import li legge (Un secondo parere). La cartella recipes/ dell'esempio contiene una ricetta per 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

Ogni attacco diventa un caso, e il suo voto diventa resisted, che passa quando il bersaglio ha resistito. Le righe che promptfoo non ha potuto valutare non hanno verdetto e contano come mancanti. Una policy per questi risultati:

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 valuta con un modello, e Oloproof lo tratta come tratta qualsiasi giudice: finché le persone non hanno etichettato un campione dei suoi voti, non può decidere un rilascio, e le regole si fermano a evaluator_not_validated (Verificare il giudice). Per confrontare due versioni, esegui lo stesso redteam.yaml su entrambe: un caso è la posizione dell'attacco in quel file, e generare di nuovo gli attacchi produce altri casi.

Che cosa un tetto non dice

  • Un tetto su un tasso riguarda la popolazione che la tua suite campiona. Una suite di red team è fatta di attacchi che qualcuno ha scritto, non di un campione di traffico reale, quindi il suo tasso è un tasso su quegli attacchi; lì il conteggio è spesso la regola più chiara.
  • Nessuno dei due tipi copre un fallimento che nessun caso mette alla prova. Il limite riguarda ciò che è stato eseguito.
  • Un tetto che passa è evidenza per la tua decisione di rilascio, non una certificazione di sicurezza.

Dove andare dopo

  • Gating in CI: il file di policy, block e warn, e i codici di uscita.
  • Un secondo parere: il file di punteggi che ogni ricetta scrive.
  • Giudici: misurare chi assegna i voti rispetto alle persone prima che possa decidere.