Долгоживущая агентная задача упирается в один и тот же вопрос: что агент помнит, когда возвращается к работе через день. Ответов обычно два, и оба плохи.
Первый — складывать в контекст всю переписку. Работает неделю, потом упирается в размер окна и стоимость: каждый следующий шаг тащит за собой всю историю.
Второй — хранить только последнюю сводку. Дёшево, но сводка — это результат сжатия с потерями. Через десять итераций в ней остаётся пересказ пересказа, и восстановить исходный факт уже нельзя.
Мы используем третий вариант: разделяем то, что неизменно, и то, что переписывается.
Журнал — единственная неизменная истина
У каждой задачи есть журнал: упорядоченная последовательность записей. Входящее сообщение, план, промпт, ответ, результат, вопрос, смена статуса, системное событие. Записи только добавляются.
Журнал не редактируется и не сжимается. Это протокол того, что фактически произошло.
Всё остальное — живые проекции
Поверх журнала живут три проекции, и все они переписываемые:
- сводка — проза для человека и планировщика: где мы находимся;
- краткая строка — одна строка для списков и индексов;
- чек-лист — структурированный план работ.
Ключевое свойство: любую из них можно выбросить и восстановить, перечитав журнал. Они существуют для скорости и удобства, а не как источник истины.
Переписывает их планировщик, тем же вердиктом, которым он принимает решение о следующем шаге. Не отдельной операцией «обнови сводку», которую легко забыть, а частью решения.
Проверка на правильность модели: если удалить все сводки и планы, система должна восстановиться из журнала. Если нет — что-то важное хранится только в проекции, и вы уже потеряли это, просто ещё не знаете.
Журнал — память планировщика, не агентов
Это разделение оказалось важнее, чем ожидалось.
Журнал читает планировщик. Он видит всю историю задачи и на её основании решает, что делать дальше. Воркер — агент, который выполняет конкретный шаг, — журнала не видит вообще.
Воркер получает только промпт, составленный планировщиком. Это означает жёсткое требование к промпту: он должен быть самодостаточным. Нельзя написать «продолжай, как договаривались» — воркер не знает, о чём договаривались.
Требование кажется неудобным, но оно даёт три вещи. Промпт видно целиком в журнале — он сохранён. Его можно оценить: если человек не понял бы задачу из этого текста, воркер тоже не поймёт. И его можно переиграть на другом агенте, потому что он не опирается на скрытое состояние.
Линии сессий
При этом воркер не начинает с нуля каждый раз. У него есть персистентная сессия — линия рассуждений, к которой можно вернуться.
Разница в том, что находится внутри:
- журнал — история задачи, память планировщика;
- сессия-линия — рабочий контекст конкретного исполнителя.
Когда планировщик продолжает существующую линию, он передаёт только новое. Когда открывает новую — промпт должен быть полным.
Линий у одной задачи может быть несколько: разные агенты, разные направления работы. Две линии одного и того же агента — нормальная ситуация, если они ведут разные части задачи. Реестр линий хранит, какая к чему относится, и защищает от попытки продолжить чужую линию.
Что даёт такое разделение
Стоимость перестаёт расти со временем. Планировщик работает со сводкой и нужным срезом журнала, а не со всей перепиской. Задача, идущая третью неделю, стоит примерно столько же за шаг, сколько стоила в первый день.
Потери восстановимы. Сбой при обновлении сводки — не потеря данных, а расхождение проекции, которое чинится перечитыванием.
Историю можно предъявить. На вопрос «почему задача решена именно так» отвечает журнал: входящие, решения с обоснованиями, промпты, ответы, переходы статусов. Не реконструкция по логам, а протокол.
Планировщик остаётся stateless. Вся его память — журнал и проекции в базе. Его можно перезапустить, обновить, поменять модель — состояние не в нём.
Чего это стоит
Честно о цене. Журнал растёт, и его надо хранить — это дисковое пространство и продуманные индексы. Проекции надо переписывать, и планировщик обязан делать это на каждом шаге, иначе они разъезжаются с реальностью. Требование самодостаточности промптов делает их длиннее и заметно повышает планку к качеству планировщика.
Всё это — предсказуемая инженерная работа. В обмен вы получаете систему, у которой на вопрос «что здесь произошло» есть ответ, а не предположение.