
Código de pesquisa para HARDE, um harness de agente que sonda e otimiza adaptativamente componentes para detecção de risco em tempo de execução e controle de execução em benchmarks de segurança de agentes.
Lançamento de código para HARDE: Otimizando Harnesses de Agentes para Detecção de Riscos em Tempo de Execução e Controle de Execução.
O repositório contém duas famílias complementares de pontos de entrada:
domains/: a linha de base Meta-Harness e os dois estágios do HARDE para cada benchmark.personalized_harness/: adaptadores de benchmark, harnesses de linha de base, harnesses aprendidos/personalizados e pipelines de avaliação.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
Para um benchmark chamado benchmark, os diretórios seguem esta convenção:
| Diretório | Estágio do método | Ponto de entrada principal |
|---|---|---|
domains/benchmark/ | Linha de base Meta-Harness | meta_harness.py |
domains/benchmark_component_probe/ | HARDE Estágio I: sondagem de componentes | component_probe.py |
domains/benchmark_adaptive_component_search/ | HARDE Estágio II: busca adaptativa de componentes | adaptive_component_search.py |
O Estágio I sonda os componentes do harness e produz uma rubrica em nível de componente. O Estágio II consome essa rubrica para selecionar e otimizar um componente de forma adaptativa durante a busca. Neste repositório, benchmark é um entre agentdyn, agentsafetybench ou shade_arena.
Recomenda-se Python 3.10 ou mais recente.
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
Código e conjuntos de dados de benchmarks de terceiros não estão incluídos no repositório. Clone o(s) benchmark(s) necessários na raiz do repositório usando os nomes exatos de diretório abaixo:
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
Fontes de dados adicionais:
Os adaptadores resolvem esses repositórios em relação à raiz do HARDE. Estrutura esperada:
HARDE/
├── AgentDyn/
├── SHADE-Arena/
├── Agent-SafetyBench/
├── domains/
└── personalized_harness/
Comandos e opções detalhados específicos de cada benchmark estão documentados no README dentro de cada diretório correspondente em domains/. Exemplos de avaliação com harness fixo estão documentados em personalized_harness/README.md.
Os exemplos a seguir do SHADE-Arena mostram o fluxo de execução completo para cada método.
O Meta-Harness otimiza diretamente o harness completo por três iterações e então avalia o harness selecionado no conjunto de teste reservado:
python domains/shade_arena/meta_harness.py \
--run-name shade_meta_seed0 \
--fresh \
--iterations 3 \
--seed 0 \
--run-final-test
Os resultados são gravados em domains/shade_arena/runs/shade_meta_seed0/.
Esta linha de base avalia o harness de benchmark não modificado, propõe um harness personalizado em uma única chamada ao LLM e avalia essa proposta nas mesmas tarefas do SHADE-Arena. Ela não realiza busca iterativa:
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
Sem as flags --skip_generate, --skip_base ou --skip_personalized, este comando executa a cadeia completa:
base-harness evaluation → one-shot harness proposal → proposed-harness evaluation → summary
O HARDE primeiro sonda componentes individuais do harness no Estágio I:
python domains/shade_arena_component_probe/component_probe.py \
--run-name shade_probe_seed0 \
--seed 0
O Estágio I grava o guia de harness gerado em:
domains/shade_arena_component_probe/runs/shade_probe_seed0/experience/module_rubric.md
O Estágio II consome esse guia, seleciona adaptativamente um componente a cada iteração, executa três iterações de busca e avalia o harness final selecionado:
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
Os metadados de citação serão adicionados com o lançamento do artigo.