Introduction
LangGraph permet de modéliser des applications LLM sous forme de graphes, offrant un contrôle total sur le flux d'exécution des agents. Contrairement aux chaînes linéaires, il gère les états, les boucles et les décisions conditionnelles de manière explicite. Ce tutoriel vous apprend les fondations pour créer un agent simple qui répond à des questions tout en conservant un historique. Idéal pour les projets nécessitant fiabilité et traçabilité.
Prérequis
- Python 3.10 ou supérieur
- Connaissances de base en Python et API LLM
- Clé API OpenAI ou équivalente
- Environnement virtuel recommandé
Installation des dépendances
python -m venv venv
source venv/bin/activate
pip install langgraph langchain langchain-openaiCette commande crée un environnement isolé et installe LangGraph avec les dépendances LangChain nécessaires pour interagir avec les modèles LLM.
Définition de l'état du graphe
from typing import TypedDict, Annotated
from langgraph.graph import add_messages
class AgentState(TypedDict):
messages: Annotated[list, add_messages]L'état AgentState définit la structure partagée entre les nœuds. add_messages permet de concaténer automatiquement les messages sans duplication.
Création du premier nœud
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")
def chatbot(state: AgentState):
response = llm.invoke(state["messages"])
return {"messages": [response]}Ce nœud simple appelle le modèle LLM et retourne la réponse dans l'état. Il sert de point d'entrée pour la génération de texte.
Construction et compilation du graphe
from langgraph.graph import StateGraph, START, END
builder = StateGraph(AgentState)
builder.add_node("chatbot", chatbot)
builder.add_edge(START, "chatbot")
builder.add_edge("chatbot", END)
graph = builder.compile()StateGraph assemble les nœuds et les connexions. START et END définissent le début et la fin du flux. compile() produit un graphe exécutable.
Exécution du graphe
from state import AgentState
from graph import graph
initial_state = {"messages": [("user", "Bonjour, comment ça va ?")]}
result = graph.invoke(initial_state)
print(result["messages"][-1].content)Ce script initialise l'état avec un message utilisateur, exécute le graphe et affiche la réponse finale du modèle.
Bonnes pratiques
- Toujours typer explicitement l'état avec TypedDict
- Utiliser des noms de nœuds descriptifs
- Tester chaque nœud indépendamment avant d'assembler le graphe
- Versionner les prompts dans des fichiers séparés
- Ajouter des checkpoints pour la persistance dès que possible
Erreurs courantes à éviter
- Oublier d'annoter les messages avec add_messages provoque des écrasements d'état
- Ne pas gérer les erreurs d'API LLM peut bloquer tout le graphe
- Créer des cycles infinis sans condition de sortie
- Ignorer la validation des entrées utilisateur
Pour aller plus loin
Découvrez nos formations LangGraph avancées pour maîtriser les agents multi-acteurs et la persistance d'état.