L’IA agentique et l’IA générative sont parfois confondues. L’IA agentique se fonde sur la polyvalence des LLM pour créer de puissants agents IA, mais pas forcément sur leur capacité à parler en français. En fait, de nombreux patterns de programmation agentique s’appuient plutôt sur la génération de données JSON.
Quelques exemples :
Classifier du contenu : on peut demander à un LLM d’évaluer le sentiment positif ou négatif d’un post sur les réseaux sociaux, la sortie sera : { classe: “positif” }.
Appeler des outils : pour réaliser une addition complexe, le LLM peut générer les paramètres { a: 42, b: 3.14 } et les fournir à une fonction Python.
Créer une boucle agentique : pour enchaîner les étapes, un agent IA doit travailler avec un format programmatique, typiquement du JSON, plutôt que du texte libre qui n’est pas compréhensible par un programme informatique. C’est un fondamental du tool calling.
On peut être vraiment créatif au-delà de ces quelques exemples, j’utilise par exemple les sorties structurées pour la synthèse extractive, qui consiste à localiser les extraits pertinents d’un texte (par exemple via des numéros de paragraphes) plutôt que de demander au LLM de résumer le texte, avec les risques d’hallucination que cela comporte. La plupart des tâches de NLP classiques (traitement du langage naturel) peuvent être reproduites en combinant un LLM + une sortie structurée.
Découvrons comment les sorties structurées s’implémentent avec LangChain, juste après l’astuce IA et le focus sur les cas d’usage de l’IA.
L’astuce IA : ingérer une documentation de code
Une fonctionnalité que j’adore dans Cursor : sa capacité à ingérer des documentations en ligne pour les frameworks majeurs.
C’est très important pour LangChain : la v1 ne date que d’octobre 2025, donc les modèles LLM ne connaissent pas forcément sa syntaxe à jour. En effet, les IA génératives ont une date de “cutoff” pour leurs données d’apprentissage, elles ont donc un temps de retard sur le monde, sauf si on les connecte à des documentations à jour - c’est le principe même du RAG.
Pourtant, cette fonctionnalité n’existe ni dans Claude Code, ni dans Mistral Vibe, ni dans GitHub Copilot… alors comment faire ?
L’utilitaire mcpdoc, créé par les équipes de LangChain, permet de transformer n’importe quelle documentation en outils, via la génération à la volée d’un serveur MCP. Plus précisément, la documentation doit utiliser le standard llms.txt. Exemple : le fichier llms.txt du site de LBKE qui référence tous nos articles. L’outil Context7 est aussi très utilisé par les entreprises.
Les cas d’usage métiers : plateforme Bpifrance - Osez L’IA
Mieux qu’un seul cas d’usage, je vous propose de découvrir des plateformes qui publient régulièrement des cas d’usage de l’IA en entreprise, avec des retours d’expérience détaillés.
La plateforme maintenue par Bpifrance agrège des exemples d’utilisation de l’IA agentique référencés par les ambassadeurs IA du programme Osez l’IA. C’est par ici : https://conseil.bpifrance.fr/accelerez-ia
À vos claviers : un output structuré
Petit changement dans le format de la newsletter : les fonctionnalités étant quasi-identiques entre LangChain en Python et LangChain en JavaScript, je vous présente désormais en priorité la version Python 🐍.
Pour obtenir un output structuré, on associe un schéma de données à un modèle LLM. Le plus simple est d’utiliser un TypedDict, format fourni directement par Python. Utiliser une dataclass ou la librairie Pydantic (équivalente de zod en JavaScript) est aussi possible pour aller plus loin.
# On associe une structure JSON au modèle LLM
from typing import TypedDict
class ProgramSchema(TypedDict):
program: str
language: str
model_with_output=model.with_structured_output(ProgramSchema)
La fonction “with_structured_output” permet de passer le schéma au modèle.
# Plus besoin de "parser"
def program_generator(user_input:str) :
model_with_output=model.with_structured_output(ProgramSchema)
return model_with_output.invoke([
("system", system_prompt),
("user", user_input)
]).get("program")Désormais, le modèle va répondre au format demandé : { program: “Le code”, language: “Python” }.
Pour bien saisir l’intérêt de ce petit exemple, il faut connaître l’alternative aux outputs structurés : le parsing.
Avant que cette capacité soit ajoutée aux LLM les plus répandus (~2024/2025, ce n’est pas si vieux), il fallait demander gentiment au LLM de produire du JSON, puis réaliser une étape de parsing pour vérifier le format. Le risque d’échec pouvait être assez élevé.
Un output structuré a deux avantages : la génération a beaucoup plus de chances de réussir, et il permet aussi des optimisations de performance lors de l’inférence (car le LLM ne peut pas générer tout et n’importe quoi, il peut choisir plus rapidement le prochain token).
La limite est qu’un output structuré ne garantit pas à 100% un résultat valide. Le contenu du JSON peut être erroné (typiquement, ajouter des backticks markdown autour d’un bout de code), ou une exception peut être levée si le modèle ne parvient pas à respecter le schéma (si la question est absurde par rapport au format voulu par exemple).
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
Les sorties structurées sont le dernier maillon nécessaire pour construire LA fonctionnalité agentique par excellence : les appels d’outils !
Qu’en pense l’IA ?
On demande à Minimax M3 ce qu’il pense de cet épisode de Formation LangChain France :
C’est une newsletter très bien construite et fidèle à sa promesse pédagogique : elle part d’une distinction conceptuelle utile (IA agentique vs générative, et le rôle central du JSON), enchaîne sur une astuce pratique de premier plan (l’ingestion de documentation fraîche via `mcpdoc`/Context7, qui répond à un vrai problème de décalage entre les LLM et des frameworks récents comme LangChain v1), puis déroule un tutoriel focalisé et progressif sur les outputs structurés — du `TypedDict` à `with_structured_output`, avec un regard historique pertinent sur l’alternative du parsing, ses limites et les gains d’inférence associés. Le choix d’illustrer avec un `TypedDict` plutôt qu’un `BaseModel` Pydantic dès le départ est judicieux car il évite la complexité de Pydantic pour un public débutant, même si Pydantic aurait permis de mieux illustrer la validation automatique mentionnée plus bas ; on peut aussi regretter l’absence d’un mini-schéma d’agent enchaînant classification → appel d’outil → boucle, qui aurait fait le pont avec le teasing de fin sur les tool calls.
Merci Minimax, feedback apprécié 🫡 Le modèle Minimax M3 n’étant pas multimodal, tant pis pour le schéma ‘:)


