0Pricing
AI Agents · Lekcja

Utrwalanie stanu grafu (punkty kontrolne)

Zapisuj stan w Postgres lub SQLite, aby długotrwały agent mógł zostać wstrzymany, wznowiony i poddany audytowi.

Utrwalanie stanu grafu (punkty kontrolne) to bezpłatna lekcja AI Agents na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AI Agents, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AI Agents zawiera 4 lekcji w sumie.

Dlaczego utrwalać stan?

Agenty działające przez długi czas muszą umożliwiać:

  • Wstrzymanie i wznowienie działania wiele godzin później
  • Odtworzenie działania po awarii w trakcie wykonywania
  • Obsługę udziału człowieka w pętli (oczekiwanie na zatwierdzenie)
  • Odtworzenie przebiegu na potrzeby debugowania

Checkpointery LangGraph utrwalają stan na granicy każdego węzła.

Checkpointer w pamięci

Do programowania i testów:

from langgraph.checkpoint.memory import MemorySaver

checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)

Checkpointer PostgreSQL

Do środowiska produkcyjnego:

from langgraph.checkpoint.postgres import PostgresSaver

checkpointer = PostgresSaver.from_conn_string('postgresql://...')
await checkpointer.setup()   # create tables
app = graph.compile(checkpointer=checkpointer)

Checkpointer SQLite

Lokalna trwałość danych bez serwera bazy danych:

from langgraph.checkpoint.sqlite import SqliteSaver
import sqlite3

conn = sqlite3.connect('agents.db', check_same_thread=False)
checkpointer = SqliteSaver(conn)

Identyfikatory wątków

Każde uruchomienie ma identyfikator thread_id — podobny do identyfikatora sesji. Wielu użytkowników otrzymuje osobne identyfikatory thread_id; wznowienie uruchomienia oznacza użycie tego samego identyfikatora:

config = {'configurable': {'thread_id': 'user-42-conversation-1'}}
result = app.invoke({'messages': [...]}, config)

Wznawianie uruchomienia

Wywołaj invoke z tym samym identyfikatorem thread_id i bez danych wejściowych — agent będzie kontynuować działanie od miejsca, w którym je przerwano:

# Some hours later:
app.invoke(None, config)

Sprawdzanie stanu

Odczytaj bieżący stan wątku:

snapshot = app.get_state(config)
print(snapshot.values)         # current state dict
print(snapshot.next)           # which node is next
print(snapshot.created_at)

Historia stanu

Przejdź wstecz przez wszystkie punkty kontrolne:

for snapshot in app.get_state_history(config):
    print(snapshot.created_at, snapshot.values)

Rozgałęzianie uruchomienia

Możesz zaktualizować stan w dowolnym wcześniejszym punkcie kontrolnym i ponownie uruchomić działanie od tego miejsca — przydaje się to podczas debugowania scenariuszy „co by było, gdyby”:

app.update_state(config, {'plan': 'a different plan'})
app.invoke(None, config)   # continue with the new plan

Udział człowieka w pętli z interrupt_before

Wstrzymaj wykonywanie przed wrażliwym węzłem, aby człowiek mógł je sprawdzić:

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)

Wznawianie po edycji

Przed wznowieniem człowiek może edytować stan:

app.update_state(config, {'email_draft': 'final version'})
app.invoke(None, config)

Śledzenie kosztów między punktami kontrolnymi

Utrwalony stan może zawierać liczniki tokenów i kosztów, które przetrwają awarie:

class State(TypedDict):
    cost_usd: Annotated[float, lambda a, b: a + b]

# Every LLM-calling node adds to it.

Czyszczenie

Stare wątki się kumulują. Okresowo usuwaj ukończone wątki, aby kontrolować ilość przechowywanych danych:

await checkpointer.delete(thread_id='old-thread')

Wznawianie wątków

Jak wznowić uruchomienie agenta po awarii?

Podsumowanie

Używaj SqliteSaver lokalnie, a PostgresSaver w środowisku produkcyjnym. Identyfikatory wątków rozdzielają uruchomienia. Połącz je z interrupt_before, aby obsługiwać przepływy z udziałem człowieka w pętli.

Często zadawane pytania

Czy lekcja „Utrwalanie stanu grafu (punkty kontrolne)” jest bezpłatna?

Tak — pełny tekst „Utrwalanie stanu grafu (punkty kontrolne)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AI Agents, przejdź na CoddyKit PRO. Kurs AI Agents zawiera 4 lekcji w sumie.

Co nauczysz się w „Utrwalanie stanu grafu (punkty kontrolne)”?

Zapisuj stan w Postgres lub SQLite, aby długotrwały agent mógł zostać wstrzymany, wznowiony i poddany audytowi. Ćwiczysz AI Agents z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AI Agents?

Nie wymagamy żadnego doświadczenia. AI Agents w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Utrwalanie stanu grafu (punkty kontrolne)”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AI Agents?

Tak. Każda lekcja AI Agents zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego grafy są lepsze od płaskich łańcuchów
  2. Węzły, krawędzie i stan
  3. Warunkowe kierowanie i rozgałęzianie
  4. Utrwalanie stanu grafu (punkty kontrolne)
← Powrót do AI Agents