Сохранение состояния графа (контрольные точки)
Сохраняйте состояние в Postgres или SQLite, чтобы долго работающего агента можно было приостановить, возобновить и проверить.
«Сохранение состояния графа (контрольные точки)» — бесплатный урок AI Agents на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Зачем сохранять состояние
Долгоживущим агентам необходимо:
- Приостанавливать работу и возобновлять её через несколько часов
- Восстанавливаться после сбоев в середине выполнения
- Поддерживать взаимодействие с человеком (ожидать подтверждения)
- Повторно воспроизводить запуск для отладки
Контрольные точки LangGraph сохраняют состояние на границе каждого узла.
Контрольные точки в памяти
Для разработки и тестирования:
from langgraph.checkpoint.memory import MemorySaver
checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)Контрольные точки в Postgres
Для производственной эксплуатации:
from langgraph.checkpoint.postgres import PostgresSaver
checkpointer = PostgresSaver.from_conn_string('postgresql://...')
await checkpointer.setup() # create tables
app = graph.compile(checkpointer=checkpointer)Контрольные точки в Sqlite
Локальное сохранение без сервера базы данных:
from langgraph.checkpoint.sqlite import SqliteSaver
import sqlite3
conn = sqlite3.connect('agents.db', check_same_thread=False)
checkpointer = SqliteSaver(conn)Идентификаторы потоков
У каждого запуска есть thread_id — аналог идентификатора сеанса. Разные пользователи получают отдельные thread_id; чтобы возобновить запуск, используйте тот же идентификатор:
config = {'configurable': {'thread_id': 'user-42-conversation-1'}}
result = app.invoke({'messages': [...]}, config)Возобновление запуска
Вызовите invoke с тем же thread_id и без входных данных — агент продолжит работу с места остановки:
# Some hours later:
app.invoke(None, config)Проверка состояния
Прочитайте текущее состояние потока:
snapshot = app.get_state(config)
print(snapshot.values) # current state dict
print(snapshot.next) # which node is next
print(snapshot.created_at)История состояния
Пройдите назад по всем контрольным точкам:
for snapshot in app.get_state_history(config):
print(snapshot.created_at, snapshot.values)Ответвление запуска
Можно обновить состояние на любой прошлой контрольной точке и повторно запустить выполнение оттуда — это удобно для отладки по принципу "что, если":
app.update_state(config, {'plan': 'a different plan'})
app.invoke(None, config) # continue with the new planВзаимодействие с человеком с помощью interrupt_before
Приостановите выполнение перед чувствительным узлом, чтобы человек мог проверить результат:
app = graph.compile(
checkpointer=checkpointer,
interrupt_before=['send_email']
)
result = app.invoke({'messages': [...]}, config)
# Agent paused. Human inspects state.
# When approved:
app.invoke(None, config)Возобновление после редактирования
Перед возобновлением человек может отредактировать состояние:
app.update_state(config, {'email_draft': 'final version'})
app.invoke(None, config)Отслеживание стоимости между контрольными точками
Сохранённое состояние может включать счётчики токенов и стоимости, которые сохраняются после сбоев:
class State(TypedDict):
cost_usd: Annotated[float, lambda a, b: a + b]
# Every LLM-calling node adds to it.Очистка
Старые потоки накапливаются. Периодически удаляйте завершённые, чтобы контролировать объём хранилища:
await checkpointer.delete(thread_id='old-thread')Возобновление потоков
Как возобновить запуск агента после сбоя?
Итоги
Используйте SqliteSaver локально, а PostgresSaver — в производственной среде. Идентификаторы потоков разделяют запуски. Объединяйте это с interrupt_before для рабочих процессов с участием человека.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Сохранение состояния графа (контрольные точки)» бесплатный?
Да — полный текст урока «Сохранение состояния графа (контрольные точки)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Сохранение состояния графа (контрольные точки)»?
Сохраняйте состояние в Postgres или SQLite, чтобы долго работающего агента можно было приостановить, возобновить и проверить. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Сохранение состояния графа (контрольные точки)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему графы лучше плоских цепочек
- Узлы, рёбра и состояние
- Условная маршрутизация и ветвление
- Сохранение состояния графа (контрольные точки)