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