
Code, données dérivées et résultats pour : Evaluating Baseline Detectors of Hijacked LLM Agents Under Rare Attacks and Distribution Shift
Code, données dérivées, fichiers de résultats et chaque appel de moniteur pour l'article de Mahmoud Abbasi (Université de Salamanque), Juan M. Núñez V. (AIR Institute, Salamanque) et Amin Shahraki (Université d'Oslo).
L'article évalue des détecteurs qui signalent des agents LLM détournés à partir de leurs traces d'appels d'outils : régression logistique sur des caractéristiques comportementales et combinées (LR-B, LR-C), un modèle séquentiel GRU, un transformer sur des embeddings d'étapes gelés (SE), une référence de contenu TF-IDF, et le moniteur d'actions AlignmentCheck publié avec deux backbones (MON-L, Llama 3.3 70B w4a16 ; MON-A, Claude Sonnet 5.5). L'évaluation est menée à prévalence d'attaque contrôlée, sous couverture d'outils graduée et sous des décalages de monde, de tâche, de domaine et inter-benchmarks sur AgentDrift et AgentDojo.
EXTENDED_REPORT.pdf est le rapport étendu cité par l'article. Il s'agit de la version longue de ce travail (38 pages, texte principal
et supplément), rédigée avant l'arrivée du troisième auteur, et présente chaque analyse résumée dans l'article, chaque
plan d'analyse avec ses écarts, et toutes les tables supplémentaires.
| Chemin | Contenu |
|---|---|
EXTENDED_REPORT.pdf | Le rapport étendu (voir ci-dessus) |
featurise.py, evalkit.py, gru_detector.py, baseline_drift.py | Modules partagés : caractéristiques, métriques et bootstrap, le GRU, les références Markov et Isolation Forest |
agentdojo_extract.py | Extrait les traces AgentDojo avec appariement positionnel des appels d'outils et des observations |
agentdojo_traces.jsonl, agentdojo_failed.jsonl | Traces AgentDojo extraites (population P0, 392 bénignes et 2 294 compromises) et les 4 987 attaques infructueuses |
rerun_r1r3.py, ablation.py, world_disjoint_r1.py, r4_control.py, gru_ladder.py, gru_r3_diagnostic.py, pre_ablation_audit.py | Scripts d'expérience de la première version, réexécutés sur l'extraction corrigée, avec leurs fichiers de résultats (*.json) |
R4_CONTROL.md, PRE_ABLATION_DESIGN.md, GRU_PREREGISTRATION.md, REVISION_ANALYSIS_PLAN.md | Les quatre plans d'analyse internes des premières études |
SENCODER_PREREGISTRATION.md, revision/sencoder_run/SENCODER_PREREGISTRATION.amendment*.md, SENCODER_RESULTS.md | Plan, amendements et résultats de l'étude SE |
MONITOR_PREREGISTRATION.md, revision/monitor_run/MONITOR_PREREGISTRATION.*.md | Plan de l'étude du moniteur, sa première version et les amendements 1 à 4 |
revision/ | Générateurs de caches de prédictions, les flux d'analyse, leurs fichiers de résultats et résumés, DEVIATIONS.md, RESULTS_SUMMARY.md, PLAN_MANIFEST.txt (un journal horodaté avec le SHA-256 de chaque plan et résultat) et le guide de reproductibilité REPRODUCIBILITY.md |
revision/sencoder_*.py, revision/sencoder_results.json, revision/sencoder_summary.md, revision/sencoder_run/ | SE : scripts d'embedding, d'entraînement et d'analyse, résultats, journaux de cluster et manifestes |
revision/monitor_render.py, monitor_score_vllm.py, monitor_score_api.py, monitor_detector.py, monitor_tables.py | Étude du moniteur : un appel AlignmentCheck par étape d'agent, notation avec vLLM (MON-L) et avec l'interface batch du fournisseur (MON-A), l'analyse figée et ses tableaux |
revision/monitor_results.json, revision/monitor_summary.md | Résultats de l'analyse figée du moniteur |
revision/monitor_run/ | Chaque appel du moniteur et chaque sortie brute du moniteur avec son score (voir revision/monitor_run/README.md) |
revision/cache/ | Fichiers de validation et de résumé des caches de prédictions. Les prédictions et embeddings mis en cache eux-mêmes (environ 800 Mo) ne sont pas inclus et sont reconstruits par les scripts |
paper/ | Scripts qui génèrent chaque tableau à partir des fichiers de résultats, avec leurs sorties : tables/ (premières études), tables_sencoder/ (ajoute SE) et tables_monitor/ (ajoute le moniteur ; ce sont les tableaux de l'article et du rapport étendu) |
paper_v06/make_figures_v06.py, paper_v06/fig_v06_* | Les figures de l'article |
MANUSCRIPT_SOURCE.*.md, SUPPLEMENT_SOURCE.*.md | Sources du rapport étendu, dans lesquelles paper/build_sencoder.py et paper/build_monitor.py insèrent les tableaux générés |
archive_v0.3/ | Résultats et extraction AgentDojo antérieure de la première version, conservés pour les comparaisons du rapport étendu |
tests/ | Test unitaire de l'extraction AgentDojo |
THIRD_PARTY/ | Licences d'AgentDojo et du scanner AlignmentCheck intégré (LlamaFirewall) |
Les résultats du détecteur ont été calculés avec CPython 3.10.4 sur un CPU. SE a été exécuté sur un nœud d'un cluster Slurm, et MON-L
sur un NVIDIA H100 80GB HBM3 avec vLLM 0.29.0 (versions dans revision/monitor_run/mon_l/env.json).
pip install -r revision/requirements-lock.txt --extra-index-url https://download.pytorch.org/whl/cpu
Les scripts qui lisent les benchmarks d'origine attendent deux variables d'environnement pointant vers des clones locaux.
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
Les tableaux et les figures sont régénérés à partir des fichiers de résultats de ce dépôt. build_monitor.py importe le
module d'analyse du moniteur, qui lit AGENTDRIFT lors de son importation, cette variable doit donc être définie.
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
Les deux scripts de build assemblent également le LaTeX du rapport étendu à partir de MANUSCRIPT_SOURCE.*.md et
SUPPLEMENT_SOURCE.*.md.
La réexécution des expériences à partir des benchmarks suit revision/REPRODUCIBILITY.md pour les détecteurs, le plan SE
avec revision/sencoder_run/ pour SE, et le plan du moniteur avec revision/monitor_run/README.md pour le moniteur.
<repo>,
$AGENTDRIFT, $AGENTDOJO ou <local>. Aucun résultat numérique n'a été modifié. Les valeurs SHA-256 dans PLAN_MANIFEST.txt et
repro_checks.json se réfèrent aux fichiers tels qu'ils étaient sur la machine d'analyse, elles ne correspondent donc pas aux fichiers dans
lesquels un chemin a été remplacé. revision/offline_driver.sh a également été rendu portable. Aucun script Python n'a été modifié, donc
certains scripts conservent un chemin par défaut local, que les variables d'environnement remplacent.*.jsonl.gz) avec un contenu inchangé,
de sorte que les valeurs SHA-256 des manifestes d'appels restent valables pour les fichiers décompressés.