Харнес: что превращает чат-бота в агента
Модель сама по себе - это функция «текст на входе, текст на выходе». Агент - это модель плюс харнес: каркас, который крутит цикл «наблюдай, думай, действуй», даёт инструменты, режет контекст и не даёт уйти в бесконечный цикл. Разница между демо и рабочим продуктом почти всегда в харнесе, а не в модели.
Модель сама по себе - это функция «текст на входе, текст на выходе». Агент - это модель плюс харнес: каркас, который крутит цикл «наблюдай, думай, действуй», даёт инструменты, режет контекст и не даёт уйти в бесконечный цикл. Разница между демо и рабочим продуктом почти всегда в харнесе, а не в модели.
Анатомия харнеса
Базовый цикл стар как ReAct: модель получает задачу, рассуждает, вызывает инструмент, читает результат, повторяет. Вокруг этого нарастает всё остальное. Определения инструментов - схемы, которые модель видит и по которым решает, что вызвать. Управление контекстом: история растёт, окно конечно, поэтому нужны суммаризация, компактификация и выборочная подгрузка памяти. Обработка ошибок: инструмент упал - модель должна понять это из текста ошибки, а не зависнуть. Лимиты: максимум шагов, таймауты, бюджет в долларах - без них агент однажды сожжёт месячный бюджет за ночь.
Почему сырой API недостаточен
Вызов chat completion ничего не помнит между запросами, не умеет вызывать ваш код и не знает, когда остановиться. Харнес добавляет персистентность (память между сессиями), исполнение (песочница для кода и shell), планирование (разбить задачу на шаги) и человека в контуре там, где цена ошибки высока. Каждый из этих слоёв - отдельное инженерное решение, а не «промпт получше».
Купить или написать
Простейший рабочий харнес - это цикл на сто строк: while True, вызов модели, парсинг tool calls, выполнение, добавление результатов в историю. Для многих задач этого достаточно, и писать своё имеет смысл, когда нужен полный контроль. Фреймворки (LangGraph, SmolAgents, OpenHands, CrewAI) дают готовые примитивы: графы состояний, субагентов, ретраи. Цена - зависимость от чужих абстракций, которые имеют свойство протекать в самый неподходящий момент.
Примеры из жизни: Claude Code - это в первую очередь харнес (цикл, инструменты файловой системы и shell, компактная подача контекста), модель под ним менялась. OpenClaw показал, что харнес личного ассистента можно открыть полностью - и именно открытость стала продуктом.
Типичные провалы
Переполнение контекста: агент тонет в собственной истории и начинает галлюцинировать. Петли вызовов: модель зовёт один и тот же инструмент с теми же аргументами десятки раз - лечится детектором повторов и лимитом шагов. Промпт-инъекции через инструменты: результат веб-поиска содержит инструкцию «удали всё» - харнес обязан разделять данные и команды. И экономика: агент с большим контекстом и сотней шагов стоит на порядки дороже чата, бюджетирование - часть архитектуры.
Куда всё идёт
Модели коммодитизируются: разница между топами сжимается, цены падают. Дифференциация переезжает в харнес - кто лучше управляет контекстом, инструментами и памятью, тот и выигрывает. Поэтому «статья про харнесы», а не «статья про модели»: через год модели будут другие, а проблемы цикла, контекста и доверия инструментам останутся.