
Código, dados derivados e resultados para: Evaluating Baseline Detectors of Hijacked LLM Agents Under Rare Attacks and Distribution Shift
Código, dados derivados, arquivos de resultados e cada chamada de monitor para o artigo de Mahmoud Abbasi (Universidade de Salamanca), Juan M. Núñez V. (AIR Institute, Salamanca) e Amin Shahraki (Universidade de Oslo).
O artigo avalia detectores que sinalizam agentes LLM sequestrados a partir de seus rastros de chamadas de ferramentas: regressão logística sobre características comportamentais e combinadas (LR-B, LR-C), um modelo de sequência GRU, um transformer sobre embeddings de passos congelados (SE), uma referência de conteúdo TF-IDF, e o monitor de ações AlignmentCheck disponibilizado com dois backbones (MON-L, Llama 3.3 70B w4a16; MON-A, Claude Sonnet 5.5). A avaliação é executada com prevalência de ataque controlada, sob cobertura de ferramentas graduada e sob mudanças de mundo, tarefa, domínio e entre benchmarks no AgentDrift e AgentDojo.
EXTENDED_REPORT.pdf é o relatório estendido citado pelo artigo. É a versão longa deste trabalho (38 páginas, texto principal
e suplemento), escrita antes de o terceiro autor se juntar, e apresenta cada análise resumida no artigo, cada
plano de análise com seus desvios, e todas as tabelas suplementares.
| Caminho | Conteúdo |
|---|---|
EXTENDED_REPORT.pdf | O relatório estendido (ver acima) |
featurise.py, evalkit.py, gru_detector.py, baseline_drift.py | Módulos partilhados: features, métricas e bootstrap, a GRU, as referências Markov e Isolation Forest |
agentdojo_extract.py | Extrai os traces do AgentDojo com emparelhamento posicional das chamadas de ferramentas e das observações |
agentdojo_traces.jsonl, agentdojo_failed.jsonl | Traces do AgentDojo extraídos (população P0, 392 benignos e 2.294 comprometidos) e os 4.987 ataques sem sucesso |
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 experiência da primeira versão, reexecutados sobre a extração corrigida, com os respetivos ficheiros de resultados (*.json) |
R4_CONTROL.md, PRE_ABLATION_DESIGN.md, GRU_PREREGISTRATION.md, REVISION_ANALYSIS_PLAN.md | Os quatro planos de análise internos dos primeiros estudos |
SENCODER_PREREGISTRATION.md, revision/sencoder_run/SENCODER_PREREGISTRATION.amendment*.md, SENCODER_RESULTS.md | Plano, emendas e resultados do estudo SE |
MONITOR_PREREGISTRATION.md, revision/monitor_run/MONITOR_PREREGISTRATION.*.md | Plano do estudo do monitor, a sua primeira versão e as emendas 1 a 4 |
revision/ | Construtores das caches de previsões, os fluxos de análise, os respetivos ficheiros de resultados e resumos, DEVIATIONS.md, RESULTS_SUMMARY.md, PLAN_MANIFEST.txt (um registo com data e hora e o SHA-256 de cada plano e resultado) e o guia de reprodutibilidade REPRODUCIBILITY.md |
revision/sencoder_*.py, revision/sencoder_results.json, revision/sencoder_summary.md, revision/sencoder_run/ | SE: scripts de embedding, treino e análise, resultados, registos do cluster e manifestos |
revision/monitor_render.py, monitor_score_vllm.py, monitor_score_api.py, monitor_detector.py, monitor_tables.py | Estudo do monitor: uma chamada AlignmentCheck por passo do agente, pontuação com vLLM (MON-L) e com a interface de batch do fornecedor (MON-A), a análise congelada e as suas tabelas |
revision/monitor_results.json, revision/monitor_summary.md | Resultados da análise congelada do monitor |
revision/monitor_run/ | Cada chamada do monitor e cada saída bruta do monitor com a respetiva pontuação (ver revision/monitor_run/README.md) |
revision/cache/ | Ficheiros de validação e de resumo das caches de previsões. As previsões e os embeddings em cache propriamente ditos (cerca de 800 MB) não estão incluídos e são reconstruídos pelos scripts |
paper/ | Scripts que geram cada tabela a partir dos ficheiros de resultados, com as respetivas saídas: tables/ (primeiros estudos), tables_sencoder/ (adiciona SE) e tables_monitor/ (adiciona o monitor; estas são as tabelas do artigo e do relatório estendido) |
paper_v06/make_figures_v06.py, paper_v06/fig_v06_* | As figuras do artigo |
MANUSCRIPT_SOURCE.*.md, SUPPLEMENT_SOURCE.*.md | Fontes do relatório estendido, nas quais paper/build_sencoder.py e paper/build_monitor.py inserem as tabelas geradas |
archive_v0.3/ | Resultados e a extração anterior do AgentDojo da primeira versão, mantidos para as comparações no relatório estendido |
tests/ | Teste unitário da extração do AgentDojo |
THIRD_PARTY/ | Licenças do AgentDojo e do scanner AlignmentCheck incluído (LlamaFirewall) |
Os resultados do detetor foram calculados com CPython 3.10.4 numa CPU. O SE correu num nó de um cluster Slurm, e o MON-L
numa NVIDIA H100 80GB HBM3 com vLLM 0.29.0 (versões em revision/monitor_run/mon_l/env.json).
pip install -r revision/requirements-lock.txt --extra-index-url https://download.pytorch.org/whl/cpu
Scripts que leem os benchmarks originais esperam duas variáveis de ambiente apontando para clones locais.
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
As tabelas e figuras são regeneradas a partir dos arquivos de resultados neste repositório. build_monitor.py importa o
módulo de análise do monitor, que lê AGENTDRIFT quando é importado, portanto essa variável deve ser 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
Os dois scripts de build também montam o LaTeX do relatório estendido a partir de MANUSCRIPT_SOURCE.*.md e
SUPPLEMENT_SOURCE.*.md.
A reexecução dos experimentos a partir dos benchmarks segue revision/REPRODUCIBILITY.md para os detectores, o plano de SE
com revision/sencoder_run/ para SE, e o plano do monitor com revision/monitor_run/README.md para o monitor.
<repo>,
$AGENTDRIFT, $AGENTDOJO ou <local>. Nenhum resultado numérico foi alterado. Os valores SHA-256 em PLAN_MANIFEST.txt e
repro_checks.json referem-se aos arquivos como estavam na máquina de análise, portanto não correspondem aos arquivos
em que um caminho foi substituído. revision/offline_driver.sh também foi tornado portável. Nenhum script Python foi modificado, portanto
alguns scripts mantêm um caminho padrão local, que as variáveis de ambiente substituem.*.jsonl.gz) com conteúdo inalterado,
portanto os valores SHA-256 nos manifestos de chamadas são válidos para os arquivos descomprimidos.