Dans les premières versions de LangChain, le mot « chain » désignait presque tout enchaînement entre un prompt, un modèle et un traitement de sortie. LangChain 1.x clarifie cette architecture : les anciennes classes comme LLMChain vivent dans langchain-classic, tandis que les compositions modernes reposent sur les Runnable de langchain-core.
Le modèle mental : une entrée, une transformation, une sortie
Un Runnable représente une étape invocable. Un prompt transforme un dictionnaire en messages, un modèle transforme ces messages en réponse, puis un parser transforme cette réponse en valeur exploitable. LCEL relie ces étapes avec l’opérateur |.
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages([
("system", "Tu expliques les concepts techniques avec précision."),
("human", "Explique {concept} en trois points."),
])
model = ChatOpenAI(model="gpt-5-mini")
chain = prompt | model | StrOutputParser()
resultat = chain.invoke({"concept": "LCEL"})
print(resultat)La séquence est déclarative : on lit directement le flux de données. Chaque composant peut être testé séparément, puis l’ensemble expose la même interface.
Les opérations utiles des Runnables
invoke traite une entrée. batch traite plusieurs entrées. stream livre progressivement les résultats lorsque les composants le permettent. Les variantes ainvoke, abatch et astream couvrent les usages asynchrones. Cette interface commune facilite le remplacement d’un modèle ou d’un parser sans réécrire le pipeline.
Quand LCEL est le bon choix
LCEL convient à un flux court et prévisible : classification, résumé, extraction ou génération contrôlée. Si le modèle doit décider dynamiquement quels outils appeler, utilisez plutôt create_agent. Si le workflow comporte de l’état durable, des branches, des reprises ou des validations humaines, LangGraph rend le contrôle plus explicite.
Attention aux tutoriels anciens
Un exemple basé sur LLMChain peut encore fonctionner avec langchain-classic, mais il ne représente plus le chemin recommandé pour un nouveau projet. Vérifiez la version de LangChain ciblée, les imports et la documentation du fournisseur de modèle.
Tester la chaîne
Testez au moins les variables manquantes, les réponses vides, les erreurs du fournisseur et le format final. Pour les sorties métier, préférez un schéma validé plutôt qu’un parsing fragile de texte libre.
À retenir
- Choisissez la primitive la plus simple adaptée au besoin.
- Validez les sorties avant de les transmettre à un système métier.
- Ajoutez des traces et des tests dès le prototype.
Questions fréquentes
LCEL remplace-t-il toutes les chains ?
Non. LCEL remplace avantageusement de nombreux pipelines simples, mais les anciennes chains spécialisées restent disponibles dans langchain-classic. Les agents et graphes répondent à d’autres besoins.
LCEL fonctionne-t-il en asynchrone ?
Oui. Les Runnables proposent des méthodes asynchrones et de streaming lorsque les composants sous-jacents les prennent en charge.