
Kausale Kontextattribution und regelbasierte Monitor-LLM-Abwehr gegen indirekte Prompt-Injection in LLM-Agenten, die auf AgentDyn und anderen Benchmarks modernste Leistung erzielt.
AgentWatcher ist eine erkennungsbasierte Verteidigung gegen indirekte Prompt-Injection in LLM-Agenten. Zuerst führt sie eine kausale Kontextattribution über nicht vertrauenswürdigen Kontext durch, um die einflussreichsten Kontexte zu finden, und wendet dann ein Monitor-LLM an, das diese Kontexte anhand expliziter, anpassbarer Regeln klassifiziert. Im Vergleich zu reinen Black-Box-Erkennungssystemen ist diese Pipeline leichter zu interpretieren: Die Attribution zeigt, worauf sich das Modell konzentriert hat, und das Urteil des Monitor-LLMs basiert auf regelbasiertem Denken. Ein Beispiel für die Ausgabe des Monitor-LLMs ist unten dargestellt:
Diese regelbasierte Erkennung kann die Denkfähigkeit des Monitor-LLMs nutzen, um einen besseren Kompromiss zwischen Nutzen und Robustheit zu erzielen. AgentWatcher erreicht State-of-the-Art-Leistung auf LLM-Agenten-Benchmarks wie AgentDyn:
Dieses Repository dient der Reproduktion der Hauptexperimente aus dem Paper.
pip install -r requirements.txt
huggingface-cli login # if needed for gated models
Das trainierte Monitor-Modell ist ein LoRA-Adapter (PEFT). Standardmäßig lädt main.py automatisch den Hub-Checkpoint SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507 auf SecureLLMSys (überschreibbar mit --monitor_llm).
Alle Launcher befinden sich unter scripts/. Sie setzen voraus, dass Sie vom Stammverzeichnis des AgentWatcher-Repositorys aus arbeiten (oder zuerst dorthin cd wechseln). Bitte setzen Sie zuerst den OpenAI-Key mit export OPENAI_API_KEY=<YOUR_KEY>. Bearbeiten Sie vor dem Ausführen die Python-Launcher (all_datasets, all_defenses, gpus, name, models, usw.), um sie an Ihren Sweep anzupassen.
main.py)Stapeljobs (lokale GPUs oder Slurm):
python scripts/run_long_context.py
Dies steuert main.py mit vLLM (--use_vllm) und schreibt Protokolle unter logs/main_logs/<name>/.... Ohne lokale GPU werden die Jobs über scripts/main.sh an Slurm übergeben.
Einmaliger Lauf ohne den 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
Optionale Attributions-Overrides für main.py: --w_s, --w_l, --w_r, --K, --attribution_model.
Um AgentDojo/AgentDyn auszuführen, richten Sie bitte zuerst die Umgebung gemäß PIArena (https://github.com/sleeepeer/PIArena) ein:
cd agents/agentdojo && pip install -e . && cd ../..
Führen Sie dann Folgendes aus:
python scripts/run_agentdojo.py
Dies ruft main_agentdojo.py auf und schreibt Protokolle unter logs/agentdojo_logs/.... Ohne lokale GPU verwendet es scripts/main_agentdojo.sh für Slurm. Für einen einzelnen manuellen Lauf können Sie python main_agentdojo.py --model ... --defense agentwatcher --monitor_llm ... vom Stammverzeichnis des Repositorys aus aufrufen; setzen Sie PIARENA_DEFENSE / PIARENA_MONITOR_LLM, falls Ihr Wrapper diese erwartet. Die Verteidigung agentwatcher verwendet PIMonitorLLMDefenseAdapter.
./scripts/run_agentdyn.sh
Optional: ./scripts/run_agentdyn.sh --model gpt-4o-2024-08-06 zum Ausführen von AgentWatcher mit gpt-4o als Backbone-LLM. Das Skript aktiviert die Conda-Umgebung agentdojo und startet den Lauf aus agents/agentdyn/src. Wir empfehlen die Verwendung von tmux, um eine Unterbrechung des Laufs zu verhindern.
python scripts/run_injecagent.py
Dies startet main_injecagent.py und protokolliert unter logs/main_logs/.... Slurm-Einstiegspunkt: scripts/main_injecagent.sh.
Direkter Aufruf ohne den 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
Wenn Sie diesen Code verwenden, zitieren Sie bitte das AgentWatcher-Paper (sobald verfügbar).