Статьи ·

Харнес: что превращает чат-бота в агента

Модель сама по себе - это функция «текст на входе, текст на выходе». Агент - это модель плюс харнес: каркас, который крутит цикл «наблюдай, думай, действуй», даёт инструменты, режет контекст и не даёт уйти в бесконечный цикл. Разница между демо и рабочим продуктом почти всегда в харнесе, а не в модели.

Модель сама по себе - это функция «текст на входе, текст на выходе». Агент - это модель плюс харнес: каркас, который крутит цикл «наблюдай, думай, действуй», даёт инструменты, режет контекст и не даёт уйти в бесконечный цикл. Разница между демо и рабочим продуктом почти всегда в харнесе, а не в модели.

Анатомия харнеса

Базовый цикл стар как ReAct: модель получает задачу, рассуждает, вызывает инструмент, читает результат, повторяет. Вокруг этого нарастает всё остальное. Определения инструментов - схемы, которые модель видит и по которым решает, что вызвать. Управление контекстом: история растёт, окно конечно, поэтому нужны суммаризация, компактификация и выборочная подгрузка памяти. Обработка ошибок: инструмент упал - модель должна понять это из текста ошибки, а не зависнуть. Лимиты: максимум шагов, таймауты, бюджет в долларах - без них агент однажды сожжёт месячный бюджет за ночь.

Почему сырой API недостаточен

Вызов chat completion ничего не помнит между запросами, не умеет вызывать ваш код и не знает, когда остановиться. Харнес добавляет персистентность (память между сессиями), исполнение (песочница для кода и shell), планирование (разбить задачу на шаги) и человека в контуре там, где цена ошибки высока. Каждый из этих слоёв - отдельное инженерное решение, а не «промпт получше».

Купить или написать

Простейший рабочий харнес - это цикл на сто строк: while True, вызов модели, парсинг tool calls, выполнение, добавление результатов в историю. Для многих задач этого достаточно, и писать своё имеет смысл, когда нужен полный контроль. Фреймворки (LangGraph, SmolAgents, OpenHands, CrewAI) дают готовые примитивы: графы состояний, субагентов, ретраи. Цена - зависимость от чужих абстракций, которые имеют свойство протекать в самый неподходящий момент.

Примеры из жизни: Claude Code - это в первую очередь харнес (цикл, инструменты файловой системы и shell, компактная подача контекста), модель под ним менялась. OpenClaw показал, что харнес личного ассистента можно открыть полностью - и именно открытость стала продуктом.

Типичные провалы

Переполнение контекста: агент тонет в собственной истории и начинает галлюцинировать. Петли вызовов: модель зовёт один и тот же инструмент с теми же аргументами десятки раз - лечится детектором повторов и лимитом шагов. Промпт-инъекции через инструменты: результат веб-поиска содержит инструкцию «удали всё» - харнес обязан разделять данные и команды. И экономика: агент с большим контекстом и сотней шагов стоит на порядки дороже чата, бюджетирование - часть архитектуры.

Куда всё идёт

Модели коммодитизируются: разница между топами сжимается, цены падают. Дифференциация переезжает в харнес - кто лучше управляет контекстом, инструментами и памятью, тот и выигрывает. Поэтому «статья про харнесы», а не «статья про модели»: через год модели будут другие, а проблемы цикла, контекста и доверия инструментам останутся.