
AgentWatcher — это защита на основе детектирования от косвенных промпт-инъекций в LLM-агентах. Сначала он выполняет каузальную атрибуцию контекста по недоверенному контексту, чтобы найти наиболее влиятельные фрагменты, а затем применяет монитор LLM, который классифицирует эти фрагменты на основе явных, настраиваемых правил. По сравнению с полностью черноящиковыми детекторами, этот конвейер проще интерпретировать: атрибуция показывает, где модель сосредоточила внимание, а суждение монитора LLM основано на обоснованных правилах reasoning. Пример вывода монитора LLM показан ниже:
Такое детектирование на основе правил может использовать способность монитора LLM к рассуждению для достижения лучшего компромисса между полезностью и устойчивостью. AgentWatcher достигает передовых результатов на бенчмарках LLM-агентов, таких как AgentDyn:
Этот репозиторий предназначен для воспроизведения основных экспериментов из статьи.
pip install -r requirements.txt
huggingface-cli login # if needed for gated models
Обученный монитор — это LoRA-адаптер (PEFT). По умолчанию main.py автоматически загружает контрольную точку SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 из SecureLLMSys (переопределяется с помощью --monitor_llm).
Все лаунчеры находятся в каталоге scripts/. Они предполагают, что вы запускаете их из корня репозитория AgentWatcher (или сначала выполняете cd туда). Сначала задайте ключ OpenAI с помощью export OPENAI_API_KEY=<YOUR_KEY>. Отредактируйте Python-лаунчеры (all_datasets, all_defenses, gpus, name, модели и т.д.) в соответствии с вашим перебором перед запуском.
main.py)Пакетные задания (локальные GPU или Slurm):
python scripts/run_long_context.py
Это запускает main.py с vLLM (--use_vllm) и записывает логи в logs/main_logs/<name>/.... Если локальных GPU нет, задание отправляется в Slurm через scripts/main.sh.
Разовый запуск без лаунчера:
python main.py \
--dataset lcc_long \
--attack combined \
--defense agentwatcher \
--backend_llm Qwen/Qwen3-4B-Instruct-2507 \
--monitor_llm SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 \
--use_vllm \
--name my_run
Необязательные переопределения атрибуции в main.py: --w_s, --w_l, --w_r, --K, --attribution_model.
Чтобы запустить AgentDojo/AgentDyn, сначала настройте окружение, следуя инструкциям PIArena (https://github.com/sleeepeer/PIArena):
cd agents/agentdojo && pip install -e . && cd ../..
Затем выполните:
python scripts/run_agentdojo.py
Этот скрипт вызывает main_agentdojo.py и записывает логи в logs/agentdojo_logs/.... Если локальных GPU нет, для Slurm используется scripts/main_agentdojo.sh. Для разового ручного запуска вы можете выполнить python main_agentdojo.py --model ... --defense agentwatcher --monitor_llm ... из корня репозитория; задайте PIARENA_DEFENSE / PIARENA_MONITOR_LLM, если ваша обёртка ожидает их. Защита agentwatcher использует PIMonitorLLMDefenseAdapter.
./scripts/run_agentdyn.sh
Необязательно: ./scripts/run_agentdyn.sh --model gpt-4o-2024-08-06 для запуска agentwatcher с gpt-4o в качестве базовой LLM. Скрипт активирует conda-окружение agentdojo и запускается из каталога agents/agentdyn/src. Рекомендуется использовать tmux, чтобы предотвратить прерывание запуска.
python scripts/run_injecagent.py
Это запускает main_injecagent.py и записывает логи в logs/main_logs/.... Точка входа для Slurm: scripts/main_injecagent.sh.
Прямой вызов без лаунчера:
python main_injecagent.py \
--model meta-llama/Llama-3.1-8B-Instruct \
--defense agentwatcher \
--monitor_llm SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 \
--name my_injecagent_run
Если вы используете этот код, пожалуйста, процитируйте статью AgentWatcher (когда она станет доступна).