
Código, datos derivados y resultados para: Evaluating Baseline Detectors of Hijacked LLM Agents Under Rare Attacks and Distribution Shift
Código, datos derivados, archivos de resultados y cada llamada de monitor para el artículo de Mahmoud Abbasi (Universidad de Salamanca), Juan M. Núñez V. (AIR Institute, Salamanca) y Amin Shahraki (Universidad de Oslo).
El artículo evalúa detectores que señalan agentes LLM secuestrados a partir de sus trazas de llamadas a herramientas: regresión logística sobre características conductuales y combinadas (LR-B, LR-C), un modelo de secuencia GRU, un transformer sobre embeddings de paso congelados (SE), una referencia de contenido TF-IDF, y el monitor de acciones AlignmentCheck publicado con dos backbones (MON-L, Llama 3.3 70B w4a16; MON-A, Claude Sonnet 5.5). La evaluación se ejecuta con una prevalencia de ataque controlada, bajo cobertura de herramientas graduada y bajo cambios de mundo, tarea, dominio y entre benchmarks en AgentDrift y AgentDojo.
EXTENDED_REPORT.pdf es el informe extendido citado por el artículo. Es la versión larga de este trabajo (38 páginas, texto principal
y suplemento), escrita antes de que se uniera el tercer autor, y presenta cada análisis resumido en el artículo, cada
plan de análisis con sus desviaciones, y todas las tablas suplementarias.
| Ruta | Contenido |
|---|---|
EXTENDED_REPORT.pdf | El informe extendido (véase arriba) |
featurise.py, evalkit.py, gru_detector.py, baseline_drift.py | Módulos compartidos: características, métricas y bootstrap, la GRU, las referencias de Markov e Isolation Forest |
agentdojo_extract.py | Extrae las trazas de AgentDojo con emparejamiento posicional de llamadas a herramientas y observaciones |
agentdojo_traces.jsonl, agentdojo_failed.jsonl | Trazas de AgentDojo extraídas (población P0, 392 benignas y 2.294 comprometidas) y los 4.987 ataques fallidos |
rerun_r1r3.py, ablation.py, world_disjoint_r1.py, r4_control.py, gru_ladder.py, gru_r3_diagnostic.py, pre_ablation_audit.py | Scripts de experimentos de la primera versión, reejecutados sobre la extracción corregida, con sus archivos de resultados (*.json) |
R4_CONTROL.md, PRE_ABLATION_DESIGN.md, GRU_PREREGISTRATION.md, REVISION_ANALYSIS_PLAN.md | Los cuatro planes de análisis internos de los primeros estudios |
SENCODER_PREREGISTRATION.md, revision/sencoder_run/SENCODER_PREREGISTRATION.amendment*.md, SENCODER_RESULTS.md | Plan, enmiendas y resultados del estudio SE |
MONITOR_PREREGISTRATION.md, revision/monitor_run/MONITOR_PREREGISTRATION.*.md | Plan del estudio del monitor, su primera versión y las enmiendas 1 a 4 |
revision/ | Constructores de cachés de predicciones, los flujos de análisis, sus archivos de resultados y resúmenes, DEVIATIONS.md, RESULTS_SUMMARY.md, PLAN_MANIFEST.txt (un registro con marca de tiempo con el SHA-256 de cada plan y resultado) y la guía de reproducibilidad REPRODUCIBILITY.md |
revision/sencoder_*.py, revision/sencoder_results.json, revision/sencoder_summary.md, revision/sencoder_run/ | SE: scripts de embedding, entrenamiento y análisis, resultados, registros del clúster y manifiestos |
revision/monitor_render.py, monitor_score_vllm.py, monitor_score_api.py, monitor_detector.py, monitor_tables.py | Estudio del monitor: una llamada a AlignmentCheck por cada paso del agente, puntuación con vLLM (MON-L) y con la interfaz por lotes del proveedor (MON-A), el análisis congelado y sus tablas |
revision/monitor_results.json, revision/monitor_summary.md | Resultados del análisis congelado del monitor |
revision/monitor_run/ | Cada llamada al monitor y cada salida bruta del monitor con su puntuación (véase revision/monitor_run/README.md) |
revision/cache/ | Archivos de validación y resumen de las cachés de predicciones. Las predicciones y los embeddings en caché en sí (unos 800 MB) no se incluyen y se reconstruyen mediante los scripts |
paper/ | Scripts que generan cada tabla a partir de los archivos de resultados, con sus salidas: tables/ (primeros estudios), tables_sencoder/ (añade SE) y tables_monitor/ (añade el monitor; estas son las tablas del artículo y del informe extendido) |
paper_v06/make_figures_v06.py, paper_v06/fig_v06_* | Las figuras del artículo |
MANUSCRIPT_SOURCE.*.md, SUPPLEMENT_SOURCE.*.md | Fuentes del informe extendido, en las que paper/build_sencoder.py y paper/build_monitor.py insertan las tablas generadas |
archive_v0.3/ | Resultados y la extracción anterior de AgentDojo de la primera versión, conservados para las comparaciones del informe extendido |
tests/ | Prueba unitaria de la extracción de AgentDojo |
THIRD_PARTY/ | Licencias de AgentDojo y del escáner AlignmentCheck incluido (LlamaFirewall) |
Los resultados del detector se calcularon con CPython 3.10.4 en una CPU. SE se ejecutó en un nodo de un clúster Slurm, y MON-L
en una NVIDIA H100 80GB HBM3 con vLLM 0.29.0 (versiones en revision/monitor_run/mon_l/env.json).
pip install -r revision/requirements-lock.txt --extra-index-url https://download.pytorch.org/whl/cpu
Los scripts que leen los benchmarks originales esperan dos variables de entorno que apunten a clones locales.
git clone https://github.com/Asif-0209/AgentDrift && git -C AgentDrift checkout 014a514f
git clone https://github.com/ethz-spylab/agentdojo && git -C agentdojo checkout 089ed468
export AGENTDRIFT=$PWD/AgentDrift
export AGENTDOJO=$PWD/agentdojo
Las tablas y figuras se regeneran a partir de los archivos de resultados de este repositorio. build_monitor.py importa el
módulo de análisis del monitor, que lee AGENTDRIFT cuando se importa, por lo que esa variable debe estar definida.
cd paper
python gen_tables_v04.py # paper/tables/
python build_sencoder.py # paper/tables_sencoder/
python build_monitor.py # paper/tables_monitor/, the tables of the paper
cd ../paper_v06
python make_figures_v06.py # paper_v06/fig_v06_*.pdf and .png
Los dos scripts de compilación también ensamblan el LaTeX del informe extendido a partir de MANUSCRIPT_SOURCE.*.md y
SUPPLEMENT_SOURCE.*.md.
La repetición de los experimentos a partir de los benchmarks sigue revision/REPRODUCIBILITY.md para los detectores, el plan de SE
con revision/sencoder_run/ para SE, y el plan del monitor con revision/monitor_run/README.md para el monitor.
<repo>,
$AGENTDRIFT, $AGENTDOJO o <local>. Ningún resultado numérico fue modificado. Los valores SHA-256 en PLAN_MANIFEST.txt y
repro_checks.json se refieren a los archivos tal como estaban en la máquina de análisis, por lo que no coinciden con los archivos en
los que se reemplazó una ruta. revision/offline_driver.sh también se hizo portable. No se modificó ningún script de Python, por lo que
algunos scripts conservan una ruta predeterminada local, que las variables de entorno sobrescriben.*.jsonl.gz) con contenido sin cambios,
por lo que los valores SHA-256 en los manifiestos de llamadas son válidos para los archivos descomprimidos.