AI-агенты не забывают.
Они просто просыпаются не там, где уснули.
Я знаю, звучит странно: какие ещё “уснули”?
Но в агентной автоматизации это вполне реальная история. Агент может начать задачу, дойти до шага, где нужно чего-то дождаться, поставить таску на отслеживание, уйти в ожидание, а потом продолжить уже из другой точки контекста.
У меня это всплыло на обычной Jira-таске.
Есть обычная таска. Агент берёт её в работу, читает контекст, начинает реализацию и в процессе понимает: без миграции не выехать.
Поменялась структура данных. Нужно добавить поле, переложить старые значения или обновить формат хранения.
В голове процесс выглядит нормально: разобрать задачу, обновить код, добавить миграцию, прогнать её на тестовом окружении, проверить данные, закрыть задачу.
Красиво. Линейно. Как будто так и должно работать.
А потом всё разваливается.
Агент делает реализацию, создаёт миграцию, доходит до шага "надо дождаться применения миграции", ставит таску на отслеживание, уходит в ожидание, потом просыпается и такой: ну вроде основная задача сделана, можно завершать.
А проверка данных после миграции? А требования из Jira? А убедиться, что ничего не поехало?
Вот тут становится больно.
Проблема не в том, что агент тупой. И не в том, что промпт был написан криво.
Проблема в ментальной модели.
Мы часто думаем об агентной автоматизации как о рабочем процессе: сначала разобрал задачу, потом сделал код, потом проверил требования, потом закрыл. Но если внутри есть ожидание, резюм и смена контекста, это уже не обычная последовательность шагов.
После ожидания агент не возвращается "к следующему пункту задачи". У него нет живого коллстека. Он заново читает контекст, смотрит стейт и пытается понять, что теперь считается правильным продолжением.
И если важный следующий шаг живёт только в тексте инструкции, он может просто выпасть.
Фраза "после миграции проверь требования из Jira" звучит как правило. Но для агента после резюма это часто просто ещё одна строка в большом контексте.
А для такой задачи нужен не совет в промпте, а чёткий и линейный флоу.
Поэтому обязательный шаг не должен жить только в промпте. Он должен жить в стейте процесса.
Например:
{ “pendingActions”: [ “waitMigration”, “verifyData”, “checkRequirements”, “completionGate” ] }
То есть не "не забудь проверить".
А “пока требования после миграции не закрыты, задачу нельзя считать завершённой”.
В итоге следующий шаг стал не текстовой просьбой, а частью ран-стейта.
Если агент уходит ждать миграцию, в стейте остаётся обязательное продолжение: дождаться миграции, проверить данные, пройтись по требованиям, пройти финальный валидационный гейт.
Пока там есть невыполненный экшен, процесс не может считаться завершённым. Пока проверка не вернула результат, нельзя сказать "готово". Пока требования не покрыты, завершение не проходит.
Это не полноценный воркфлоу-движок. И как раз в этом смысл.
Иногда не нужно строить большую систему оркестрации. Достаточно добавить структуру в самое ломкое место.
Особенно там, где агент может проснуться после ожидания и слишком уверенно решить, что Jira-таска уже закрыта по смыслу.
Главный вывод простой: хорошие инструкции для агентов важны, но в критических местах инструкций мало.
Нужны стейт, обязательные переходы и валидационный гейт перед завершением.
Чтобы "готово" было не ощущением агента, а результатом проверяемого состояния.