
AgentWatcher è una difesa basata sul rilevamento contro l'iniezione indiretta di prompt negli agenti LLM. Innanzitutto esegue l'attribuzione causale del contesto sul contesto non attendibile per individuare i contesti più influenti, quindi applica un LLM monitor che classifica tali contesti secondo regole esplicite e personalizzabili. Rispetto ai rilevatori completamente black-box, questa pipeline è più facile da interpretare: l'attribuzione mostra dove si è concentrato il modello e il giudizio dell'LLM monitor si basa su un ragionamento fondato su regole. Di seguito è mostrato un esempio dell'output dell'LLM monitor:
Questa difesa basata su regole può sfruttare la capacità di ragionamento dell'LLM monitor per ottenere un migliore compromesso tra utilità e robustezza. AgentWatcher raggiunge prestazioni allo stato dell'arte su benchmark per agenti LLM come AgentDyn:
Questa repository è pensata per riprodurre gli esperimenti principali dell'articolo.
pip install -r requirements.txt
huggingface-cli login # se necessario per modelli gated
Il monitor addestrato è un adattatore LoRA (PEFT). Di default, main.py carica automaticamente il checkpoint Hub SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 su SecureLLMSys (sostituibile con --monitor_llm).
Tutti i launcher si trovano in scripts/. Presuppongono che tu esegua i comandi dalla root del repository AgentWatcher (o che tu faccia cd lì prima). Imposta prima la chiave OpenAI con export OPENAI_API_KEY=<YOUR_KEY>. Modifica i launcher Python (all_datasets, all_defenses, gpus, name, modelli, ecc.) per adattarli alla tua sweep prima di eseguire.
main.py)Job batch (GPU locali o Slurm):
python scripts/run_long_context.py
Questo esegue main.py con vLLM (--use_vllm) e scrive i log in logs/main_logs/<name>/.... Senza GPU locale, invia il job a Slurm tramite scripts/main.sh.
Esecuzione una tantum senza launcher:
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
Override opzionali dell'attribuzione su main.py: --w_s, --w_l, --w_r, --K, --attribution_model.
Per eseguire AgentDojo/AgentDyn, configura prima l'ambiente seguendo PIArena (https://github.com/sleeepeer/PIArena):
cd agents/agentdojo && pip install -e . && cd ../..
Quindi esegui:
python scripts/run_agentdojo.py
Questo chiama main_agentdojo.py e scrive i log in logs/agentdojo_logs/.... Senza GPU locale, usa scripts/main_agentdojo.sh per Slurm. Per un'esecuzione manuale singola puoi chiamare python main_agentdojo.py --model ... --defense agentwatcher --monitor_llm ... dalla root del repository; imposta PIARENA_DEFENSE / PIARENA_MONITOR_LLM se il tuo wrapper li richiede. La difesa agentwatcher usa PIMonitorLLMDefenseAdapter.
./scripts/run_agentdyn.sh
Opzionale: ./scripts/run_agentdyn.sh --model gpt-4o-2024-08-06 per eseguire agentwatcher con gpt-4o come LLM backbone. Lo script attiva l'ambiente conda agentdojo ed esegue da agents/agentdyn/src. Consigliamo di usare tmux per evitare che l'esecuzione venga interrotta.
python scripts/run_injecagent.py
Questo avvia main_injecagent.py e registra i log in logs/main_logs/.... Punto di ingresso Slurm: scripts/main_injecagent.sh.
Invocazione diretta senza launcher:
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
Se usi questo codice, cita l'articolo AgentWatcher (quando disponibile).