
AgentWatcher es una defensa basada en detección contra la inyección indirecta de prompts en agentes LLM. Primero ejecuta atribución causal de contexto sobre el contexto no confiable para encontrar los contextos más influyentes, y luego aplica un LLM monitor que clasifica esos contextos bajo reglas explícitas y personalizables. En comparación con los detectores de caja negra, este pipeline es más fácil de interpretar: la atribución muestra dónde se centró el modelo, y el juicio del LLM monitor se basa en un razonamiento fundamentado en reglas. A continuación se muestra un ejemplo de salida del LLM monitor:
Esta detección basada en reglas puede aprovechar la capacidad de razonamiento del LLM monitor para lograr un mejor equilibrio entre utilidad y robustez. AgentWatcher logra un rendimiento de última generación en benchmarks de agentes LLM como AgentDyn:
Este repositorio está pensado para reproducir los experimentos principales del artículo.
pip install -r requirements.txt
huggingface-cli login # if needed for gated models
El monitor entrenado es un adaptador LoRA (PEFT). Por defecto, main.py carga automáticamente el checkpoint de Hub SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 en SecureLLMSys (anúlalo con --monitor_llm).
Todos los lanzadores están en scripts/. Asumen que ejecutas desde la raíz del repositorio AgentWatcher (o que haces cd allí primero). Primero configura la clave de OpenAI con export OPENAI_API_KEY=<YOUR_KEY>. Edita los lanzadores Python (all_datasets, all_defenses, gpus, name, modelos, etc.) para ajustarlos a tu barrido antes de ejecutarlos.
main.py)Trabajos por lotes (GPUs locales o Slurm):
python scripts/run_long_context.py
Esto ejecuta main.py con vLLM (--use_vllm) y escribe los registros en logs/main_logs/<name>/.... Si no hay GPU local, envía trabajos a Slurm mediante scripts/main.sh.
Ejecución única sin el lanzador:
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
Anulaciones opcionales de atribución en main.py: --w_s, --w_l, --w_r, --K, --attribution_model.
Para ejecutar AgentDojo/AgentDyn, primero configura el entorno siguiendo PIArena (https://github.com/sleeepeer/PIArena):
cd agents/agentdojo && pip install -e . && cd ../..
Luego ejecuta:
python scripts/run_agentdojo.py
Esto llama a main_agentdojo.py y escribe los registros en logs/agentdojo_logs/.... Si no hay GPU local, usa scripts/main_agentdojo.sh para Slurm. Para una ejecución manual individual, puedes llamar a python main_agentdojo.py --model ... --defense agentwatcher --monitor_llm ... desde la raíz del repositorio; define PIARENA_DEFENSE / PIARENA_MONITOR_LLM si tu wrapper lo espera. La defensa agentwatcher usa PIMonitorLLMDefenseAdapter.
./scripts/run_agentdyn.sh
Opcional: ./scripts/run_agentdyn.sh --model gpt-4o-2024-08-06 para ejecutar agentwatcher con gpt-4o como LLM principal. El script activa el entorno conda agentdojo y se ejecuta desde agents/agentdyn/src. Recomendamos usar tmux para evitar que la ejecución se interrumpa.
python scripts/run_injecagent.py
Esto lanza main_injecagent.py y registra en logs/main_logs/.... Punto de entrada para Slurm: scripts/main_injecagent.sh.
Invocación directa sin el lanzador:
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
Si usas este código, cita el artículo de AgentWatcher (cuando esté disponible).