Harness
исполняющий контур вокруг языковой модели
Harness — это программный слой, который организует работу модели: собирает вход, ведёт состояние, вызывает разрешённые инструменты, проверяет результат и сохраняет ход выполнения. В оценочных системах тот же термин означает контур, который одинаково прогоняет модели через задания и считает метрики.
Коротко
Коротко. Harness — программная обвязка, которая превращает отдельный вызов модели в повторяемый процесс. В агентском контуре она ведёт задачу по шагам, исполняет инструменты, возвращает их результаты модели и решает, когда остановиться. В оценочном — одинаково готовит задания, получает ответы и считает метрики. Модель может быть той же, а поведение системы — разным из-за устройства harness.
Что это такое
У слова harness нет одной формальной спецификации для всей AI-индустрии. Обычно так называют исполняющий контур вокруг модели: код, который решает, что передать модели, что сделать с её ответом и какой шаг будет следующим.
Один вызов языковой модели довольно прост. Система передаёт вход и получает ответ. Сама по себе эта операция не обязана хранить историю, читать файлы, запускать команды, повторять неудачный шаг или проверять, достигнут ли результат. Всё это появляется на внешнем уровне.
Harness может быть небольшим циклом в одном скрипте или заметной частью большого продукта. Его границы тоже зависят от архитектуры: где-то к нему относят только оркестрацию вызовов, где-то — ещё память, ограничения, подтверждения человека, трассировку и обработку ошибок.
Главное здесь не размер и не название библиотеки, а роль: harness связывает модель с конкретным процессом.
Агентский harness
Агентский контур нужен, когда следующий шаг нельзя полностью записать заранее. Модель получает задачу и доступные действия, выбирает действие, а среда исполняет его и возвращает наблюдение. Цикл продолжается, пока не получен результат или не сработало ограничение.
Упрощённо это выглядит так:
задача → модель → запрос инструмента → выполнение → наблюдение
↑ ↓
└──── следующий шаг или проверка ────┘
Например, при работе с кодом модель может сначала найти нужный файл, затем прочитать соседний модуль, предложить изменение и запустить тест. Чтение файла и запуск теста делает не модель: она лишь формирует структурированный запрос, а harness проверяет его и вызывает соответствующий инструмент.
В этом контуре обычно встречаются:
- инструкции и описание доступных инструментов;
- сборка контекста для очередного обращения к модели;
- проверка аргументов вызова;
- исполнение разрешённого действия;
- возврат результата в историю;
- критерий завершения, лимит шагов и бюджет;
- обработка ошибок и повторов;
- журнал событий и итоговый результат.
Не каждый агентский harness содержит все пункты. Память между запусками, передача задачи другому агенту или автоматический откат — дополнительные решения, а не обязательные свойства термина.
Автономность тоже бывает разной. Один контур сам выполняет безопасные операции, но спрашивает подтверждение перед записью или отправкой данных. Другой заранее ограничен только чтением. Человек в цикле не делает систему «менее агентской» — он задаёт границу полномочий.
Оценочный harness
Evaluation harness решает другую задачу: делает оценку модели воспроизводимой. Вместо свободного цикла у него обычно есть фиксированная последовательность:
набор заданий → шаблон входа → модель → извлечение ответа
→ метрика → сводный отчёт
Такой контур загружает данные, приводит примеры к нужному формату, вызывает модель одинаковым способом, обрабатывает ответы и считает заданную метрику. Для задач с выбором ответа это может быть точность, для генерации текста — другая функция оценки.
Ценность оценочного harness не в том, что он делает любое число автоматически «объективным». Он фиксирует процедуру. Если вместе с результатом сохранены конфигурация задания, версия данных, параметры модели и версия кода, запуск проще повторить и проверить.
Даже здесь остаются источники расхождений:
- разные шаблоны и число примеров в контексте;
- иной способ извлечения ответа;
- параметры генерации;
- различия токенизатора или серверного режима;
- порядок усреднения метрик;
- обновление данных или кода задачи.
Поэтому одно название бенчмарка ещё не гарантирует сопоставимость двух таблиц. Нужен протокол, который стоял между набором и моделью.
Что именно задаёт harness
Контекст и состояние
Harness собирает сообщения, результаты инструментов, выбранные документы и служебные инструкции в следующий вход модели. Если история стала слишком большой, внешний слой решает, что оставить, что свернуть в краткое резюме и что загрузить заново.
Состояние может жить только во время одного запуска или сохраняться между сессиями. Во втором случае появляются отдельные вопросы: что считать памятью, как её обновлять, когда удалять и кто имеет к ней доступ.
Инструменты и полномочия
Описание инструмента сообщает модели, какое действие существует и какие аргументы оно принимает. Harness проверяет структуру запроса, сопоставляет её с реальной функцией и решает, разрешено ли выполнение.
Доступ к инструменту не равен безусловному разрешению на любое действие. Чтение и запись можно разделить, пути — ограничить рабочей папкой, сеть — закрыть, опасную операцию — поставить на подтверждение. Для кода и внешних данных полезна изолированная среда.
Проверка и остановка
Фраза модели «готово» не всегда означает, что задача решена. Контур может проверить наличие файла, код возврата команды, тесты, формат ответа или другой наблюдаемый критерий. Если проверка не прошла, результат возвращается модели как новое наблюдение.
Одновременно нужны пределы: число шагов, время, токены, стоимость и количество повторов. Иначе ошибка инструмента или неудачная стратегия способны закрутить цикл.
Наблюдаемость
Трасса запуска связывает обращения к модели, вызовы инструментов, проверки и ошибки в одну историю. Она помогает понять, где система приняла неверное решение и почему итог изменился после правки.
В трассах могут оказаться пользовательские данные, содержимое файлов и аргументы инструментов. Поэтому журналирование требует тех же правил доступа, сроков хранения и удаления секретов, что и остальные данные продукта.
Где проходит граница с другими понятиями
- API даёт способ обратиться к модели или сервису. Harness использует API, но добавляет порядок шагов и прикладную логику.
- SDK или фреймворк предоставляет готовые строительные блоки: инструменты, сессии, маршрутизацию, трассировку. Конкретный процесс, собранный из них, становится harness.
- AI-агент описывает поведение системы, которая выбирает действия для достижения цели. Harness — код, который это поведение исполняет и ограничивает.
- Workflow часто задаёт известную последовательность шагов заранее. В агентском контуре часть маршрута выбирает модель во время выполнения. На практике обе схемы могут сочетаться.
- Промпт — один из входов модели. Harness решает, когда его собрать, какие данные добавить и что сделать с ответом.
- Интерфейс показывает систему пользователю. Чат или редактор может содержать harness, но не равен ему целиком.
Пример без привязки к продукту
Представим помощника, который готовит ответ по внутренней базе знаний.
Простой вызов модели получает вопрос и пытается ответить из контекста, который уже передан. Harness может выстроить более проверяемый путь:
- Определить, нужен ли поиск по базе.
- Передать поисковому инструменту короткий запрос.
- Вернуть найденные фрагменты модели вместе с источниками.
- Попросить ответ в заданной структуре.
- Проверить, что ссылки относятся к использованным фрагментам.
- Остановиться или повторить поиск, если данных не хватает.
Здесь качество зависит не только от самой модели. Важны поиск, формат контекста, ограничения доступа, проверка ссылок и правило остановки. Замена модели может улучшить ответы, но не исправит сломанный поиск или слишком широкие полномочия.
Риски, которые появляются вокруг модели
Harness расширяет возможности системы, а вместе с ними — область ошибок.
Недоверенные данные. Страница, документ или вывод инструмента может содержать инструкцию, которую модель примет за команду. Внешний контент отделяют от системных правил, а действия ограничивают независимо от текста модели.
Побочные эффекты при повторе. Повтор чтения обычно безвреден, а повтор отправки письма или платежа — нет. Операциям с последствиями нужны подтверждения, уникальные идентификаторы или защита от двойного выполнения.
Избыточные права. Универсальный инструмент удобен, но повышает риск. Небольшой набор узких функций с явными схемами проще проверять и журналировать.
Ложная уверенность в проверке. Тест или guardrail покрывает только записанное условие. Успешная проверка не доказывает полную корректность и безопасность результата.
Утечка через логи. Подробная трассировка полезна для отладки, но может сохранить секреты и персональные данные. Состав логов приходится проектировать заранее.
Harness и графы генерации изображений
В графе ComfyUI тоже есть внешний слой, который соединяет модели, загрузку данных, сэмплинг и постобработку в воспроизводимый процесс. По роли это похоже на harness: отдельные компоненты получают порядок и общие параметры.
Однако слово harness чаще встречается рядом с языковыми моделями, агентами и оценкой. Для нодовой генерации точнее говорить «workflow» или «пайплайн», если проект сам не использует другую терминологию.
Частые вопросы
Harness всегда работает в цикле?
Нет. Цикл характерен для агентских задач. Оценочный или прикладной harness может быть прямой последовательностью из нескольких заранее известных шагов.
Можно ли менять модель внутри одного harness?
Часто да, если совпадают ожидаемые форматы, инструменты и возможности. Но «совместимый API» ещё не гарантирует одинакового поведения: модели по-разному выбирают инструменты, соблюдают схемы и используют длинный контекст.
Готовый агентский фреймворк уже является harness?
Фреймворк обычно даёт детали конструктора. Harness появляется, когда из них собран конкретный исполняемый процесс с инструментами, правилами и критериями завершения.
Что важнее: модель или harness?
Они отвечают за разные уровни. Модель ограничивает доступные способности, а harness определяет, как эти способности включаются в работу. Сильная модель не компенсирует неверные права и сломанные проверки; аккуратная обвязка не добавляет знания, которого у модели и источников нет.
Как понять, что оценка воспроизводима?
Рядом с результатом нужны версия модели, конфигурация задания, данные, параметры запуска, способ подсчёта и версия кода harness. Без этого число остаётся ориентиром, но повторить его трудно.
Главное
Harness — это исполняющий контур вокруг модели. В агентской системе он ведёт задачу через действия, наблюдения и проверки. В оценочной — фиксирует путь от набора заданий до метрик. Его качество определяется не количеством модных функций, а ясными полномочиями, наблюдаемым результатом, контролем состояния и воспроизводимым протоколом.