
Код, производные данные и результаты для: Evaluating Baseline Detectors of Hijacked LLM Agents Under Rare Attacks and Distribution Shift
Код, производные данные, файлы результатов и каждый вызов монитора для статьи Mahmoud Abbasi (Университет Саламанки), Juan M. Núñez V. (AIR Institute, Саламанка) и Amin Shahraki (Университет Осло).
В статье оцениваются детекторы, выявляющие перехваченных LLM-агентов по трассировкам вызовов инструментов: логистическая регрессия на поведенческих и комбинированных признаках (LR-B, LR-C), последовательная модель GRU, трансформер над замороженными эмбеддингами шагов (SE), контентный эталон на основе TF-IDF и выпущенный монитор действий AlignmentCheck с двумя бэкбонами (MON-L, Llama 3.3 70B w4a16; MON-A, Claude Sonnet 5.5). Оценка проводится при контролируемой распространённости атак, при градуированном покрытии инструментов и при сдвигах мира, задач, домена и кросс-бенчмарков на AgentDrift и AgentDojo.
EXTENDED_REPORT.pdf — расширенный отчёт, на который ссылается статья. Это длинная версия данной работы (38 страниц, основной
текст и приложение), написанная до присоединения третьего автора, и содержит каждый анализ, обобщённый в статье, каждый
план анализа с его отклонениями и все дополнительные таблицы.
| Путь | Содержимое |
|---|---|
EXTENDED_REPORT.pdf | Расширенный отчёт (см. выше) |
featurise.py, evalkit.py, gru_detector.py, baseline_drift.py | Общие модули: признаки, метрики и bootstrap, GRU, эталонные реализации Маркова и Isolation Forest |
agentdojo_extract.py | Извлекает трассы AgentDojo с позиционным сопоставлением вызовов инструментов и наблюдений |
agentdojo_traces.jsonl, agentdojo_failed.jsonl | Извлечённые трассы AgentDojo (популяция P0, 392 доброкачественные и 2 294 скомпрометированные) и 4 987 неудачных атак |
rerun_r1r3.py, ablation.py, world_disjoint_r1.py, r4_control.py, gru_ladder.py, gru_r3_diagnostic.py, pre_ablation_audit.py | Скрипты экспериментов из первой версии, повторно запущенные на исправленном извлечении, с их файлами результатов (*.json) |
R4_CONTROL.md, PRE_ABLATION_DESIGN.md, GRU_PREREGISTRATION.md, REVISION_ANALYSIS_PLAN.md | Четыре внутренних плана анализа первых исследований |
SENCODER_PREREGISTRATION.md, revision/sencoder_run/SENCODER_PREREGISTRATION.amendment*.md, SENCODER_RESULTS.md | План, поправки и результаты исследования SE |
MONITOR_PREREGISTRATION.md, revision/monitor_run/MONITOR_PREREGISTRATION.*.md | План исследования монитора, его первая версия и поправки с 1 по 4 |
revision/ | Построители кэша предсказаний, потоки анализа, их файлы результатов и сводки, DEVIATIONS.md, RESULTS_SUMMARY.md, PLAN_MANIFEST.txt (журнал с отметками времени и SHA-256 каждого плана и результата) и руководство по воспроизводимости REPRODUCIBILITY.md |
revision/sencoder_*.py, revision/sencoder_results.json, revision/sencoder_summary.md, revision/sencoder_run/ | SE: скрипты эмбеддинга, обучения и анализа, результаты, журналы кластера и манифесты |
revision/monitor_render.py, monitor_score_vllm.py, monitor_score_api.py, monitor_detector.py, monitor_tables.py | Исследование монитора: один вызов AlignmentCheck на каждый шаг агента, оценка с помощью vLLM (MON-L) и через пакетный интерфейс провайдера (MON-A), замороженный анализ и его таблицы |
revision/monitor_results.json, revision/monitor_summary.md | Результаты замороженного анализа монитора |
revision/monitor_run/ | Каждый вызов монитора и каждый сырой вывод монитора с его оценкой (см. revision/monitor_run/README.md) |
revision/cache/ | Файлы валидации и сводки кэшей предсказаний. Сами кэшированные предсказания и эмбеддинги (около 800 МБ) не включены и пересобираются скриптами |
paper/ | Скрипты, генерирующие каждую таблицу из файлов результатов, с их выводами: tables/ (первые исследования), tables_sencoder/ (добавляет SE) и tables_monitor/ (добавляет монитор; это таблицы статьи и расширенного отчёта) |
paper_v06/make_figures_v06.py, paper_v06/fig_v06_* | Рисунки статьи |
MANUSCRIPT_SOURCE.*.md, SUPPLEMENT_SOURCE.*.md | Исходники расширенного отчёта, в которые paper/build_sencoder.py и paper/build_monitor.py вставляют сгенерированные таблицы |
archive_v0.3/ | Результаты и более раннее извлечение AgentDojo из первой версии, сохранённые для сравнений в расширенном отчёте |
tests/ | Модульный тест извлечения AgentDojo |
THIRD_PARTY/ | Лицензии AgentDojo и встроенного сканера AlignmentCheck (LlamaFirewall) |
Результаты детектора были вычислены с помощью CPython 3.10.4 на CPU. SE выполнялся на одном узле кластера Slurm, а MON-L
на одном NVIDIA H100 80GB HBM3 с vLLM 0.29.0 (версии в revision/monitor_run/mon_l/env.json).
pip install -r revision/requirements-lock.txt --extra-index-url https://download.pytorch.org/whl/cpu
Скрипты, читающие исходные бенчмарки, ожидают две переменные окружения, указывающие на локальные клоны.
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
Таблицы и рисунки создаются заново из файлов результатов в этом репозитории. build_monitor.py импортирует
модуль анализа монитора, который считывает AGENTDRIFT при импорте, поэтому эта переменная должна быть задана.
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
Два скрипта сборки также собирают LaTeX расширенного отчёта из MANUSCRIPT_SOURCE.*.md и
SUPPLEMENT_SOURCE.*.md.
Повторный запуск экспериментов из бенчмарков описан в revision/REPRODUCIBILITY.md для детекторов, план SE —
в revision/sencoder_run/ для SE, а план монитора — в revision/monitor_run/README.md для монитора.
<repo>,
$AGENTDRIFT, $AGENTDOJO или <local>. Ни один числовой результат не был изменён. Значения SHA-256 в PLAN_MANIFEST.txt и
repro_checks.json относятся к файлам в том виде, в каком они были на машине анализа, поэтому они не совпадают с файлами,
в которых путь был заменён. revision/offline_driver.sh также был сделан переносимым. Ни один Python-скрипт не был изменён, поэтому
некоторые скрипты сохраняют локальный путь по умолчанию, который переопределяется переменными окружения.*.jsonl.gz) с неизменным содержимым,
поэтому значения SHA-256 в манифестах вызовов действительны для распакованных файлов.