AgentWatcher 是一种基于检测的防御方法,用于抵御 LLM 智能体中的间接提示注入。它首先对不受信任的上下文运行因果上下文归因,以找出最具影响力的上下文,然后应用监控 LLM,在显式、可定制的规则下对这些上下文进行分类。与完全黑盒检测器相比,该流程更易于解释:归因显示模型关注哪里,监控 LLM 的判断基于规则支撑的推理。监控 LLM 的示例输出如下所示:
这种基于规则的检测可以利用监控 LLM 的推理能力,在效用与稳健性之间实现更好的权衡。AgentWatcher 在 AgentDyn 等 LLM 智能体基准上取得了最先进的性能:
本仓库用于复现论文中的主要实验。
pip install -r requirements.txt
huggingface-cli login # if needed for gated models
训练好的监控器是一个 LoRA 适配器(PEFT)。默认情况下,main.py 会自动加载 SecureLLMSys 上的 Hub 检查点 SecureLLMSys/AgentWatcher-Qwen3-4B-Instruct-2507(可通过 --monitor_llm 覆盖)。
所有启动器都位于 scripts/ 目录下。它们假定你从 AgentWatcher 仓库根目录运行(或先 cd 到该目录)。请首先使用 export OPENAI_API_KEY=<YOUR_KEY> 设置 OpenAI 密钥。在运行前,请编辑 Python 启动器(all_datasets、all_defenses、gpus、name、模型等)以匹配你的扫描配置。
main.py)批量任务(本地 GPU 或 Slurm):
python scripts/run_long_context.py
这会使用 vLLM(--use_vllm)驱动 main.py,并将日志写入 logs/main_logs/<name>/...。如果没有本地 GPU,它会通过 scripts/main.sh 提交 Slurm 任务。
不使用启动器的单次运行:
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,它会使用 scripts/main_agentdojo.sh 提交 Slurm 任务。对于单次手动运行,你可以从仓库根目录调用 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 以 gpt-4o 作为主干 LLM 运行 agentwatcher。该脚本会激活 agentdojo conda 环境,并从 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 论文(如果可用)。