AgentWatcher は、LLMエージェントにおける間接的なプロンプトインジェクションに対する検出ベースの防御手法です。まず、信頼できないコンテキストに対して因果的コンテキスト属性推定(causal context attribution)を実行し、最も影響力の高いコンテキストを特定します。次に、モニタLLMを適用して、明示的でカスタマイズ可能なルールに基づいてそれらのコンテキストを分類します。完全なブラックボックス検出器と比較して、このパイプラインは解釈が容易です。属性推定によりモデルがどこに注目したかが示され、モニタLLMの判断はルールに基づいた推論に依拠します。モニタLLMの出力例を以下に示します。
このルールベースの検出は、モニタLLMの推論能力を活用して、実用性と堅牢性の間でより良いトレードオフを実現できます。AgentWatcher は、AgentDyn などのLLMエージェントベンチマークにおいて最先端のパフォーマンスを達成しています。
このリポジトリは、論文の主要な実験を再現するためのものです。
pip install -r requirements.txt
huggingface-cli login # gatedモデルに必要な場合
学習済みモニタは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がない場合は、Slurm用に scripts/main_agentdojo.sh を使用します。手動で単発実行する場合は、リポジトリルートから python main_agentdojo.py --model ... --defense agentwatcher --monitor_llm ... を呼び出すことができます。ラッパーが必要とする場合は、PIARENA_DEFENSE / PIARENA_MONITOR_LLM を設定してください。Defense agentwatcher は PIMonitorLLMDefenseAdapter を使用します。
./scripts/run_agentdyn.sh
任意:./scripts/run_agentdyn.sh --model gpt-4o-2024-08-06 を実行すると、バックボーンLLMとしてgpt-4oを使用して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 の論文(公開され次第)を引用してください。