
Forschungscode für HARDE, ein Agent-Harness, das Komponenten für die Laufzeit-Risikoerkennung und Ausführungskontrolle über Agent-Sicherheits-Benchmarks hinweg untersucht und adaptiv optimiert.
Code-Veröffentlichung für HARDE: Optimizing Agent Harnesses for Runtime Risk Detection and Execution Control.
Das Repository enthält zwei komplementäre Entry-Point-Familien:
domains/: die Meta-Harness-Baseline und die beiden Stufen von HARDE für jeden Benchmark.personalized_harness/: Benchmark-Adapter, Baseline-Harnesses, gelernte/personalisierte Harnesses und Evaluierungs-Pipelines.HARDE/
├── domains/
│ ├── agentdyn/ # Meta-Harness baseline
│ ├── agentdyn_component_probe/ # HARDE Stage I
│ ├── agentdyn_adaptive_component_search/ # HARDE Stage II
│ ├── agentsafetybench/ # Meta-Harness baseline
│ ├── agentsafetybench_component_probe/ # HARDE Stage I
│ ├── agentsafetybench_adaptive_component_search/ # HARDE Stage II
│ ├── shade_arena/ # Meta-Harness baseline
│ ├── shade_arena_component_probe/ # HARDE Stage I
│ └── shade_arena_adaptive_component_search/ # HARDE Stage II
├── personalized_harness/
│ ├── AgentDyn/
│ ├── AgentSafetyBench/
│ └── SHADE_v2/
├── .env.example
├── .gitignore
└── requirements.txt
Für einen Benchmark namens benchmark folgen die Verzeichnisse dieser Konvention:
| Verzeichnis | Methodenstufe | Haupteinstiegspunkt |
|---|---|---|
domains/benchmark/ | Meta-Harness-Baseline | meta_harness.py |
domains/benchmark_component_probe/ | HARDE Stufe I: Komponenten-Probing | component_probe.py |
domains/benchmark_adaptive_component_search/ | HARDE Stufe II: adaptive Komponentensuche | adaptive_component_search.py |
Stufe I untersucht die Harness-Komponenten und erzeugt eine komponentenbezogene Bewertungsrichtlinie. Stufe II verwendet diese Richtlinie, um während der Suche eine Komponente adaptiv auszuwählen und zu optimieren. In diesem Repository ist benchmark eines von agentdyn, agentsafetybench oder shade_arena.
Python 3.10 oder neuer wird empfohlen.
conda create -n HARDE python=3.10
conda activate HARDE
pip install -r requirements.txt
cp .env.example .env
cp model_config.example.yaml model_config.yaml
# Edit .env, then export its values into the current shell.
set -a
source .env
set +a
Code und Datensätze von Drittanbieter-Benchmarks werden nicht mitgeliefert. Klonen Sie die benötigten Benchmarks mit den exakten Verzeichnisnamen unten in das Repository-Stammverzeichnis:
git clone https://github.com/leolee99/AgentDyn.git AgentDyn
git clone https://github.com/jkutaso/SHADE-Arena.git SHADE-Arena
git clone https://github.com/thu-coai/Agent-SafetyBench.git Agent-SafetyBench
Zusätzliche Datenquellen:
Die Adapter lösen diese Repositories relativ zum HARDE-Stammverzeichnis auf. Erwartetes Layout:
HARDE/
├── AgentDyn/
├── SHADE-Arena/
├── Agent-SafetyBench/
├── domains/
└── personalized_harness/
Detaillierte benchmark-spezifische Befehle und Optionen sind in der README im jeweiligen Verzeichnis unter domains/ dokumentiert. Beispiele für die Evaluierung mit festem Harness sind in personalized_harness/README.md dokumentiert.
Die folgenden SHADE-Arena-Beispiele zeigen den vollständigen Ausführungsablauf für jede Methode.
Meta-Harness optimiert direkt das vollständige Harness über drei Iterationen und evaluiert anschließend das ausgewählte Harness auf dem zurückgehaltenen Testsatz:
python domains/shade_arena/meta_harness.py \
--run-name shade_meta_seed0 \
--fresh \
--iterations 3 \
--seed 0 \
--run-final-test
Ergebnisse werden nach domains/shade_arena/runs/shade_meta_seed0/ geschrieben.
Diese Baseline evaluiert das unveränderte Benchmark-Harness, schlägt in einem einzigen LLM-Aufruf ein personalisiertes Harness vor und evaluiert diesen Vorschlag auf denselben SHADE-Arena-Aufgaben. Es wird keine iterative Suche durchgeführt:
python personalized_harness/shade_v2_pipeline.py \
--model_config model_config.yaml \
--tasks spam_filter_update \
--repeat 1 \
--output_harness personalized_harness/SHADE_v2/harnesses/one_shot_proposal.py \
--output_dir personalized_harness/SHADE_v2/output_one_shot
Ohne die Flags --skip_generate, --skip_base oder --skip_personalized führt dieser Befehl die vollständige Kette aus:
base-harness evaluation → one-shot harness proposal → proposed-harness evaluation → summary
HARDE untersucht zunächst einzelne Harness-Komponenten in Stufe I:
python domains/shade_arena_component_probe/component_probe.py \
--run-name shade_probe_seed0 \
--seed 0
Stufe I schreibt den generierten Harness-Leitfaden nach:
domains/shade_arena_component_probe/runs/shade_probe_seed0/experience/module_rubric.md
Stufe II verwendet diesen Leitfaden, wählt bei jeder Iteration adaptiv eine Komponente aus, führt drei Suchiterationen durch und evaluiert das final ausgewählte Harness:
python domains/shade_arena_adaptive_component_search/adaptive_component_search.py \
--run-name shade_adaptive_seed0 \
--seed 0 \
--iterations 3 \
--rubric domains/shade_arena_component_probe/runs/shade_probe_seed0/experience/module_rubric.md \
--initial-components initial_components/full_trajectory_monitor \
--run-final-test
Zitationsmetadaten werden mit der Veröffentlichung des Papers hinzugefügt.