Дело не в модели: что такое agent harness и почему он решает всё
Вы собрали чат-бота. Возможно, подключили цикл ReAct с парой инструментов. На демках работает отлично. Потом вы пробуете собрать что-то для продакшена, и колёса отваливаются: модель забывает, что делала три шага назад, вызовы инструментов молча падают, а контекстное окно забивается мусором.
Проблема не в модели. Проблема во всём, что её окружает. LangChain доказали это, когда поменяли только инфраструктуру вокруг своей модели, не трогая веса, и перепрыгнули с позиции за пределами топ-30 на пятое место в TerminalBench 2.0. В отдельном исследовании система, где LLM сама оптимизировала окружающую инфраструктуру, достигла 76,4% прохождения тестов и обошла системы, спроектированные вручную. У этой инфраструктуры теперь есть название: agent harness, или обвязка агента.
Что такое обвязка агента
Термин формализовали в начале 2026 года, но сама концепция появилась гораздо раньше. Обвязка это полная программная инфраструктура вокруг LLM: цикл оркестрации, инструменты, память, управление контекстом, сохранение состояния, обработка ошибок и защитные ограничения. В документации Anthropic по Claude Code сказано прямо: SDK и есть та обвязка, на которой работает Claude Code. Команда OpenAI Codex использует ту же формулировку и прямо приравнивает понятия «агент» и «обвязка».
Лучше всего формулу выразил Вивек Триведи из LangChain: если вы не модель, значит, вы обвязка. Здесь важно различать два понятия. Агент это поведение, которое возникает на выходе: целенаправленная сущность, которая пользуется инструментами и сама себя корректирует. Обвязка это механизм, который такое поведение производит. Когда кто-то говорит «я собрал агента», на деле он собрал обвязку и направил её на модель.
Хорошую аналогию ещё в 2023 году предложил Берен Миллидж в эссе про LLM как естественные языковые компьютеры. Голая LLM это процессор без оперативной памяти, без диска и без ввода-вывода. Контекстное окно работает как оперативная память: быстрая, но ограниченная. Внешние базы данных играют роль диска: большого, но медленного. Интеграции с инструментами это драйверы устройств. А обвязка это операционная система. По сути, мы заново изобрели архитектуру фон Неймана.
Три уровня инженерии
Вокруг модели выстраиваются три концентрических уровня. Промпт-инженерия отвечает за инструкции, которые получает модель. Контекст-инженерия управляет тем, что модель видит и в какой момент. Harness-инженерия включает в себя оба предыдущих уровня плюс всю инфраструктуру приложения: оркестрацию инструментов, сохранение состояния, восстановление после ошибок, циклы верификации, обеспечение безопасности и управление жизненным циклом. Обвязка это не обёртка вокруг промпта, а полноценная система, которая делает возможным автономное поведение агента.
Из чего состоит продакшен-обвязка
Если свести воедино практики Anthropic, OpenAI, LangChain и сообщества, в зрелой обвязке набирается около двенадцати самостоятельных компонентов. Сердце системы это цикл оркестрации, который реализует петлю «мысль, действие, наблюдение», она же ReAct. Механически это часто обычный цикл while: собрать промпт, вызвать модель, разобрать ответ, выполнить вызовы инструментов, вернуть результаты обратно и повторять, пока задача не решена. Anthropic описывают свой рантайм как «тупой цикл», в котором весь интеллект живёт в модели, а обвязка лишь управляет ходами.
Инструменты это руки агента. Они описываются схемами с именем, описанием и типами параметров, которые подмешиваются в контекст, чтобы модель знала, что ей доступно. Слой инструментов отвечает за регистрацию, валидацию схемы, извлечение аргументов, запуск в песочнице, сбор результатов и приведение их обратно в понятный модели вид. У Claude Code инструменты разбиты на шесть категорий: операции с файлами, поиск, исполнение, доступ в веб, работа с кодом и порождение субагентов.
Память работает на нескольких горизонтах. Кратковременная это история диалога в рамках одной сессии. Долговременная переживает сессии: Anthropic использует файлы CLAUDE.md и автогенерируемые MEMORY.md, LangGraph хранит данные в JSON-сторах с пространствами имён, OpenAI поддерживает сессии поверх SQLite или Redis. Важный принцип: агент относится к собственной памяти как к подсказке и сверяется с реальным состоянием, прежде чем что-то делать.
Управление контекстом это место, где агенты чаще всего тихо ломаются. Корень проблемы в деградации контекста: качество модели падает на 30% и больше, когда ключевая информация оказывается в середине окна. Это подтверждают исследование Chroma и работа Stanford про «потерянное в середине». Даже окна на миллион токенов страдают от ухудшения следования инструкциям по мере роста контекста. В продакшене с этим борются сжатием истории, маскированием старых наблюдений, подгрузкой данных по требованию и делегированием подзадач субагентам, которые возвращают сжатую сводку на одну-две тысячи токенов. Цель, как формулирует Anthropic, найти минимальный набор токенов с максимальным сигналом.
Остальные компоненты держат систему на плаву. Сборка промпта иерархически собирает то, что реально видит модель: системный промпт, описания инструментов, файлы памяти, история диалога и текущий запрос. Разбор вывода опирается на нативный вызов инструментов, когда модель возвращает структурированные объекты, а не текст, который надо парсить. Управление состоянием отвечает за чекпойнты и возможность продолжить работу после прерывания. Обработка ошибок критична, потому что процесс из десяти шагов с надёжностью 99% на каждом даёт на выходе всего около 90%: ошибки копятся быстро. Защитные ограничения проверяют вход, выход и каждый вызов инструмента, а триггер мгновенно останавливает агента. И наконец, циклы верификации это то, что отличает игрушку от продакшена. Борис Черни, создатель Claude Code, отмечал, что возможность проверить свою работу повышает качество в два-три раза.
Метафора строительных лесов
Сравнение со строительными лесами здесь не для красоты, оно точное. Леса это временная конструкция, которая позволяет рабочим добраться туда, куда иначе не дотянуться. Сами они ничего не строят, но без них верхние этажи недостижимы. Ключевой вывод: леса убирают, когда здание готово. По мере роста моделей сложность обвязки должна снижаться. Manus переписывали пять раз за полгода, и каждая переработка убирала лишнее. Это и есть принцип сооэволюции: модели теперь дообучают вместе с конкретной обвязкой, поэтому Claude Code заточен под ту обвязку, на которой учился. Хороший тест на будущее звучит так: если производительность растёт вместе с более мощными моделями без усложнения обвязки, дизайн выбран верно.
Обвязка и есть продукт
Два продукта на одной и той же модели могут показывать радикально разную производительность только за счёт устройства обвязки. Данные TerminalBench не оставляют сомнений: смена одной лишь обвязки сдвигает агента более чем на двадцать позиций в рейтинге. Обвязка это не решённая задача и не безликий слой инфраструктуры. Именно здесь живёт сложная инженерия: управление контекстом как дефицитным ресурсом, проектирование циклов проверки, которые ловят сбои до того, как те накопятся, системы памяти без галлюцинаций и решение о том, сколько лесов строить, а сколько оставить модели.
Поле движется к более тонким обвязкам по мере того, как модели становятся сильнее. Но сама обвязка никуда не денется: даже самой способной модели нужно что-то, что управляет её контекстным окном, исполняет вызовы инструментов, хранит состояние и проверяет результат. Так что в следующий раз, когда ваш агент сломается, не спешите винить модель. Посмотрите на обвязку.