LangGraph Time Travel

Time-travel — отладка через историю чекпоинтов: возможность вернуться в любую сохранённую точку исполнения и либо воспроизвести её (Replay), либо изменить состояние и запустить новую ветку (Fork). Существует только благодаря LangGraph Checkpointers.

Суть

Каждый шаг графа сохраняется как чекпоинт. Имея историю, можно откатиться к нужному снимку и: повторить тот же ход (Replay) или подменить состояние и пойти по альтернативному пути (Fork). Это превращает недетерминированного агента в воспроизводимый процесс.

Зачем это нужно

Из-за недетерминизма LLM классическая отладка почти невозможна: один и тот же вход даёт разные ответы, баг не воспроизвести как в обычном backend. Time-travel решает это: фиксируем состояние до ошибки и проигрываем его сколько угодно раз, проверяя гипотезы.

Как работает

  • Replay — воспроизведение state с прошлого чекпоинта (тот же thread_id).
  • Fork — копируем состояние выбранного чекпоинта в новый thread_id и запускаем альтернативную ветку: aupdate_state(fork_thread, old_state.values, checkpoint_id=...)ainvoke(...).
  • История доступна через aget_state_history(thread, limit=...) — список снимков с checkpoint_id и значениями.
  • Стоимость replay: если на пути дорогие LLM-узлы, повторный проход недёшев — их результаты кэшируют в state, чтобы переигрывать только дешёвую часть (см. LangGraph Reliability, Agent CostControl).

Пример

history = [s async for s in app.aget_state_history(thread)]
old = history[1]                                  # откат к checkpoint_2
fork = {"configurable": {"thread_id": "fork_456"}}
await app.aupdate_state(fork, old.values,
        checkpoint_id=old.config["configurable"]["checkpoint_id"])
await app.ainvoke({"messages": "другой ввод"}, fork)  # новая ветка «а что если?»

Связано с

  • LangGraph Checkpointers — time-travel физически опирается на чекпоинты
  • LangGraph Observability — дополняет трейсинг: не только смотреть, но и переигрывать
  • LangGraph — одно из ключевых production-преимуществ перед цепочками
  • LangGraph Reliability — кэширование результатов LLM-узлов удешевляет replay