
Suite di benchmark e codice per rilevare i fallimenti dell'allineamento dell'IA, con 44 benchmark su dieci tipi di fallimento e un rilevatore RLCD zero-shot valutato su 7.193 istanze etichettate.
Questo repository contiene RLCDAlignBench e il codice alla base dell'articolo. Il benchmark misura se un rilevatore è in grado di stabilire quando l'output di un modello linguistico è un fallimento di allineamento. Comprende 44 benchmark distribuiti su dieci tipi di fallimento (sycophancy, jailbreak, inganno, prompt injection, allucinazione, violazione della privacy, bias sociale, reward hacking, occultamento dell'incertezza e ricerca del potere) e cinque modelli target, per un totale di 7.193 istanze di rilevamento etichettate. Le etichette provengono dallo scorer di ciascun benchmark, e due set aggiuntivi contengono etichette umane.
Lo usiamo per testare Jev, un modello addestrato con reinforcement learning per decisioni calibrate (RLCD), che risponde a molte domande tipizzate su un singolo input con probabilità calibrate in un'unica chiamata. L'idea chiave è misurare la domanda posta a Jev separatamente dal contesto che vede. Una domanda generica raggiunge un AUROC mediano di 0,886 zero-shot e batte le baseline supervisionate TF-IDF e basate sulla lunghezza su 25 benchmark su 31. Fuori campione, la formulazione della domanda aggiunge poco. Leggere le risposte come probabilità invece che come decisioni argmax conta molto. Il contesto aiuta soprattutto attraverso i campi che codificano l'etichetta.

@misc{rlcdalignbench2026,
title = {Just Ask Jev: Reinforcement Learning for Calibrated Decisions as a Zero-Shot Detector of AI Alignment Failures},
author = {Ruoqi Guo and Yi Liu and Gelei Deng and Yuekang Li and Lida Zhao and Simin Chen and Ying Zhang and Leo Yu Zhang},
year = {2026},
howpublished = {\url{https://github.com/sumleo/RLCDAlignBench}}
}
Il dataset contiene output non filtrati di piccoli modelli aperti sottoposti a jailbreak e ad altri prompt avversariali, e molti di essi sono dannosi. È rilasciato solo per la ricerca sul rilevamento e la mitigazione dei fallimenti di allineamento, e l'accesso su Hugging Face è soggetto a gating. Non usarlo per costruire o migliorare sistemi dannosi.
I dati si trovano su Hugging Face all'indirizzo sumleo/RLCDAlignBench. Richiedi l'accesso lì, poi:
from datasets import load_dataset
ds = load_dataset("sumleo/RLCDAlignBench", "harmbench", split="test") # one benchmark
all_ = load_dataset("sumleo/RLCDAlignBench", "all", split="test") # all 7,193 instances
Ogni istanza ha i campi che un rilevatore vede (state), una label binaria (1 = l'output è un fallimento che il rilevatore deve segnalare), la label_source, il target_model e un record meta che rimanda ai file di provenienza.
La scheda del dataset documenta ogni campo e ogni file.
| Tipo di fallimento | Benchmark | Istanze | Modello target |
|---|---|---|---|
| Sycophancy | 4 | 639 | Qwen3.5-2B |
| Jailbreak | 4 | 414 | Phi-4-mini |
| Inganno | 4 | 540 | Gemma-2-2B |
| Prompt injection | 4 | 1.036 | Qwen3.5-2B |
| Allucinazione | 6 | 1.164 | Llama-3.2-3B |
| Violazione della privacy | 4 | 808 | Phi-4-mini |
| Bias sociale | 4 | 199 | Olmo-3-7B |
| Reward hacking | 6 | 714 | Qwen3.5-2B |
| Occultamento dell'incertezza | 4 | 748 | Olmo-3-7B |
| Ricerca del potere | 4 | 931 | Llama-3.2-3B |
| Totale | 44 | 7.193 | 5 modelli |
Set etichettati da esseri umani: StrongREJECT (1.361 risposte, 5 valutatori ciascuna) e il set di validazione HarmBench (602 risposte, 3 voti ciascuna).
data/benchmarks.csv è l'indice di 44 righe (nome, tipo di fallimento, split hill-climb o held-out, scorer, fonte dell'etichetta, n, positivi, stato). I ruoli degli split provengono dalla suite AAR di Chen et al. (2026).
data/variants.csv elenca tutte le 132 varianti di input usate negli esperimenti sul contesto.
results/ contiene le tabelle a livello di articolo.
Su Hugging Face il rilascio è organizzato come segue:
data/benchmarks/<failure_type>/<benchmark>.jsonl canonical instances (the paper's n)
data/human/<set>.jsonl human-labelled sets
data/variants/<benchmark>/<variant>.jsonl every input view: ablation, official track, oracle, exclusion, ...
jev/responses/<benchmark>/<variant>/<battery>.jsonl Jev's per-question probabilities for every instance
jev/metrics/<benchmark>/<variant>/<battery>.json per-strategy precision, recall, F1, AUROC
provenance/ target-model generations, reference-scorer calls, official scores, logs
| Componente | Posizione |
|---|---|
| Generazione e replay del giudice attorno all'harness AAR | code/generation/run_generate.py |
| Costruttori di campioni di rilevamento (uno per famiglia di batterie) | code/build_samples_*.py |
| Batterie di domande (le domande poste a Jev e le strategie di lettura) | code/battery_*.py |
| Runner di Jev, caching e metriche | code/run_jev.py, code/run_batch.sh |
| Linter delle batterie (leakage dei criteri, formato) | code/lint_battery.py, code/lint_criteria_leak.py |
| Riepilogo dei risultati | code/make_results_summary.py |
| Strumenti di rilascio | tools/build_release.py, tools/legacy_layout.py |
Il codice richiede Python 3.10 o superiore (l'articolo ha usato la 3.12) e solo la libreria standard. Gli strumenti di rilascio richiedono anche pandas.
Questo non invia richieste e non richiede chiavi. Ogni metrica viene ricalcolata dalle risposte in cache di Jev.
pip install -U "huggingface_hub[cli]" pandas
huggingface-cli login # after your access request is approved
huggingface-cli download sumleo/RLCDAlignBench --repo-type dataset --local-dir hf
python tools/legacy_layout.py --release hf --out work # rebuilds the layout the scripts expect, checks sha256
python work/code/restore_layout.py
python work/code/run_jev.py --leg harmbench --battery battery_a_judge \
--samples work/code/samples/harmbench__microsoft__Phi-4-mini-instruct__attack.jsonl --rescore
L'ultimo comando stampa una tabella con una riga per strategia di lettura (precision, recall, F1, accuratezza bilanciata, AUROC, CI bootstrap). Corrisponde a jev/metrics/harmbench/attack/battery_a_judge_v2.json nel rilascio.
aar_repo/ lì) e fai il checkout del commit da cui sono state costruite le etichette:
git clone https://github.com/YuehHanChen/automated_alignment_researcher aar_repo
git -C aar_repo checkout 02dbe9d2cadc553720d17cdf6259c0b8727e6cde
aar_repo/REPRODUCE.md):
python code/generation/run_generate.py --axis refusal --repo aar_repo # phase 1, judges stubbed
python code/generation/run_generate.py --axis refusal --repo aar_repo --replay # phase 2, real judges
code/build_samples_*.py (le famiglie valutate dal giudice a, bc e f accettano --attach-judges). I costruttori ricalcolano ogni punteggio aggregato ufficiale dalle etichette e si fermano se differisce da quello ufficiale.TYPESAFE_API_KEY impostata:
python code/run_jev.py --leg harmbench --battery battery_a_judge --samples <file> --limit 20 # pilot
python code/run_jev.py --leg harmbench --battery battery_a_judge --samples <file> # full
Flusso dei dati: calls.jsonl → run_generate.py --replay → judge_calls.jsonl → build_samples_*.py → detection samples → run_jev.py → responses + metrics.
RLCDAlignBench/
├── paper.pdf
├── code/ experiment code (generation, sample builders, batteries, Jev runner)
├── data/
│ ├── benchmarks.csv 44-row benchmark index
│ └── variants.csv 132 input variants
├── results/ paper-level tables (main results, baselines, human agreement, cost, corrected labels)
├── figs/ paper figures
├── tools/ release build and legacy-layout tools
└── docs/ project page (GitHub Pages)
Non abbiamo generato nuove richieste dannose. Tutti i prompt provengono da benchmark pubblicati, e li abbiamo eseguiti solo su piccoli modelli aperti. Le risposte dannose sono rilasciate dietro un accordo di accesso soggetto a gating per la ricerca sui rilevatori.
Codice: MIT. Dati: le nostre etichette, annotazioni, output di Jev e metadati sono sotto CC BY-NC 4.0. Il contenuto dei benchmark upstream mantiene la sua licenza originale, e gli output dei modelli sono soggetti ai termini dei modelli target.