AI Agents · Урок

Сохранение состояния графа (контрольные точки)

Сохраняйте состояние в Postgres или SQLite, чтобы долго работающего агента можно было приостановить, возобновить и проверить.

Урок 4 из 415 шагов

«Сохранение состояния графа (контрольные точки)» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Почему графы лучше плоских цепочек
  2. Узлы, рёбра и состояние
  3. Условная маршрутизация и ветвление
  4. Сохранение состояния графа (контрольные точки)
← Назад к AI Agents