5 слоёв ИИ-агента: от промпта до продакшена

5 слоёв ИИ-агента: от промпта до продакшена

Вокруг ИИ-агентов сейчас крутятся пять модных терминов: context engineering, loop engineering, Jev engineering, harness engineering и eval engineering. Их часто обсуждают как конкурирующие подходы, хотя каждый из них отвечает за свой слой одной и той же системы. Автор с ником Yarchi разобрал эту систему в большой статье в X на примере нового сотрудника, и аналогия получилась очень наглядной.

Контекст определяет, какие бумаги лежат у сотрудника на столе, когда вы задаёте ему вопрос. Цикл решает, идёт он по вашему чек-листу или сам выбирает следующий шаг. Jev работает как ресепшен, который сортирует почту, чтобы до сотрудника доходило только важное. Harness описывает его офис: инструменты, ключи и того, кто проверяет работу. Эвалы похожи на один и тот же экзамен каждый месяц, по которому видно, стал ли он лучше. Модель в этой схеме играет роль человека, а пять слоёв составляют всё, что его окружает. Если собрать их правильно, небольшая команда отдаёт агенту повторяющуюся работу и оставляет людям решения.

1. Контекст: что лежит на столе

Контекстное окно похоже на рабочий стол. Положите туда три нужные страницы, и ответ придёт за секунды. Положите триста, и нужный факт утонет в середине стопки. В окно попадает всё сразу: инструкции, история диалога, документы из базы, вывод каждого вызванного инструмента.

Объём контекста легко перестаёт помогать и начинает мешать. В исследовании Стэнфорда модель, которой давали от 20 до 30 документов, отвечала по документам из середины с точностью около 50-57%, а без документов вовсе набирала 56%. Ответ лежал в окне, и модель справилась хуже, чем с пустым столом. Причин две: модели сильнее всего смотрят на начало и конец окна, а каждый токен стоит денег и времени независимо от пользы.

Самая полезная механика здесь prompt caching. Провайдер запоминает начало промпта и переиспользует его в следующем вызове, причём кэшированный токен стоит примерно в десять раз дешевле свежего. Работает это только при побайтовом совпадении начала: поменяли один символ наверху, и всё дальнейшее оплачивается по полной цене. Поэтому стабильные части всегда идут первыми, изменчивые в конце.

На практике контекст раскладывается по четырём местам. В системный промпт попадает только то, что верно на каждом вызове: роль, ограничения, формат вывода, без таймстемпов наверху и случайного порядка ключей в JSON. Набор инструментов посреди диалога лучше не трогать, иначе ломается кэш и модель начинает звать то, чего уже нет. Если инструмент надо запретить на конкретном шаге, блокируйте вызов и оставляйте описание. Всё крупное и долгоживущее уходит на диск, а в окне остаётся путь к файлу или URL страницы. Раз в несколько шагов текущую цель стоит повторять ближе к концу контекста, потому что середину починить нельзя.

Инструменты тоже съедают окно. Anthropic насчитала около 55 000 токенов на 58 описаний инструментов ещё до первого сообщения пользователя, а поиск инструментов вместо загрузки всех сразу поднял Opus 4 с 49 до 74% на их бенчмарке. Пока инструментов меньше двадцати, держите их загруженными, дальше переходите на поиск. Для больших задач помогает субагент: он читает 50 файлов в собственном окне и возвращает выжимку на одну страницу, так что основной контекст видит только её.

2. Цикл: кто решает, что делать дальше

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

Цикл нужен тогда, когда шаги невозможно расписать заранее. Workflow дешевле, параллелится, и при падении четвёртого шага вы перезапускаете только его. Агент в среднем тратит примерно в четыре раза больше токенов, чем одиночный вызов, а мультиагентные схемы около пятнадцати раз.

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

Лучшая из опубликованных продакшен-схем у Atlan гибридная. Детерминированный фильтр отсекает поток, и до агента доходит около 14% алертов. Агенту дают максимум три итерации, и если уверенность после них ниже 50%, задачу забирает обычный workflow на Python. Сначала фильтр, потом короткий цикл, потом запасной путь.

3. Jev: ресепшен, который только выбирает

Эксперт в офисе не вскрывает каждый конверт. Агент делает две разные вещи: пишет текст и принимает решения. Когда обе задачи висят на одной большой модели, вы платите юристу за сортировку почты. Jev ставят на место ресепшена: он ничего не пишет и только выбирает.

Ему передают вопрос и заранее заданные варианты, а он возвращает «да» или «нет», один вариант из набора или число на шкале вместе с оценкой уверенности. Заявленные цифры выглядят эффектно: от 70 до 500 мс против 3-329 секунд у больших моделей и $0,042 за миллион входных токенов при бесплатном выводе.

Автор при этом честно оговаривается, что Jev всего две недели и независимых тестов пока мало. На классификации писем обычная логистическая регрессия набрала 98,9% против 98,6% у Jev. На распознавании фишинга Jev показал 62,6%, а Claude Haiku 4.5 набрал 81,3%. Обещание «ноль галлюцинаций» означает лишь то, что вывод всегда соответствует схеме. Оценку уверенности лучше воспринимать как ранжирование и подбирать пороги на собственных размеченных данных.

Разумная схема выглядит как шлюз перед дорогой моделью. Если Jev уверен хотя бы на 0,7 и случай рутинный, элемент обрабатывается дёшево, а всё сомнительное уходит основной модели.

Начинать стоит с самого простого варианта. Разметьте несколько сотен реальных примеров, обучите базовый классификатор и усложняйте систему, только если его не хватает. Это примерно полчаса работы и планка, которую обязан перепрыгнуть любой вендор со своими обещаниями.

4. Harness: офис, инструменты и ключи

Посадите одного и того же сотрудника в два офиса. В первом у него правильные инструменты, инструкция на стене, коллега на проверке и нет ключа от сейфа. Во втором у него ноутбук и ваш админский пароль. Навыки одинаковые, результаты совсем разные. Формула получается короткой: агент равен модели плюс harness.

В 2026 году harness выделился в отдельную дисциплину, потому что замеры показали неожиданно скромный вклад самой модели. Anthropic поменяла только ресурсы контейнера и сдвинула результат бенчмарка на 6 пунктов. LangChain заморозила модель и подняла тот же бенчмарк на 13,7 пункта одной настройкой обвязки, а потом довела открытую модель, которая в десять раз дешевле, до 0,86 против 0,87 у Opus 4.8. Обвязка нужна с того момента, как агент получает доступ к чему-то реальному: репозиторию, почте, платежам или боевой базе.

Строить её удобно снаружи внутрь. Сначала изоляция: контейнер, отдельная ветка, пользователь базы только на чтение, сеть по allowlist, и всё это до первого промпта. Затем направляющие: файл AGENTS.md в репозитории, понятные описания инструментов, пара примеров хорошего результата. Потом сенсоры: линтер, тайпчекер и тесты гоняются на всём, а медленные проверки вроде ревью диффа второй моделью только там, где это важно. Последними идут права. Люди одобряют 93% запросов агента на подтверждение, поэтому защищают систему в первую очередь действия, которые агенту просто недоступны. Ручное подтверждение стоит оставить для действительно необратимых операций.

Файл с правилами может быть совсем коротким. Четырёх строк про структуру репозитория, запуск тестов, миграции и доступ к базе уже хватает, чтобы поведение агента заметно изменилось.

Хуки делают то же самое принудительно. В Claude Code хук запускается перед вызовом инструмента и может его заблокировать, так что правило «никогда не пушить в main» надёжнее оформить хуком, чем строкой в промпте. Каждый элемент обвязки представляет собой ставку на то, что модель чего-то не умеет, и такие ставки со временем сгорают. Anthropic однажды удалила целый компонент после обновления модели, поэтому раз в несколько месяцев пересматривайте harness и выкидывайте то, из чего модель уже выросла.

5. Эвалы: один и тот же экзамен

Понять, что новичок стал лучше, можно только одним способом: дать ему тот же тест, что и месяц назад. Эвалы для агента представляют собой набор задач с известными правильными ответами, который прогоняется после каждого изменения. Без него любая правка остаётся догадкой.

Проверки бывают двух видов. End-to-end смотрят, правильным ли получился финальный ответ, и показывают, что счёт сдвинулся, хотя причину не объясняют. Поведенческие проверяют конкретное действие по трейсу: вызвал ли агент поиск перед ответом, уточнил ли расплывчатый запрос, перепроверил ли результат, прежде чем отчитаться. По правилу Google такой набор должен проходить меньше чем за пять секунд, чтобы его можно было запускать на каждом изменении.

Если оценки ставит модель, её тоже надо проверять. В Airbnb выяснили, что около трёх четвертей эталонных ответов, сгенерированных моделью, менялись при повторных прогонах одного и того же входа, так что эвал измерял собственный шум.

Собирать набор лучше из реальных провалов, превращая каждый сбой в тест-кейс. Золотые наборы Airbnb содержат от 50 до 100 примеров, и провальные случаи там обязательны. На один кейс приходится одна поведенческая проверка. Судью сверяйте с ручной разметкой на выборке, прежде чем ему доверять. Airbnb ежедневно добавляет в оценку 5% живого трафика, потому что набор устаревает вместе с изменением реального использования.

Общий процент прохождения может расти, пока одно конкретное поведение тихо ломается, поэтому следить нужно за отдельными проверками.

С чего начать сегодня

Для каждого слоя есть дешёвый первый шаг. Стабильные инструкции переезжают в системный промпт и перестают меняться. На цикл ставится лимит по ходам и по деньгам до того, как агента оставят работать без присмотра. Для Jev размечаются 200 примеров того решения, которое агент принимает чаще всего. Агент запускается под пользователем, который ничего не может удалить. Последние пять провалов записываются как тест-кейсы. Всё это укладывается в один рабочий день.

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

Полная версия разбора с примерами кода опубликована на uproger.com. Больше материалов про ИИ, машинное обучение и разработку ищите на UPROGER.

11