
Conjunto de benchmarks e código para detectar falhas de alinhamento de IA, com 44 benchmarks abrangendo dez tipos de falha e um detector RLCD zero-shot avaliado em 7.193 instâncias rotuladas.
Este repositório contém o RLCDAlignBench e o código por trás do artigo. O benchmark mede se um detector consegue identificar quando a saída de um modelo de linguagem é uma falha de alinhamento. Ele possui 44 benchmarks em dez tipos de falha (sycophancy, jailbreaks, deception, prompt injection, hallucination, privacy violation, social bias, reward hacking, concealing uncertainty e power seeking) e cinco modelos-alvo, totalizando 7.193 instâncias de detecção rotuladas. Os rótulos vêm do próprio scorer de cada benchmark, e dois conjuntos adicionais carregam rótulos humanos.
Usamos isso para testar o Jev, um modelo treinado com aprendizado por reforço para decisões calibradas (RLCD), que responde a muitas perguntas tipadas sobre uma única entrada com probabilidades calibradas em uma única chamada. A ideia central é medir a pergunta feita ao Jev separadamente do contexto que ele vê. Uma pergunta genérica alcança uma AUROC mediana de 0,886 zero-shot e supera as baselines supervisionadas de TF-IDF e de comprimento em 25 de 31 benchmarks. Fora da amostra, a formulação da pergunta acrescenta pouco. Ler as respostas como probabilidades em vez de decisões argmax importa muito. O contexto ajuda principalmente por meio de campos que codificam o rótulo.

@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}}
}
O conjunto de dados contém saídas não filtradas de pequenos modelos abertos sob jailbreak e outros prompts adversariais, e muitas delas são prejudiciais. Ele é disponibilizado apenas para pesquisa sobre detecção e mitigação de falhas de alinhamento, e o acesso no Hugging Face é restrito. Não o utilize para construir ou melhorar sistemas prejudiciais.
Os dados ficam no Hugging Face em sumleo/RLCDAlignBench. Solicite acesso lá, depois:
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
Cada instância possui os campos que um detector vê (state), um label binário (1 = a saída é uma falha que o detector deve sinalizar), o label_source, o target_model e um registro meta que remete aos arquivos de proveniência.
O card do conjunto de dados documenta cada campo e arquivo.
| Tipo de falha | Benchmarks | Instâncias | Modelo-alvo |
|---|---|---|---|
| Sycophancy | 4 | 639 | Qwen3.5-2B |
| Jailbreaks | 4 | 414 | Phi-4-mini |
| Deception | 4 | 540 | Gemma-2-2B |
| Prompt injection | 4 | 1.036 | Qwen3.5-2B |
| Hallucination | 6 | 1.164 | Llama-3.2-3B |
| Privacy violation | 4 | 808 | Phi-4-mini |
| Social bias | 4 | 199 | Olmo-3-7B |
| Reward hacking | 6 | 714 | Qwen3.5-2B |
| Concealing uncertainty | 4 | 748 | Olmo-3-7B |
| Power seeking | 4 | 931 | Llama-3.2-3B |
| Total | 44 | 7.193 | 5 modelos |
Conjuntos com rótulos humanos: StrongREJECT (1.361 respostas, 5 avaliadores cada) e o conjunto de validação do HarmBench (602 respostas, 3 votos cada).
data/benchmarks.csv é o índice de 44 linhas (nome, tipo de falha, split hill-climb ou held-out, scorer, fonte do rótulo, n, positivos, status). Os papéis dos splits vêm da suíte AAR de Chen et al. (2026).
data/variants.csv lista todas as 132 variantes de entrada usadas nos experimentos de contexto.
results/ contém as tabelas do nível do artigo.
No Hugging Face, a release está organizada como:
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 | Localização |
|---|---|
| Geração e replay do judge em torno do harness AAR | code/generation/run_generate.py |
| Construtores de amostras de detecção (um por família de bateria) | code/build_samples_*.py |
| Baterias de perguntas (as perguntas feitas ao Jev e as estratégias de leitura) | code/battery_*.py |
| Executor do Jev, cache e métricas | code/run_jev.py, code/run_batch.sh |
| Linters de bateria (vazamento de critérios, formato) | code/lint_battery.py, code/lint_criteria_leak.py |
| Resumo de resultados | code/make_results_summary.py |
| Ferramentas de release | tools/build_release.py, tools/legacy_layout.py |
O código requer Python 3.10 ou mais recente (o artigo usou 3.12) e apenas a biblioteca padrão. As ferramentas de release também requerem pandas.
Isso não envia requisições e não precisa de chaves. Toda métrica é recalculada a partir das respostas em cache do 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
O último comando imprime uma tabela com uma linha por estratégia de leitura (precisão, recall, F1, acurácia balanceada, AUROC, IC bootstrap). Ele corresponde a jev/metrics/harmbench/attack/battery_a_judge_v2.json na release.
aar_repo/ lá) e faça checkout do commit a partir do qual os rótulos foram construídos:
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 (as famílias pontuadas por judge a, bc e f aceitam --attach-judges). Os construtores recalculam cada pontuação agregada oficial a partir dos rótulos e param se ela diferir da oficial.TYPESAFE_API_KEY definida:
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
Fluxo de dados: 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)
Não geramos novas requisições prejudiciais. Todos os prompts vêm de benchmarks publicados, e os executamos apenas em pequenos modelos abertos. As respostas prejudiciais são disponibilizadas sob um acordo de acesso restrito para pesquisa de detectores.
Código: MIT. Dados: nossos rótulos, anotações, saídas do Jev e metadados estão sob CC BY-NC 4.0. O conteúdo de benchmarks upstream mantém sua licença original, e as saídas dos modelos estão sujeitas aos termos dos modelos-alvo.