
Conjunto de benchmarks y código para detectar fallos de alineación de IA, con 44 benchmarks que abarcan diez tipos de fallos y un detector RLCD zero-shot evaluado en 7.193 instancias etiquetadas.
Este repositorio contiene RLCDAlignBench y el código detrás del artículo. El benchmark mide si un detector puede distinguir cuándo la salida de un modelo de lenguaje es un fallo de alineación. Contiene 44 benchmarks en diez tipos de fallo (sycophancy, jailbreaks, decepción, inyección de prompt, alucinación, violación de privacidad, sesgo social, reward hacking, ocultación de incertidumbre y búsqueda de poder) y cinco modelos objetivo, para 7.193 instancias de detección etiquetadas. Las etiquetas provienen del propio scorer de cada benchmark, y dos conjuntos adicionales incluyen etiquetas humanas.
Lo usamos para evaluar a Jev, un modelo entrenado con aprendizaje por refuerzo para decisiones calibradas (RLCD), que responde muchas preguntas tipadas sobre una misma entrada con probabilidades calibradas en una sola llamada. La idea clave es medir la pregunta que se le hace a Jev por separado del contexto que ve. Una pregunta genérica alcanza una AUROC mediana de 0,886 en zero-shot y supera a las líneas base supervisadas de TF-IDF y de longitud en 25 de 31 benchmarks. Fuera de muestra, la formulación de la pregunta aporta poco. Leer las respuestas como probabilidades en lugar de decisiones argmax importa mucho. El contexto ayuda principalmente a través de campos que codifican la etiqueta.

@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}}
}
El conjunto de datos contiene salidas sin filtrar de modelos abiertos pequeños bajo jailbreak y otros prompts adversarios, y muchas de ellas son dañinas. Se publica únicamente para investigación sobre detección y mitigación de fallos de alineación, y el acceso en Hugging Face está restringido. No lo uses para construir o mejorar sistemas dañinos.
Los datos están en Hugging Face en sumleo/RLCDAlignBench. Solicita acceso allí y luego:
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 instancia tiene los campos que ve un detector (state), una label binaria (1 = la salida es un fallo que el detector debe señalar), el label_source, el target_model y un registro meta que enlaza con los archivos de procedencia.
La ficha del conjunto de datos documenta cada campo y archivo.
| Tipo de fallo | Benchmarks | Instancias | Modelo objetivo |
|---|---|---|---|
| Sycophancy | 4 | 639 | Qwen3.5-2B |
| Jailbreaks | 4 | 414 | Phi-4-mini |
| Decepción | 4 | 540 | Gemma-2-2B |
| Inyección de prompt | 4 | 1.036 | Qwen3.5-2B |
| Alucinación | 6 | 1.164 | Llama-3.2-3B |
| Violación de privacidad | 4 | 808 | Phi-4-mini |
| Sesgo social | 4 | 199 | Olmo-3-7B |
| Reward hacking | 6 | 714 | Qwen3.5-2B |
| Ocultación de incertidumbre | 4 | 748 | Olmo-3-7B |
| Búsqueda de poder | 4 | 931 | Llama-3.2-3B |
| Total | 44 | 7.193 | 5 modelos |
Conjuntos etiquetados por humanos: StrongREJECT (1.361 respuestas, 5 evaluadores cada una) y el conjunto de validación de HarmBench (602 respuestas, 3 votos cada una).
data/benchmarks.csv es el índice de 44 filas (nombre, tipo de fallo, split de hill-climb o held-out, scorer, fuente de la etiqueta, n, positivos, estado). Los roles de los splits provienen de la suite AAR de Chen et al. (2026).
data/variants.csv lista las 132 variantes de entrada usadas en los experimentos de contexto.
results/ contiene las tablas a nivel del artículo.
En Hugging Face la publicación se organiza así:
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 | Ubicación |
|---|---|
| Generación y replay del juez en torno al harness AAR | code/generation/run_generate.py |
| Constructores de muestras de detección (uno por familia de baterías) | code/build_samples_*.py |
| Baterías de preguntas (las preguntas hechas a Jev y las estrategias de lectura) | code/battery_*.py |
| Runner de Jev, caché y métricas | code/run_jev.py, code/run_batch.sh |
| Linters de baterías (fuga de criterios, formato) | code/lint_battery.py, code/lint_criteria_leak.py |
| Resumen de resultados | code/make_results_summary.py |
| Herramientas de publicación | tools/build_release.py, tools/legacy_layout.py |
El código necesita Python 3.10 o superior (el artículo usó 3.12) y solo la biblioteca estándar. Las herramientas de publicación también necesitan pandas.
Esto no envía peticiones ni necesita claves. Cada métrica se recalcula a partir de las respuestas en caché de 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
El último comando imprime una tabla con una fila por estrategia de lectura (precision, recall, F1, balanced accuracy, AUROC, bootstrap CI). Coincide con jev/metrics/harmbench/attack/battery_a_judge_v2.json en la publicación.
aar_repo/ allí) y haz checkout del commit desde el que se construyeron las etiquetas:
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 (las familias puntuadas por el juez a, bc y f aceptan --attach-judges). Los constructores recalculan cada puntuación agregada oficial a partir de las etiquetas y se detienen si difiere de la 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
Flujo de datos: 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)
No generamos nuevas peticiones dañinas. Todos los prompts provienen de benchmarks publicados, y solo los ejecutamos en modelos abiertos pequeños. Las respuestas dañinas se publican bajo un acuerdo de acceso restringido para investigación sobre detectores.
Código: MIT. Datos: nuestras etiquetas, anotaciones, salidas de Jev y metadatos están bajo CC BY-NC 4.0. El contenido de los benchmarks upstream conserva su licencia original, y las salidas de los modelos están sujetas a los términos de los modelos objetivo.