
Code de recherche pour HARDE, un harnais d'agent qui sonde et optimise de manière adaptative les composants pour la détection des risques à l'exécution et le contrôle de l'exécution sur les benchmarks de sécurité des agents.
Publication du code pour HARDE: Optimizing Agent Harnesses for Runtime Risk Detection and Execution Control.
Le dépôt contient deux familles de points d'entrée complémentaires :
domains/ : la référence Meta-Harness et les deux étapes de HARDE pour chaque benchmark.personalized_harness/ : les adaptateurs de benchmark, les harnais de référence, les harnais appris/personnalisés et les pipelines d'évaluation.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
Pour un benchmark nommé benchmark, les répertoires suivent cette convention :
| Répertoire | Étape de la méthode | Point d'entrée principal |
|---|---|---|
domains/benchmark/ | Référence Meta-Harness | meta_harness.py |
domains/benchmark_component_probe/ | HARDE Étape I : sondage des composants | component_probe.py |
domains/benchmark_adaptive_component_search/ | HARDE Étape II : recherche adaptative de composants | adaptive_component_search.py |
L'étape I sonde les composants du harnais et produit une grille d'évaluation au niveau des composants. L'étape II consomme cette grille pour sélectionner et optimiser un composant de manière adaptative pendant la recherche. Dans ce dépôt, benchmark est l'un de agentdyn, agentsafetybench ou shade_arena.
Python 3.10 ou une version plus récente est recommandé.
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
Le code et les jeux de données des benchmarks tiers ne sont pas inclus dans le dépôt. Clonez le(s) benchmark(s) dont vous avez besoin à la racine du dépôt en utilisant exactement les noms de répertoires ci-dessous :
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
Sources de données supplémentaires :
Les adaptateurs résolvent ces dépôts relativement à la racine de HARDE. Organisation attendue :
HARDE/
├── AgentDyn/
├── SHADE-Arena/
├── Agent-SafetyBench/
├── domains/
└── personalized_harness/
Les commandes et options détaillées spécifiques à chaque benchmark sont documentées dans le README à l'intérieur de chaque répertoire correspondant sous domains/. Des exemples d'évaluation avec harnais fixe sont documentés dans personalized_harness/README.md.
Les exemples SHADE-Arena suivants montrent le flux d'exécution complet pour chaque méthode.
Meta-Harness optimise directement le harnais complet pendant trois itérations, puis évalue le harnais sélectionné sur l'ensemble de test mis de côté :
python domains/shade_arena/meta_harness.py \
--run-name shade_meta_seed0 \
--fresh \
--iterations 3 \
--seed 0 \
--run-final-test
Les résultats sont écrits dans domains/shade_arena/runs/shade_meta_seed0/.
Cette référence évalue le harnais de benchmark non modifié, propose un harnais personnalisé en un seul appel LLM, et évalue cette proposition sur les mêmes tâches SHADE-Arena. Elle n'effectue pas de recherche itérative :
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
Sans les options --skip_generate, --skip_base ou --skip_personalized, cette commande exécute la chaîne complète :
base-harness evaluation → one-shot harness proposal → proposed-harness evaluation → summary
HARDE sonde d'abord les composants individuels du harnais lors de l'étape I :
python domains/shade_arena_component_probe/component_probe.py \
--run-name shade_probe_seed0 \
--seed 0
L'étape I écrit le guide de harnais généré dans :
domains/shade_arena_component_probe/runs/shade_probe_seed0/experience/module_rubric.md
L'étape II consomme ce guide, sélectionne de manière adaptative un composant à chaque itération, exécute trois itérations de recherche, et évalue le harnais final sélectionné :
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
Les métadonnées de citation seront ajoutées lors de la publication de l'article.