Harness² — фреймворк, который сам улучшает обвязку агента

· 5 мин чтения
harness ai-agents self-improving benchmarks open-source
📂 Исходный код на GitHub

Harness² — plug-and-play фреймворк от Google Research для рекурсивного harnessing в открытом мире: обвязка агента улучшается сама через цикл Propose–Probe–Compose, поддерживаются параллельная и последовательная рекурсия, исполнители OpenCode и Codex.

Harness² — фреймворк, который сам улучшает обвязку агента

Harness² — фреймворк, который сам улучшает обвязку агента

Harness² — open-source фреймворк от Google Research для рекурсивного улучшения агента в открытом мире, то есть в тех условиях, когда агенту попадаются задачи, которых не было в виду, когда проектировали систему. Модель при этом не трогают вообще: меняется только система вокруг неё. Лицензия Apache-2.0, около 9,8 тысячи звёзд на GitHub, есть статья на arXiv и сайт проекта.

Ключевое понятие здесь простое. Harness («обвязка») — это всё, что находится вокруг модели и превращает её в агента: системный промпт, инструменты, память, навыки, оркестрация. Harnessing — процесс оптимизации этой обвязки. Тезис «обвязка важнее самой модели» давно известен, но здесь доведён до автоматизма: улучшает обвязку не инженер вручную, а автоматический цикл внутри фреймворка.

Два уровня рекурсии

Фреймворк соединяет два уровня, и веса модели остаются нетронутыми на обоих.

Рекурсия на уровне задачи улучшает обвязку под текущую задачу. Работает она по схеме Propose–Probe–Compose: система предлагает правки, проверяет (probe) их эффект на той же самой задаче, а затем собирает улучшенную обвязку из разницы в поведении между запусками. Обратной связи с эталонным ответом не требуется — сравниваются прогоны, а не «правильные» результаты.

Рекурсия на уровне обвязки обновляет постоянный improvement harness — обвязку, которая занимается улучшением. После каждой задачи туда попадают принятые обвязки и подтверждённые доказательствами уроки из предыдущего опыта. Они подсказывают, как улучшать следующие задачи.

Разница между уровнями простая: первый отвечает на вопрос «как решить вот эту задачу», второй — «как решать следующие задачи после неё».

Восемь редактируемых компонентов

Фреймворк открывает восемь точек, которые можно менять:

Компонент English За что отвечает
Системный промпт system prompt Базовые инструкции и роль агента
Ограничения guardrails Запреты и правила поведения
Память memory Накопленный контекст между запусками
Руководство по инструментам tool guidance Описание интерфейса вызовов
Субагенты subagents Делегирование отдельных кусков работы
Навыки skills Переиспользуемые процедуры
Скрипты scripts Внешние программы, доступные агенту
Плагины plugins Слои промежуточной обработки

Вместе эти восемь компонентов управляют сборкой контекста, интерфейсом инструментов, делегированием и поведением агента внутри цикла вызовов. Именно они и являются объектом улучшения: цикл Propose–Probe–Compose правит их, а не код агента.

Результаты

Замеры проведены на трёх профессиональных бенчмарках в четырёх конфигурациях «модель + обвязка». Один шаг Harness² улучшает GLM-5 и Gemini 3.5 Flash относительно их базовых обвязок:

Бенчмарк Что измеряет Прирост
WorkBuddy-Bench Офисная работа, веб, код до 11,5 балла
JobBench Профессиональные рабочие задачи до 4,5 балла
LAB Юридическая работа (доля частично пройденных критериев) до 11,8 процентного пункта

Если увеличить бюджет рекурсии на уровне задачи, результат становится ещё лучше. Отдельная деталь для тех, кто готовит замеры сам: смена модели-судьи меняет саму метрику, поэтому её нельзя менять между прогонами, оценкой и отчётом.

Параллельная и последовательная рекурсия

Бюджет рекурсии можно тратить двумя способами.

Параллельная рекурсия исследует шире: проверяются K общих и K доменных кандидатов, затем из общих доказательств собираются K готовых комбинаций.

Последовательная рекурсия копает глубже: улучшенная обвязка и накопленные доказательства переносятся из шага в шаг, и цикл Propose–Probe–Compose повторяется K раз.

Опция Что делает
--k 1 Один шаг Propose–Probe–Compose
--k K --mode parallel Проверка K общих и K доменных кандидатов, затем K композиций
--k K --mode sequential K последовательных шагов улучшения обвязки
--substrate cx Исполнитель Codex вместо стандартного OpenCode

Установка

Нужны Linux, Python 3.12 и uv. Из корня репозитория:

uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install -e '.[render]'
harness2-demo --output runs/demo --k 2

Локальное демо прогоняет оба режима рекурсии с детерминированными редакторами и настоящими запусками Python. Ключи моделей для него не нужны.

Для замеров с реальными моделями дополнительно ставятся Node.js 20+, Google Cloud CLI и зависимости бенчмарков. LAB требует Pandoc и Poppler, WorkBuddy-Bench — Docker. Настройка моделей:

cp .env.example .env
# Edit .env with your Vertex AI project and model IDs.
gcloud auth application-default login

Подробности про ключи, альтернативные способы входа и исполнитель Codex — в руководстве по настройке.

Бенчмарки

Каждый бенчмарк ставится отдельно, и для каждой команды выбирается только один:

Бенчмарк Задачи Установка Источник
JobBench Профессиональная работа harness2-setup jb job-bench-eval
LAB Юридическая работа harness2-setup lab harvey-labs
WorkBuddy-Bench Офис, веб, код harness2-setup wb workbuddy-bench

Пример полного цикла для LAB:

harness2-setup lab
harness2-check --bench lab
harness2 --bench lab --k 1 --mode parallel \
  --only-domains antitrust-competition --max-tasks 1
harness2-judge --bench lab --k 1 --mode parallel
harness2-report --bench lab --k 1 --mode parallel

Параметры --k и --mode должны совпадать во всех пяти командах, иначе оценка будет считаться по другой конфигурации. Флаг --dry-run показывает выборку задач без обращения к моделям. Подробности по каждому бенчмарку, включая требования к Docker и выбор подмножества, собраны в гайдах по бенчмаркам.

Исполнитель Codex

Альтернативный исполнитель работает через endpoint Responses API. Для Gemini на Vertex AI фреймворк включает мост harness2-bridge на базе локального LiteLLM-сервера, он использует те же Application Default Credentials:

uv pip install -e '.[render,bridge]'
harness2-bridge                 # for WorkBuddy: harness2-bridge --host 0.0.0.0

Мост печатает параметры HARNESS2_CODEX_*, которые нужно добавить в .env. Дальше во все команды добавляется --substrate cx. Свой endpoint задаётся через HARNESS2_CODEX_BASE_URL, HARNESS2_CODEX_API_KEY и HARNESS2_CODEX_MODEL.

Оговорки, о которых стоит знать заранее

Доступ в сеть у исполнителя не ограничен, а Codex запускается с отключённой песочницей. При этом рубрики JobBench, включая RUBRICS.json, лежат на Hugging Face в открытом доступе. Перед оценкой нужно закрыть эти хосты, иначе агент может подсмотреть ответы и критерии. Раздел про сетевые ограничения описан в гайде по экспериментам.

Лицензия WorkBuddy-Bench от Tencent содержит территориальное ограничение, поэтому условия стоит прочитать до скачивания: текст лицензии. Производные файлы фреймворка наследуют её.

Результаты складываются в каталог runs/ по бенчмаркам и подмножествам: сводки по задачам, результаты работы, принятые обвязки, заметки рефлексии и оценки. Повтор той же команды продолжает прерванный запуск.

Лицензия и статус проекта

Сам Harness² распространяется под Apache 2.0. Сторонний код в каталоге third_party/, бенчмарки и наборы данных сохраняют свои исходные лицензии — подробности в уведомлениях о сторонних зависимостях.

Это не официально поддерживаемый продукт Google. Проект не участвует в программе вознаграждений за уязвимости в открытом коде Google.

Источник: https://github.com/google-research/harness2