Почему агент зацикливается и жжёт бюджет
🤔 Зачем это читать
Пятница, вечер. Ты запустил агента на ночь разобрать почту и подбить мелкий отчёт — задача на пару минут. В понедельник открываешь счёт за облако: не пара рублей, а внезапные несколько тысяч. Лезешь в журнал — и видишь одно и то же действие, повторённое сотни раз подряд. Агент не сломался и не выдал ошибку. Он всю ночь честно крутился по кругу: проверял, не нравилось, проверял снова, не нравилось снова — и так до утра, пока кто-то не выключил. Платил за каждый круг — ты.
Знакомо? Если ещё нет — это лишь потому, что ты пока не запускал агента без присмотра. Зацикливание — не экзотика и не «кривой подрядчик». Это типовая авария агента (по-научному — failure mode, типичный режим отказа), в которую он сваливается сам по себе, если ему забыли поставить предохранитель. И ловушка коварная: чат-бот, который ничего не делает сам, так зависнуть не может в принципе. А агент — может, именно потому что он сам решает, делать ли ещё один шаг. Эту свободу мы как раз разбирали в прошлой теме про цикл «Думаю — Делаю — Пробую». Сегодня — её обратная сторона.
После этой темы ты сможешь посмотреть на кейс зависшего агента и разобрать его на части: где он застрял, почему не вышел сам, в каком месте надо было поставить предохранитель и как вообще заметить, что агент крутится впустую, а не работает. Это не «теория про петли» — это про твои деньги и твоё время, которые агент способен сжечь молча, с серьёзным лицом, за одну ночь.
Задержись на 10 секунд. Вспомни, как ты сам застреваешь на задаче: переписываешь одно письмо в десятый раз, гоняешь цифры в таблице туда-сюда, а лучше не становится. В какой момент ты говоришь себе «всё, хватит, отдаю как есть» или «спрошу кого-нибудь»? Держи этот стоп-сигнал в голове. Вся тема — про то, что у агента такого сигнала по умолчанию нет, и его надо поставить руками.
🍲 Повар, который пробует блюдо бесконечно
В прошлой теме мы разобрали агентный цикл (по-научному — ReAct, цикл «рассуждение — действие — наблюдение»): агент думает, делает шаг, смотрит на результат и решает, нужен ли ещё круг. Этот круг по-научному называют итерацией — одним проходом по цепочке «подумал — сделал — посмотрел». Цикл — сильная штука: именно он позволяет агенту самому доводить дело до готовности, не дёргая тебя. Но у него есть встроенная ловушка. Вернёмся на кухню, там это видно как на ладони.
Представь повара, который готовит соус. Он пробует ложкой — кисловато. Добавляет сахар, мешает, пробует снова — теперь приторно. Добавляет лимон, мешает, пробует — опять кисло. Добавляет сахар... И вот он стоит над кастрюлей двадцать минут, гоняет вкус туда-сюда и не может решиться подать. Идеала всё нет. А пока он пробует — горячее блюдо на тарелке стынет, продукты в кастрюле кончаются (каждая проба — ложка соуса), и вся смена ждёт именно его. Он не бездельничает. Он усердно работает. Просто его работа никуда не ведёт.
Чего не хватает этому повару? Условия выхода. Правила, которое говорит: «после третьей пробы — подаёшь как есть или зовёшь шефа». Без такого правила усердный повар превращается в стихийное бедствие для кухни. Опытный шеф это правило держит в голове сам. Агент — не держит. Если ему не задали условие выхода, он будет пробовать соус, пока кто-то не выдернет вилку из розетки.
💸 Каждый круг — это деньги и время
На кухне петля стоит остывшего блюда и нервов бригады. У агента — стоит буквально денег, и вот почему. Помнишь главное правило с прошлых тем: каждый круг цикла — это отдельное обращение к модели, а за каждое обращение ты платишь. Один круг — копейки. Но агент в петле делает не один круг и не десять. Он делает их столько, сколько успеет, пока его не остановят, — сотни, тысячи. И тут копейки складываются в тот самый счёт, от которого в понедельник холодеет.
Сложи две вещи — и поймёшь, почему это так больно бьёт именно по бюджету. Первое: петля незаметна. Агент не падает с ошибкой, не пишет «я застрял», не шлёт тревожное письмо. Снаружи он выглядит занятым и деловитым — как тот повар над кастрюлей. Второе: петля быстрая. Машина крутит круги не раз в минуту, как человек, а по много раз в секунду. Соедини «незаметно» и «быстро» — получишь счётчик, который молча мотает деньги, пока ты спишь или занят другим. Это не редкая беда: отсутствие лимита шагов — одна из классических, многократно описанных причин, по которым агент уходит в разнос.
Отдельно подчеркну, звучит странно, но: зацикливание не означает, что модель плохая или «глупая». Самая умная модель в мире зациклится точно так же, если ей не задали, когда останавливаться. Это не дефект ума — это отсутствие тормоза. А тормоз ставит не модель, а тот, кто собирает агента. То есть это вопрос конструкции, а не интеллекта, — и это хорошая новость, потому что чинится он просто.
🔌 Предохранитель: лимит шагов
Тормоз, который не даёт агенту крутиться вечно, называется просто — лимит шагов (по-научному max iterations, «максимум итераций», то есть максимум кругов). Идея в одну фразу: заранее задаём правило «больше чем N кругов не делаем — и точка». Сделал N кругов, а задача всё не готова — стоп. Не «продолжай, вдруг получится», а честный стоп: отдай что есть и позови человека или сообщи, что не справился.
Ровно то правило, которого не хватало нашему повару: «после третьей пробы — подаёшь или зовёшь шефа». Это и есть предохранитель — как пробка в электрощитке. Пробка не делает проводку умнее. Она просто не даёт сгореть всему дому, когда что-то пошло не так. Лимит шагов — такая же пробка для бюджета: он не делает агента сообразительнее, он просто гарантирует, что один зависший запуск не разорит тебя на тысячи рублей за ночь.
Посмотрим, как это выглядит «на пальцах». Это не настоящий код — это логика на человеческом языке, псевдокод.
лимит_кругов = 5 # вот он, предохранитель: больше 5 кругов не делаем
сделано_кругов = 0
повторяй цикл:
агент думает → делает шаг → смотрит на результат
сделано_кругов = сделано_кругов + 1
# условие выхода №1 — нормальное: задача готова
если задача готова: отдать результат и ВЫЙТИ
# условие выхода №2 — предохранитель: кругов слишком много
если сделано_кругов >= лимит_кругов:
остановиться, отдать что есть и ПОЗВАТЬ ЧЕЛОВЕКА
# → без второго условия цикл крутится, пока кто-то не выключит вручную
Вся суть — в этих двух «если». Первое — нормальный выход: дело сделано, агент доволен, отдаёт результат. Второе — аварийный выход, тот самый предохранитель: дело не сделано, но кругов уже слишком много, значит, агент явно застрял — стоп и зови человека. Уберёшь второе «если» — получишь нашего повара над кастрюлей. Оставишь — получишь повара, который знает, когда хватит пробовать.
И запомни рамку как владелец: лимит шагов — это не «костыль», а обязательный элемент конструкции любого агента, который что-то делает в цикле. Спрашивать про него у подрядчика так же нормально, как спрашивать у электрика про автоматы в щитке. Нет ответа на вопрос «а что будет, если агент застрянет?» — это красный флаг, такого же размера, как машина без тормозов.
🔎 Как понять, что агент застрял, а не работает
Предохранитель спасает от катастрофы — но в идеале ты хочешь замечать петлю раньше, чем сгорит лимит. Беда в том, что застрявший агент и работающий агент снаружи выглядят одинаково: оба «заняты». Различить их можно по двум приметам, и обе — про наблюдение, а не про код.
- Повтор. Агент делает почти одно и то же действие снова и снова: проверяет тот же файл, задаёт тот же вопрос, гоняет ту же цифру. Это повар, который пробует соус десятый раз. Прогресса в его действиях нет — есть топтание на месте.
- Счёт, который не должен так расти. Самая честная и самая денежная примета. Если простая задача внезапно стоит как сложная — это не «модель постаралась», это петля. Поэтому за расходом агента надо следить, особенно у тех, кто работает без присмотра. Ровно как ты следишь за расходом продуктов на кухне — если на одно блюдо ушло пять кастрюль соуса, что-то явно не так.
Заметь связку, она важна. Предохранитель (лимит шагов) — это стена, в которую агент упрётся в худшем случае. Наблюдение за повтором и счётом — это сигнализация, которая зовёт тебя раньше, чем он до стены доедет. Хорошая конструкция держит и то, и другое: стену — чтобы не разориться, сигнализацию — чтобы поймать проблему, пока она маленькая. А что именно делать, когда агент уткнулся в стену (отдать частичный результат? откатить? попробовать иначе?), — это уже отдельный большой разговор про восстановление после сбоев, к нему мы ещё придём.
🎮 Разбор кейса: агент завис ночью
Прежде чем читать кейс — мысленно достань из головы два слова: предохранитель и сигнализация. Сейчас проверим, держатся ли они на реальной аварии.
Реальная по духу ситуация, четыре вопроса по ней — один за другим. Это не угадайка, а разбор: на каждом шаге сначала подумай сам, потом жми кнопку и сверяйся. К концу ты пройдёшь весь путь владельца — от «что вообще случилось» до «как это не повторить». Поехали.
Кейс. Агенту поручили на ночь: «сформируй отчёт по продажам за неделю и положи в общую папку». Утром — счёт за облако в несколько раз выше обычного. В журнале видно: агент 400 с лишним раз подряд проверял, появился ли файл-источник в папке, не находил его (файл выгружается только к 9 утра) — и проверял снова. Отчёт так и не собрался.
📖 Ключевые понятия
- Зацикливание (бесконечный цикл)
- Авария, при которой агент крутит круги цикла без остановки: повторяет похожие шаги, не доводит задачу до конца и молча жжёт деньги/время. Случается, когда у цикла нет условия выхода. Это повар, который пробует соус бесконечно и не решается подать.
- Типовая авария (failure mode)
- Типичный, заранее известный способ, которым система ломается. Зацикливание — одна из самых частых аварий агента. Знать список типовых аварий ценно: тогда соломку стелют заранее, а не разбираются по факту, когда уже сгорел бюджет.
- Условие выхода
- Правило, которое говорит агенту, когда прекратить крутить цикл. Бывает двух видов: нормальное («задача готова — отдай результат») и аварийное («кругов слишком много — стоп, зови человека»). Без второго вида агент в трудной ситуации зависает.
- Лимит шагов (max iterations)
- Предохранитель: заранее заданный максимум кругов цикла. Дошёл до лимита, а задача не готова — агент останавливается и зовёт человека, а не крутится вечно. Пробка в щитке для твоего бюджета: не делает агента умнее, но не даёт одному запуску разорить.
- Итерация
- Один круг цикла агента: проход по цепочке «подумал — сделал — посмотрел». Каждая итерация — отдельное платное обращение к модели. Поэтому лишние круги в петле — это прямые деньги, а не абстракция.
🛡️ Частые заблуждения
«Если агент зациклился — значит, модель слабая, надо взять помощнее»
Это первый инстинкт почти у всех — раз зависает, значит, недодали мозгов, надо апгрейднуть. И подрядчик такой апгрейд охотно продаст: дороже модель, дороже чек. Но дело не в модели: ставишь самую мощную — и она уйдёт в ту же петлю, потому что ей всё так же не сказали, когда остановиться. Лишние деньги на апгрейд, проблема на месте. Дешёвая починка — лимит шагов — не в прайсе у того, кто продаёт модели помощнее.
«Зависший агент выдаст ошибку или хотя бы остановится сам»
Чаще всего нет. Петля — это не сбой, а честная работа по кругу: агент не падает, не пишет «я застрял», снаружи выглядит занятым. Сам он не остановится, потому что не понимает, что топчется на месте, — у него нет встроенного ощущения «хватит». Остановит его только то, что ты поставил заранее: лимит шагов и присмотр за счётом.
«Один зависший запуск — мелочь, ну потратил чуть лишнего»
Опасная недооценка. Петля быстрая (много кругов в секунду) и незаметная (агент кажется занятым). За ночь без присмотра «чуть лишнего» легко превращается в счёт в разы выше плана — особенно у агента, который работает сам, пока ты спишь. Поэтому за расходом автономного агента следят так же, как за расходом продуктов на кухне.
🧠 AI-чутьё (AI Judgment)
Свобода агента — это и сила, и риск; страхуй её предохранителем и надзором за счётом
Вот рамка, которую стоит унести: ровно та свобода, за которую мы любим агента, его же и подставляет. Чат-бот не зависнет в петле — потому что он ничего не решает сам. Агент зависает именно потому, что сам выбирает, делать ли ещё шаг. Это не повод бояться агентов — это повод помнить, что любую автономию надо страховать. Дал свободу решать — поставь границы, в которых эта свобода живёт.
Отсюда два вопроса, которые ты как владелец задаёшь по любому AI-агенту, который что-то делает в цикле. Первый: «А что будет, если он застрянет, — есть лимит шагов?». Второй: «Как я увижу, что он жжёт лишнее, — кто следит за счётом?». Нет внятного ответа хотя бы на один — значит, тебе предлагают машину без тормозов и без приборной панели. Красиво едет на демо, а на твоих деньгах и твоей ночной смене может встать колом.
И держи практический след. Лимит шагов останавливает разнос — но это только первый из тормозов. Что делать дальше, когда агент уткнулся в стену: отдать частичный результат, откатить сделанное, попробовать другой путь или эскалировать человеку — это отдельная инженерная тема про обработку сбоев и восстановление. Зацикливание — её самый наглядный вход: ты уже видишь, зачем агенту нужны не только «руки и мозг», но и аварийные сценарии. Без них автономность — это риск, а не актив.
🎯 Практика
Одно задание на пять минут — оно превращает «петля и предохранитель» из книжной идеи в твой рабочий вопрос к любому AI-проекту.
- Возьми любую задачу, которую ты хотел бы отдать агенту работать без присмотра (на ночь, по расписанию, в фоне). Запиши её в одну строку.
- Представь худший сценарий: что-то пошло не так — нужный файл не пришёл, система не ответила, цифры не сходятся. Ответь на два вопроса честно: (а) сколько кругов агенту разумно сделать, прежде чем сдаться и позвать человека? (это твой лимит шагов) и (б) кто и как увидит, что счёт растёт не по задаче? (это твой надзор).
- Эти два ответа — лимит и надзор — выпиши отдельной строкой. Это готовый пункт твоего технического задания подрядчику и первый вопрос, который ты ему зададёшь: «покажи, где здесь предохранитель и где приборная панель». Если внятного ответа нет — ты уже знаешь, что это красный флаг.
Готовая строчка в карман — скопируй в ТЗ
«Агент работает в цикле без присмотра. Нужен лимит шагов: после N кругов — стоп и эскалация человеку, не крутимся вечно. И надзор за расходом: дашборд плюс алерт, если запуск стоит дороже обычного. Покажите, где в решении предохранитель и где приборная панель».
Помнишь свой стоп-сигнал из начала страницы — момент, когда ты сам говоришь «хватит, отдаю как есть»? Лимит шагов — это ровно такой сигнал, только заданный агенту руками. У человека он встроен жизненным опытом. У агента — нет. Поставить его — твоя работа как владельца.