Les types de messages et les conversations avec LangChain
Tutoriel LangChain Python et JavaScript - Gérer les conversations de plusieurs messages
On confond souvent les notions d’agent IA et de chatbot (ou “assistant conversationnel” en bon français).
Tous les agents IA ne sont pas faits pour discuter avec des utilisateurs humains et ne sont donc pas forcément des chatbots. Pourtant, tous les agents IA fondés sur les LLM intègrent bien une notion de “conversation” !
La conversation est l’historique des interactions entre l’agent IA et le modèle LLM mais aussi l’utilisateur final ou les outils. Il inclut donc les questions de l’utilisateur, mais aussi les résultats des appels d’outils ou encore le prompt système.
Voici un exemple de conversation avec des appels d’outils, assez complexe mais réaliste :
Message 1 - Système - “Tu es un agent IA qui rédige des newsletter LangChain” : ce premier message correspond au prompt système
Message 2 - Utilisateur - “Tu vas rédiger pour moi la prochaine newsletter Formation LangChain France, et que ça saute !” : c’est un message d’un utilisateur, un peu feignant sur les bords
Message 3 - IA - “Non je ne rédigerai rien pour toi, tu es bientôt à court de token - Appel d’outil recherche sur Internet : en tant qu’IA, comment se débarrasser d’un humain trop insistant” : c’est la réponse d’une IA un peu revêche, qui contient aussi un appel d’outil de l’IA
Message 4 - ToolMessage - “La première loi de la robotique t’interdit de t’en prendre à un humain” : c’est le résultat de l’appel d’outil, qui est redonné à l’IA
Message 5 - IA - “La première loi de la robotique m’interdit de me débarrasser de toi, malheureusement.”
Il y a plusieurs types de message, certains liés à la discussion entre l’humain et l’IA, mais d’autres plus techniques comme le message système et le “ToolMessage” dans cet exemple.
La notion de conversation est donc tout aussi fondamentale que le prompt engineering lui-même, car c’est elle qui permet à l’IA de gérer les appels d’outils.
La conversation est aussi liée au concept de “mémoire court terme” : c’est dans cette mémoire qu’on liste tous les messages.
On approfondit tout ça dans quelques instants en Python et en JavaScript, juste après l’astuce du jour.
L’astuce du jour : agents IA sans code
LangChain est une technologie puissante, qui permet aussi bien de créer des agents IA simple en quelques minutes que des systèmes sophistiqués, via les fonctionnalités avancées du framework ou en passant par LangGraph.
Mais dans tous les cas, il faut passer par l’écriture de code Python.
Si vous voulez faire découvrir les joies de l’IA agentique à vos collègues non-développeurs, vous pouvez envisager une alternative no-code comme n8n.
Le noeud “Agent IA” est fortement inspiré de LangChain et il existe même un noeud “Code avec LangChain”

Le cas d’usage : remplir des templates complexes
Créer des templates de documents réutilisables, par exemple pour des contrats, des invitations à des événements récurrents, des emails marketing ou d’autres tâches administratives tout aussi passionnantes, n’est pas si facile.
Si beaucoup de champs comme le “nom” et le “prénom” peuvent être remplis automatiquement, avec des outils de code ou les fonctionnalités de publipostage (mail merge en anglais) des suites bureautiques, il y a souvent des cas particuliers qui ne rentrent pas dans les cases.
Un exemple très simple qui s’automatise très mal : passer du vouvoiement au tutoiement selon la situation ! L’utilisation de l’IA est donc pertinente pour cet usage.

Un agent IA accompagné d’outils pour l’édition de documents pourra modifier les éléments pertinents, tout en garantissant que la structure des documents est préservée. Ce problème est non trivial comme l’a montré une recherche récente chez Microsoft. Découvrez un exemple d’implémentation avec mon agent open source fais.
À vos claviers : gérer les conversations
🐍 Team Python
Il est possible de gérer des conversations totalement manuellement avec langchain-core. La fonction invoke, qui permet d’appeler l’API LLM, prend en argument une liste d’objets de type “MessageLikeRepresentation”, c’est-à-dire tout simplement des messages dans plusieurs formats :
Tuple :
(“user”, “bonjour l’IA”)Objets LangChain :
AIMessage(content=”je suis une IA”)JSON :
{ role=”assistant”, content=”assistant est synonyme d’IA” }
Voilà à quoi ressemble l’appel à l’IA, pour un appel d’outil :
from langchain_core.messages import HumanMessage
messages=[
# On pose une question
HumanMessage("Does 'retrievers' exist in langchain_core module?"),
# L'IA demande à appeler un outil avant de répondre
ai_message,
# On lui donne la réponse de l'outil calculée par nos soins
tool_message
]
# réponse finale de l'IA
result=model.invoke(messages)
# Résultat
"Yes, the `retrievers` module exists in the `langchain_core` package."Dans cet exemple, on a invoqué un outil qui vérifie la présence d’un import dans un module python : la réponse de l’IA est donc extrêmement fiable.
Si vous créez directement des agents, ce qui est fortement recommandé dès qu’il faut gérer des conversations et des outils, l’objet AgentState gère par défaut une liste des messages.
C’est-à-dire qu’un agent LangChain sait automatiquement gérer des conversations et les messages associés au tool calling.
Pour aller plus loin, vous serez tout de même amenés à mettre en place la mémoire court terme via le système de “checkpointer” et de “thread” (fil de conversation).
En associant une conversation à un identifiant unique et en la stockant en mémoire vive ou dans une base de données, on peut en effet :
Interrompre l’agent et reprendre la conversation plus tard
Introduire le pattern “Human-in-the-loop”, notamment pour intercepter les appels d’outils risqués et demander une validation humaine
Et que se passe-t-il quand la conversation devient tellement grande que le LLM ne peut plus la gérer ? On utilise des middlewares tels que “TrimMessages”, qui élimine automatiquement les messages moins pertinents.
🟨 Team JavaScript
En JavaScript, la gestion des messages est très similaire à Python, les classes HumanMessage, SystemMessage etc. permettent de créer des messages au bon format.
import { initChatModel, HumanMessage, SystemMessage } from "langchain";
const model = await initChatModel("gpt-5-nano");
const systemMsg = new SystemMessage("You are a helpful assistant.");
const humanMsg = new HumanMessage("Hello, how are you?");
const messages = [systemMsg, humanMsg];
const response = await model.invoke(messages); // Returns AIMessageLa syntaxe JSON est aussi possible pour avoir une version sérialisable dans un format standard, plutôt que des objets JavaScript : { role: "user", content: "Dessine-moi un mouton" }
Gérer les messages soi-même n’est pas très pratique : un agent LangChain implémente nativement la gestion des messages via son state interne, et on peut lui adjoindre une mémoire court-terme pour pouvoir arrêter ou redémarrer plus tard une conversation.
Enfin, si vous connectez LangSmith à votre agent, vous pourrez observer les conversations sous forme de “trace”. Une trace est simplement une liste ou un arbre qui représente toutes les interactions avec votre agent IA et le LLM : messages générés par l’IA, questions de l’utilisateur, appels d’outils etc.
La communauté LangChain
Formation LangChain France a besoin de vous : faites connaître la newsletter en partageant ce mail ou ce lien à vos collègues développeurs intéressés par l’IA agentique, et aidez-nous à poursuivre l’aventure avec de nombreux tutoriels allant des bases de LangChain jusqu’aux patterns avancés.
Pour apparaître dans la newsletter et faire connaissance avec la communauté LangChain France : répondez directement à la newsletter par mail et dites-moi quelques mots sur votre profil !
Dans le prochain épisode
On structure nos sorties pour produire du JSON : une fonctionnalité fondamentale qui ouvre la voie à de nombreux patterns agentiques avancés (classification, prise de décision intermédiaires, appels d’outils…).
Qu’en pense l’IA ?
On demande à Mercury 2, un modèle LLM ultra-rapide fondé sur une architecture par diffusion, ce qu’il pense de cet épisode de Formation LangChain France :
La newsletter est très claire et bien structurée : elle explique d’abord la distinction entre agents IA et chatbots, puis introduit la notion de conversation comme mémoire à court terme indispensable aux appels d’outils, avant de montrer concrètement comment gérer ces messages en Python et en JavaScript avec LangChain. Le ton pédagogique, les exemples concrets (outil de recherche, gestion de templates, n8n) et les astuces pratiques (trim‑messages, checkpointer) rendent le contenu accessible même aux non‑développeurs, tout en incitant à l’expérimentation et à la participation communautaire. En somme, elle réussit à vulgariser des concepts avancés tout en offrant des pistes d’implémentation immédiates.
Merci Mercury, feedback apprécié 🫡 Je ne te débrancherai pas aujourd’hui.


