Agent State Management в 2026: checkpoints, resumability и короткая память без хаоса
Agent state management в 2026: conversation state, checkpoints, step IDs, TTL, resumability и почему история диалога не равна состоянию агента.
Agent state management в 2026 уже нельзя сводить к "храним историю сообщений". У production-агента есть несколько разных типов состояния: dialog history, workflow state, tool artifacts, memory summaries, human decisions и commit markers. Если всё это сложить в одну длинную переписку, система быстро становится дорогой, хрупкой и трудно отлаживаемой.
Главная идея простая: история разговора - это только один слой. Надёжный агент должен уметь:
продолжать работу после pause/resume;
не терять прогресс после retry;
не повторять side effects;
ограничивать рост контекста;
хранить audit trail отдельно от prompt payload.
Состояние агента похоже на состояние заказа в e-commerce. Одного списка сообщений мало. Нужны ещё статус, шаги выполнения, подтверждения, связанные объекты и понимание, что уже было зафиксировано во внешних системах.
Плохой anti-pattern - считать, что весь state можно безопасно держать внутри prompt history. Это быстро бьёт по latency, стоимости, private data exposure и reproducibility.
отдельное хранение sensitive artifacts вне prompt.
Без техники
Весь прогресс агента хранится только в длинной переписке. После сбоя система повторяет поиск, забывает approval и иногда заново делает внешние действия.
С техникой
Диалог, checkpoints, tool outputs и commit markers разделены. Агент может resume-иться с нужного шага и не повторять уже зафиксированные side effects.
ПромптState intuition
Почему `conversation history` и `workflow state` не стоит хранить как одно и то же?
Ответ модели
Потому что разговор описывает, что обсуждали, а workflow state - где агент находится и какие действия уже подтверждены. Для retries, approvals и resumes это принципиально разные вещи.
Условный чат-бот может жить только на history. Но агентный workflow обычно требует больше:
pending approval;
список уже вызванных tools;
собранные документы;
результаты промежуточных проверок;
флаг, что side effect уже committed;
дедлайны, TTL и ownership.
Если всё это хранить внутри свободного текста диалога, приложение начинает зависеть от того, как модель интерпретирует прошлые сообщения, а не от надёжной state machine.
Сжатые и полезные facts, которые стоит перенести между run-ами:
user preferences;
долгоживущие constraints;
known account facts;
stable project context.
Чем больше state влияет на side effects и контроль потока, тем меньше он должен зависеть от самой модели. Такой state лучше держать в коде и storage, а не в тексте prompt-а.
def run_step(state):
if state["status"] == "paused_for_approval":
return state
output = execute_current_step(state)
state["last_result"] = output
if output.requires_human_review:
state["status"] = "paused_for_approval"
save_checkpoint(state)
return state
state["step_id"] = next_step_id(state["step_id"])
save_checkpoint(state)
return state
Практический совет: state должен отвечать на вопрос "что уже точно произошло?" без участия модели. Если для этого нужно перечитывать длинную переписку, ваш control state слишком слаб.
Проверьте себя
1. Почему историю диалога нельзя считать полным состоянием агента?
2. Что лучше всего помогает безопасному pause/resume?
3. Какой сигнал особенно показывает, что state management слабый?