Harness
harness — программная обёртка-оркестратор вокруг языковой модели
Harness — это программная обёртка вокруг языковой модели, которая превращает её из единичного API-вызова «дал текст — получил ответ» в работающую систему: автономного агента, оценочный стенд для бенчмарков или специализированный продукт. Бывают двух главных типов — agent harness (Claude Code, Cursor, Devin) и evaluation harness (lm-evaluation-harness, HELM). Без harness даже самая мощная LLM остаётся текстовым процессором; с harness — превращается в Cursor, ChatGPT или Claude Code. К 2026 году harness стал главным дифференциатором AI-продуктов: при сравнимых моделях побеждает тот, у кого лучше обвязка.
Коротко
Коротко. Harness — это программная обёртка вокруг языковой модели, которая превращает её из «голой функции» в работающую систему. Бывает двух главных типов: agent harness (Claude Code, Cursor, Devin — оркестрирует цикл «запрос → действие → проверка результата») и evaluation harness (lm-evaluation-harness от EleutherAI, HELM от Стэнфорда — прогоняет модель через стандартные бенчмарки). Без harness даже самая мощная LLM остаётся текстовым процессором: ChatGPT — это harness вокруг GPT-4o, Claude Code — harness вокруг Claude. К 2026 году именно качество harness, а не модель, чаще всего отличает один AI-продукт от другого.
Что это такое
Английское слово harness переводится как «упряжь» — то, что превращает лошадь в средство тягловой силы. Без упряжи лошадь сильная, но бесполезная для повозки. В упряжи — приносит реальную работу. В AI-разработке аналогия буквальная.
Языковая модель сама по себе — это функция. На вход даётся текст, на выходе — продолжение. Один запрос → один ответ. Никакой памяти между запросами, никакого доступа к файлам, никакого вызова внешних инструментов. Это математический объект, не агент.
Когда пользователь открывает ChatGPT и видит чат-интерфейс с сессиями, памятью о прошлых сообщениях, возможностью загружать файлы, генерацией картинок, веб-поиском и голосом — он видит harness. ChatGPT — это и есть harness. Внутри него работает модель GPT-4o (или o3, или GPT-4o mini). Если открыть API напрямую и позвать chat.completions.create(), никакого «ChatGPT-опыта» не будет. Будет голая модель.
То же самое с Claude. Сама модель — файл с миллиардами параметров. Claude Code — это harness: CLI-инструмент, который превращает Claude в автономного программиста, читающего код, открывающего файлы, запускающего тесты, делающего коммиты. Cursor — тоже harness: IDE, в которую вшит Claude или GPT с пониманием всей кодовой базы. Devin — ещё один harness, на этот раз с полной автономией и собственным окружением для выполнения задач.
Термин стал широко популярным с 2023 года, когда появились первые большие open-source проекты:
- lm-evaluation-harness от EleutherAI (2022) — стандарт оценки LLM на десятках бенчмарков (MMLU, HellaSwag, ARC, MATH, HumanEval, TruthfulQA). На результатах из этой библиотеки строятся почти все таблицы лидеров на Hugging Face и Papers With Code.
- AutoGPT, BabyAGI (весна 2023) — первые публичные «AI-агенты». По сути — простейшие agent harness, прогоняющие модель в цикле «придумай шаг → сделай шаг → проверь → повтори».
- Claude Code, Devin, Cursor Composer (2024–2025) — production-grade agent harness для разработчиков. Каждый — отдельное произведение инженерии, конкурирующее не моделью (у всех под капотом одни и те же фронтиры), а качеством обвязки.
К 2026 году стало понятно: harness — это не «обвязка», а половина продукта. Голая модель — товар. Harness — отличие. Когда говорят «Cursor лучше Windsurf» — речь идёт почти всегда о разнице в harness, а не в модели.
Как это работает
Под капотом любого agent harness — цикл, который оркестрирует LLM. Минимальный пример выглядит так:
1. Системный промпт: «Ты — помощник, можешь использовать инструменты:
read_file, write_file, run_command, search_web»
2. Получи задачу от пользователя
3. Цикл:
a. Спроси модель: что делать дальше?
b. Если модель просит инструмент — вызови его, верни результат
c. Если модель говорит «готово» — выйди из цикла
d. Если шагов больше N — выйди (защита от бесконечных циклов)
4. Верни финальный результат пользователю
Каждый поход в цикл — это отдельный вызов API модели, с полной предыдущей историей в контексте. Если задача требует 30 шагов, harness сделает 30 запросов к API. Каждый запрос стоит токены — поэтому хороший harness ещё умеет сжимать контекст: вычищать устаревшие шаги, оставлять только релевантное, чтобы не упереться в лимит окна и не разорить пользователя на счетах за API.
Серьёзный harness содержит ещё:
- Управление памятью — что запоминать между запросами (заметки агента, файловую структуру, ранее принятые решения).
- Tool calling — стандартизированный механизм для модели вызывать функции через function calling, tool calling или открытый протокол MCP.
- Парсинг ответов — модель часто отвечает свободным текстом, надо вытащить из него действия (особенно для старых моделей без structured output).
- Проверка результатов — после действия часто нужно убедиться, что оно сработало (тесты прошли, файл создался, скрипт не упал).
- Обработка ошибок — что делать, если инструмент упал или вернул что-то странное.
- Защита от prompt injection — модель не должна слепо доверять данным, пришедшим из внешних инструментов.
- Логирование и наблюдаемость — что делал агент, чтобы потом можно было разобраться или повторить.
Evaluation harness устроен иначе. Цикл там другой:
1. Загрузи модель
2. Для каждого бенчмарка:
a. Загрузи датасет (например, 14 042 вопроса MMLU)
b. Прогоняй каждый вопрос через модель в едином формате
c. Сравни ответ модели с эталоном
d. Посчитай метрику (accuracy, F1, BLEU, exact match)
3. Выведи итоговый отчёт по всем бенчмаркам
lm-evaluation-harness поддерживает сотни датасетов и десятки моделей. Прогон полной MMLU на одной модели может занять от часа до суток в зависимости от её размера. Главная ценность одного и того же harness в академии, индустрии и open-source — сравнимость результатов между моделями. Без стандартизированной обвязки числа в репортах разных команд были бы несравнимы.
Пример на практике
Возьмём конкретный сценарий: разработчик хочет отрефакторить функцию в большом проекте.
Без harness (голый API Claude):
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4",
max_tokens=4096,
messages=[{
"role": "user",
"content": "Отрефактори функцию calculate_tax"
}],
)
print(response.content[0].text)
Что произойдёт: модель попросит прислать код. Разработчик скопирует. Модель ответит текстом с предложением правок. Разработчик вручную скопирует обратно в файлы, проверит, запустит тесты, обнаружит, что что-то не работает, опять напишет в чат, опять скопирует, опять проверит. Это типичный «chat с LLM» опыт — медленно, с копипастом, с разрывом контекста.
С harness (Claude Code):
$ claude "Отрефактори функцию calculate_tax в src/billing.py,
добавь типы и тесты"
Что произойдёт:
- Harness читает
src/billing.pyсам, без участия разработчика. - Видит зависимости через
grep, читает соседние файлы. - Предлагает план, спрашивает подтверждение.
- Пишет рефакторинг прямо в файлы.
- Запускает существующие тесты, видит, что они проходят.
- Пишет новые тесты для рефакторенной функции.
- Запускает их снова, отлаживает, если упали.
- Создаёт коммит с осмысленным описанием изменений.
Та же модель Claude. Та же интеллектуальная мощность. Но harness превратил пятнадцать минут чата в одну команду.
В мире генерации картинок прямой аналог harness — это ComfyUI: нодовая среда, которая оркестрирует диффузионные модели, LoRA, ControlNet и постобработку в единый воспроизводимый пайплайн. Сами модели в ComfyUI — те же, что в AUTOMATIC1111 или просто в Diffusers. Но harness даёт контроль, повторяемость и расширяемость, которых нет у голой модели.
С чем часто путают
- Harness и модель. Модель — это файл с весами (Claude Opus 4, GPT-4o, Llama 3 70B). Harness — это код, который этим файлом пользуется (Claude Code, ChatGPT, Cursor). Подмена очень частая в массовом разговоре: «ChatGPT написал статью» — на самом деле текст сгенерировала модель GPT-4o, а ChatGPT (harness) только показал результат в чате.
- Harness и AI-агент. Агент — это поведенческая концепция: система, которая автономно решает задачу. Harness — это инженерная реализация. «Агент работает через harness». При этом не каждый harness реализует агента: evaluation harness просто прогоняет бенчмарки, никакой автономии там нет.
- Harness и фреймворк. Фреймворк — общее слово (PyTorch, LangChain, AutoGen). Harness — более узкое: «обвязка вокруг модели для конкретной задачи». LangChain содержит примитивы для построения agent harness, но сам LangChain — это библиотека, а не harness. Конкретный бот, собранный на LangChain — это harness.
- Harness и API. API — это сетевой интерфейс к модели (REST, gRPC, SSE-стримы). Harness — это слой логики поверх API. Голый API не имеет циклов, памяти, tool calling — только запрос-ответ.
- Harness и prompt engineering. Промпт — это что говорится модели. Harness — это как этот промпт собирается, что подкладывается в контекст, какие инструменты доступны. Хороший harness содержит сложный prompt engineering под капотом, но это лишь часть его работы.
Частые ошибки и заблуждения
- «У всех LLM-продуктов одинаковые harness — поэтому всё решает выбор модели». Наоборот. Devin и Claude Code используют примерно одну модель (Claude), но дают существенно разный пользовательский опыт. Cursor и Windsurf конкурируют не моделями (доступ к GPT и Claude у обоих одинаковый), а архитектурой обвязки.
- «Harness можно купить готовый — настроил и работает». Можно: LangChain, AutoGen, CrewAI, OpenAgents дают готовые скелеты. Но production-grade harness под конкретную задачу почти всегда пишется кастомно. Нужно учесть специфику данных, инструментов, ограничений, типичных ошибок. Тонкая настройка harness — это месяцы инженерной работы и десятки итераций.
- «Чем мощнее модель — тем меньше нужен harness». Скорее наоборот. Reasoning-модели (o3, Claude Extended Thinking, DeepSeek R1) требуют более сложного harness — они генерируют огромные внутренние цепочки рассуждений, которые надо парсить, ограничивать по длине, кешировать. Слабая модель часто проще в harness, потому что её ответы предсказуемее.
- «Harness — это просто for-loop». Минимальный — да. Production-grade — нет. Серьёзный harness включает управление токен-бюджетом, сжатие контекста, fallback-стратегии, защиту от runaway-циклов, защиту от prompt injection, систему наблюдаемости, тестовый фреймворк. Anthropic в своих публикациях про Claude Code описывает десятки таких механизмов.
- «Если модель умная, harness может быть глупый». В реальности слабый harness ломает даже сильную модель: она зависает в циклах, теряет контекст, повторяется, не вызывает нужные инструменты. Хорошо видно в open-source: две команды берут одну модель, одна делает рабочий продукт, вторая — игрушку, годную только на демо.
Связанные термины
- LLM — модель, вокруг которой строится harness.
- AI-агент и Agentic AI — то, что harness часто реализует на практике.
- Function Calling и Tool Calling — главные механизмы внутри agent harness.
- MCP — открытый протокол стандартизации связи между harness и внешними инструментами.
- Cursor — пример production agent harness для разработчиков.
- Benchmark — то, что прогоняется через evaluation harness.
- Context Window — главное ограничение, с которым ежеминутно работает harness.
- Memory — что harness накапливает между шагами.
- Prompt Injection — главная угроза для harness, который работает с внешними данными.
Частые вопросы
Чем agent harness отличается от evaluation harness? Agent harness прогоняет модель в цикле для решения практической задачи (написать код, спланировать поездку, ответить на письмо клиента). Evaluation harness прогоняет модель через стандартные тестовые задания, чтобы измерить её способности (MMLU, MATH, HumanEval). Первый — инструмент конечного пользователя или продукта. Второй — инструмент исследователя.
Какой harness считается лучшим для разработки кода в 2026? Безусловного лидера нет. Claude Code от Anthropic — самый «глубокий» по архитектуре, силён для долгих автономных задач и крупных рефакторингов. Cursor — лучший интегрированный IDE-опыт, ближе к привычному редактору. GitHub Copilot — самая широкая поддержка языков и интеграций. Devin — самый автономный, но дорогой и медленный. Выбор зависит от рабочего процесса и бюджета.
Можно ли использовать один harness с разными моделями? Часто — да. Cursor поддерживает GPT, Claude, Gemini и open-source модели через прокси. Claude Code заточен под Claude, но архитектурно мог бы работать с другими reasoning-моделями. Evaluation harness'ы (lm-evaluation-harness) специально проектируются как модель-агностические — это их главное достоинство.
Зачем нужен evaluation harness, если можно протестировать модель вручную? Ради стандартизации. Если каждый исследователь тестирует модель своими промптами на своих примерах, результаты несравнимы между собой. Evaluation harness фиксирует датасеты, форматы промптов и метрики — поэтому MMLU score одной модели можно прямо сравнивать с другой. Без harness вся современная культура «LLM leaderboard» не существовала бы.
Что такое RL harness? Это инфраструктура для дообучения модели через reinforcement learning — например, через RLHF. Содержит цикл «сгенерируй ответы → получи оценки → обнови веса». Технически это тоже harness, но термин в этом смысле используется реже — обычно говорят «RLHF pipeline» или «training infrastructure».
Может ли harness быть платным, а модель — бесплатной? Да, и это типичная бизнес-модель. Cursor берёт деньги ($20/мес) за harness, а внутри использует Claude или GPT через свои промо-цены или подписку пользователя. Аналогично — Codeium, Continue, Windsurf, JetBrains AI Assistant. Параллельно есть open-source harness (OpenHands, SWE-agent, Aider) — бесплатные обёртки вокруг платных моделей.
Что такое «harness contamination» в evaluation? Когда модель «выучила» формат конкретного бенчмарка и даёт завышенные результаты не за счёт реального понимания, а за счёт распознавания формата. Это одна из причин, почему даже самые честные evaluation harness постепенно теряют диагностическую ценность — модели «подгоняются» под них в процессе обучения, и сравнение становится менее показательным.
Главное
Harness — это инженерный слой, который превращает языковую модель из чистой функции в систему, способную делать дело. Сама LLM умеет только одно: предсказать следующий токен. Цикл, инструменты, память, проверка результатов, защита от ошибок, оркестровка с внешним миром — всё это даёт harness.
В 2026 году harness стал главным дифференциатором AI-продуктов. Голые модели сравнимы между собой: у всех большая мощность, у всех общая архитектура Transformer, разрыв в качестве на бенчмарках — единицы процентов. Различие появляется на уровне обвязки. Тот же Claude в Cursor, в Claude Code и в чистом API даёт три радикально разных пользовательских опыта, потому что три разных harness.
Понимая концепцию harness, легче не путать «модель» и «продукт», легче выбирать инструменты под задачу, легче строить собственные AI-системы. Когда стоит задача встроить AI в свой продукт, главный вопрос обычно не «какую модель взять» — модели у всех плюс-минус одинаковые. Главный вопрос: какой harness вокруг неё построить.