LangGraph Reliability

Набор production-практик надёжности графа: идемпотентность узлов, лимиты на циклы, RetryPolicy и runbook типовых отказов. Эти приёмы превращают цикличный недетерминированный граф в систему, которая не падает и не дублирует необратимые операции.

Суть

Раз узлы могут вызываться повторно (retry, восстановление из чекпоинта, возобновление после HITL), исполнение должно быть устойчиво к повторам и сбоям. Три опоры: идемпотентность, ограничение циклов, политика повторов.

Как работает

Идемпотентность. Повторный вызов узла с теми же входными данными даёт тот же результат. Обязательна, если узел может вызваться снова. Приёмы: детерминировать LLM (temperature=0, seed), проверять operation_id перед необратимой операцией, передавать idempotency_key в API, кэшировать результат в state. Особый случай: interrupt() возобновляет узел с начала, поэтому необратимый код (списание) нельзя ставить до прерывания — выносим его за узел с interrupt() (см. LangGraph HITL).

Циклы и лимиты. Цикличный граф (узел, возвращающий управление себе) рискует зациклиться, если маршрутизатор не сработает (например, агент бесконечно дописывает сообщения). Решение — жёсткий лимит итераций + условное ребро на выход/fallback при превышении порога.

RetryPolicy. Повтор узла при временных ошибках (таймаут API, невалидный JSON) с экспоненциальной задержкой:

from langgraph.types import RetryPolicy
retry = RetryPolicy(max_attempts=3, initial_interval=1.0,
                    backoff_factor=2.0, max_interval=10.0, jitter=True)  # 1с→2с→4с, ±50%
workflow.add_node("api_call", api_call_node, retry=retry)

Runbook типовых отказов:

Отказ Решение
Потеря состояния PostgreSQL checkpointer (LangGraph Checkpointers)
Бесконечные циклы Лимит итераций + fallback
Неидемпотентный код до interrupt() Вынести код за узел с interrupt()
Опасные действия агента interrupt на каждый опасный tool
Дорогие LLM при replay Кэшировать результаты в state

Связано с

  • Agent CostControl — RetryPolicy, лимиты итераций, дорогой replay = контроль стоимости
  • LangGraph HITL — идемпотентность вокруг interrupt()
  • LangGraph Checkpointers — персистентность как ответ на потерю состояния
  • LangGraph — «метрики качества» контролируемого workflow

Открытые вопросы

  • разумный дефолт лимита итераций (баланс «доделать» vs «не зациклиться») → см. ReAct (ждёт курс: лекция #18 State machine, 2026-07-02)