
Исследовательский код для HARDE — обвязки агента, которая исследует и адаптивно оптимизирует компоненты для обнаружения рисков во время выполнения и контроля исполнения в наборах тестов безопасности агентов.
Релиз кода для HARDE: Оптимизация агентных обвязок для обнаружения рисков во время выполнения и контроля исполнения.
Репозиторий содержит два взаимодополняющих семейства точек входа:
domains/: базовый уровень Meta-Harness и две стадии HARDE для каждого бенчмарка.personalized_harness/: адаптеры бенчмарков, базовые обвязки, обученные/персонализированные обвязки и конвейеры оценки.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
Для бенчмарка с именем benchmark каталоги следуют этому соглашению:
| Каталог | Стадия метода | Основная точка входа |
|---|---|---|
domains/benchmark/ | Базовый уровень Meta-Harness | meta_harness.py |
domains/benchmark_component_probe/ | HARDE Stage I: зондирование компонентов | component_probe.py |
domains/benchmark_adaptive_component_search/ | HARDE Stage II: адаптивный поиск компонентов | adaptive_component_search.py |
Stage I зондирует компоненты обвязки и формирует рубрику на уровне компонентов. Stage II использует эту рубрику для адаптивного выбора и оптимизации компонента во время поиска. В этом репозитории benchmark — это один из agentdyn, agentsafetybench или shade_arena.
Рекомендуется Python 3.10 или новее.
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
Сторонний код и наборы данных бенчмарков не включены в репозиторий. Клонируйте нужные бенчмарки в корень репозитория, используя точные имена каталогов, указанные ниже:
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
Дополнительные источники данных:
Адаптеры находят эти репозитории относительно корня HARDE. Ожидаемая структура:
HARDE/
├── AgentDyn/
├── SHADE-Arena/
├── Agent-SafetyBench/
├── domains/
└── personalized_harness/
Подробные команды и параметры для конкретных бенчмарков описаны в README внутри соответствующего каталога в domains/. Примеры оценки с фиксированной обвязкой описаны в personalized_harness/README.md.
Следующие примеры для SHADE-Arena демонстрируют полный поток выполнения для каждого метода.
Meta-Harness напрямую оптимизирует полную обвязку в течение трёх итераций, а затем оценивает выбранную обвязку на отложенном тестовом наборе:
python domains/shade_arena/meta_harness.py \
--run-name shade_meta_seed0 \
--fresh \
--iterations 3 \
--seed 0 \
--run-final-test
Результаты записываются в domains/shade_arena/runs/shade_meta_seed0/.
Этот базовый уровень оценивает неизменённую обвязку бенчмарка, предлагает одну персонализированную обвязку за один вызов LLM и оценивает это предложение на тех же задачах SHADE-Arena. Он не выполняет итеративный поиск:
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
Без флагов --skip_generate, --skip_base или --skip_personalized эта команда запускает полную цепочку:
base-harness evaluation → one-shot harness proposal → proposed-harness evaluation → summary
HARDE сначала зондирует отдельные компоненты обвязки на Stage I:
python domains/shade_arena_component_probe/component_probe.py \
--run-name shade_probe_seed0 \
--seed 0
Stage I записывает сгенерированное руководство по обвязке в:
domains/shade_arena_component_probe/runs/shade_probe_seed0/experience/module_rubric.md
Stage II использует это руководство, адаптивно выбирает компонент на каждой итерации, выполняет три итерации поиска и оценивает финальную выбранную обвязку:
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
Метаданные для цитирования будут добавлены вместе с публикацией статьи.