langchain-ai/langgraph-persistence

Compétence à invoquer lorsque votre LangGraph a besoin de persister l'état, de se souvenir des conversations, de voyager dans l'historique ou de configurer la portée du checkpointer des sous-graphes. Couvre les checkpointers, thread_id, voyage temporel, Store et les modes de persistance des sous-graphes.

Qu'est-ce que langgraph-persistence ?

Cette compétence est essentielle pour tout développeur utilisant LangGraph, un framework permettant de construire des agents conversationnels et des workflows d'IA complexes. Elle résout un problème fondamental : la persistance de l'état et de l'historique des conversations. Sans elle, chaque interaction serait isolée, empêchant l'agent de se souvenir du contexte ou de l'historique des échanges. La compétence couvre plusieurs mécanismes de persistance : les *checkpointers* pour sauvegarder l'état à différents points d'exécution, les `thread_id` pour isoler les conversations, le *time travel* (voyage temporel) pour revenir à des états antérieurs et rejouer des séquences, le Stockage (*Store*) pour une persistance plus large, et les modes de persistance pour les sous-graphes. Elle est compatible avec tous les runtimes LangGraph (CLI, serveur, API) et permet de configurer finement la portée du checkpointer au sein des sous-graphes. En bref, cette compétence transforme un agent statique en un système dynamique et contextuel, capable d'évoluer et d'apprendre de ses interactions.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/langchain-ai/langchain-skills/tree/main/skills/langgraph-persistence

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait langgraph-persistence ?

INVOQUEZ CETTE COMPÉTENCE lorsque votre LangGraph a besoin de persister l'état, de se souvenir des conversations, de voyager dans l'historique ou de configurer la portée du checkpointer des sous-graphes. Couvre les checkpointers, thread_id, voyage temporel, Store et les modes de persistance des sous-graphes.

Checkpointers

Les checkpointers sont le mécanisme de base pour sauvegarder l'état de votre graphe à chaque étape. Ils permettent de reprendre l'exécution à partir d'un point de contrôle donné.

from langgraph.checkpoint import MemorySaver

# Utiliser un checkpointer en mémoire (utile pour le développement)
checkpointer = MemorySaver()

Pour la production, utilisez un checkpointer persistant (base de données):

from langgraph.checkpoint.sqlite import SqliteSaver

checkpointer = SqliteSaver.from_conn_string("checkpoints.db")

Thread ID

Chaque conversation ou session est identifiée par un thread_id. Cela permet d'isoler les histoires et les états entre les utilisateurs ou les sessions.

config = {"configurable": {"thread_id": "user-session-123"}}
# Le graphe utilise automatiquement ce thread_id pour charger/sauvegarder l'état
result = graph.invoke(input_data, config)

Voyage temporel (Time Travel)

Le voyage temporel permet de :

  • Rejouer une séquence d'événements à partir d'un état antérieur
  • Revenir à un point de contrôle spécifique
  • Modifier une entrée passée et voir l'impact sur la suite
# Obtenir l'historique des états pour un thread
states = graph.get_state_history(config)

# Revenir à un état spécifique (par son checkpoint_id)
checkpoint_config = {"configurable": {"thread_id": "user-session-123", "checkpoint_id": "abc123"}}
graph.invoke(new_input, checkpoint_config)

Store (Stockage à long terme)

Le Store permet une persistance qui dépasse le simple état du graphe. Il est utilisé pour stocker des connaissances, des préférences utilisateur, ou toute donnée qui doit survivre au-delà d'une session.

from langgraph.store import Store

store = Store()
store.put("user_preferences", "user-123", {"theme": "dark"})
# Plus tard dans le graphe :
data = store.get("user_preferences", "user-123")

Modes de persistance pour sous-graphes

Lorsque vous utilisez des sous-graphes, vous pouvez configurer la portée du checkpointer :

  • "shared" : tous les sous-graphes partagent le même checkpointer (l'état est global)
  • "isolated" : chaque sous-graphe a son propre checkpointer (l'état est privé)
  • "custom" : vous définissez la logique de persistance personnalisée
from langgraph.graph import Subgraph

subgraph = Subgraph(
    nodes=[...],
    edges=[...],
    persistence_mode="isolated"  # chaque instance de sous-graphe a son propre état
)

Exemple complet

import asyncio
from langgraph.graph import StateGraph, END
from langgraph.checkpoint import MemorySaver

# Définir un graphe simple avec persistance
class AgentState(TypedDict):
    messages: List[str]
    step: int

checkpointer = MemorySaver()

async def run_agent():
    graph = StateGraph(AgentState)
    graph.add_node("chat", lambda state: {"messages": ["Réponse"]})
    graph.set_entry_point("chat")
    graph.add_edge("chat", END)
    
    app = graph.compile(checkpointer=checkpointer)
    
    # Premier appel
    config = {"configurable": {"thread_id": "session-1"}}
    result = await app.ainvoke({"messages": ["Bonjour"], "step": 0}, config)
    
    # Deuxième appel - l'état est préservé automatiquement
    result2 = await app.ainvoke({"messages": ["Comment ça va ?"], "step": 1}, config)
    
    # Voyage temporel vers la première étape
    history = app.get_state_history(config)
    for state in history:
        print(state)

asyncio.run(run_agent())

Bonnes pratiques

  1. Utilisez des thread_id uniques pour chaque session utilisateur
  2. Choisissez le bon checkpointer : MemorySaver pour le développement, SqliteSaver ou PostgresSaver pour la production
  3. Nettoyez les états obsolètes si vous utilisez un stockage persistant
  4. Testez le voyage temporel pour valider la reprise d'exécution

Pour plus de détails, consultez la documentation officielle de LangGraph.

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

langchain-ai/deep-agents-core

INVOKE THIS SKILL when building ANY Deep Agents application. Covers create_deep_agent(), harness architecture, SKILL.md format, and configuration options.

langchain-ai/deep-agents-memory

INVOKE THIS SKILL when your Deep Agent needs memory, persistence, or filesystem access. Covers StateBackend (ephemeral), StoreBackend (persistent), FilesystemMiddleware, and CompositeBackend for routing.

langchain-ai/deep-agents-orchestration

INVOKE THIS SKILL when using subagents, task planning, or human approval in Deep Agents. Covers SubAgentMiddleware, TodoList for planning, and HITL interrupts.

langchain-ai/framework-selection

INVOKE THIS SKILL at the START of any LangChain/LangGraph/Deep Agents project, before writing any agent code. Determines which framework layer is right for the task: LangChain, LangGraph, Deep Agents, or a combination. Must be consulted before other agent skills.

langchain-ai/langchain-dependencies

INVOKE THIS SKILL when setting up a new project or when asked about package versions, installation, or dependency management for LangChain, LangGraph, LangSmith, or Deep Agents. Covers required packages, minimum versions, environment requirements, versioning best practices, and common community tool packages for both Python and TypeScript.

langchain-ai/langchain-fundamentals

Create LangChain agents with create_agent, define tools, and use middleware for human-in-the-loop and error handling.

langchain-ai/langchain-middleware

INVOKE THIS SKILL when you need human-in-the-loop approval, custom middleware, or structured output. Covers HumanInTheLoopMiddleware for human approval of dangerous tool calls, creating custom middleware with hooks, Command resume patterns, and structured output with Pydantic/Zod.

langchain-ai/langchain-rag

INVOKE THIS SKILL when building ANY retrieval-augmented generation (RAG) system. Covers document loaders, RecursiveCharacterTextSplitter, embeddings (OpenAI), and vector stores (Chroma, FAISS, Pinecone).

langchain-ai/langgraph-fundamentals

INVOKE THIS SKILL when writing ANY LangGraph code. Covers StateGraph, state schemas, nodes, edges, Command, Send, invoke, streaming, and error handling.

langchain-ai/langgraph-human-in-the-loop

INVOKE THIS SKILL when implementing human-in-the-loop patterns, pausing for approval, or handling errors in LangGraph. Covers interrupt(), Command(resume=...), approval/validation workflows, and the 4-tier error handling strategy.

langchain-ai/swarm

Dispatches many independent items in parallel: create a table, fan out to subagents, aggregate results. One row = one unit of work.

Skills associés