Notre position : nous sommes Geonode et nous vendons des proxys, qui n'ont rien à voir avec les frameworks LLM. Nous ne gagnons rien, quel que soit votre choix, ce qui fait de cette comparaison un texte écrit par quelqu'un sans enjeu sur le résultat — une position inhabituelle dans une catégorie où la plupart des comparaisons viennent de l'un des éditeurs. Toutes les versions, licences et activités de dépôts ci-dessous ont été vérifiées en septembre 2026.
Pourquoi on Cherche des Alternatives
Il vaut la peine de nommer les vraies plaintes, parce qu'elles déterminent quelle alternative aide.
Profondeur d'abstraction. Déboguer une chain consiste souvent à lire le code source du framework pour savoir quel prompt a réellement été envoyé. L'indirection qui raccourcit la démo allonge les incidents de production.
Instabilité de l'API. Le framework a beaucoup bougé au fil de sa vie, et les tutoriels vieillissent vite. Le code écrit contre une version majeure doit être repris.
Poids des dépendances. Une grande surface apporte un grand arbre de dépendances, ce qui compte dans les déploiements contraints et en revue de sécurité.
En faire trop. Chains, agents, mémoire, récupération, tooling, évaluation. La plupart des projets ont besoin de deux de ces choses et en héritent toutes.
Aucune de ces plaintes ne porte sur les idées. Les abstractions de LangChain sont des descriptions raisonnables de l'espace du problème, c'est précisément pourquoi elles ont été copiées. Les plaintes portent sur le coût d'adopter un framework entier pour n'en utiliser qu'une partie.
Il vaut aussi la peine de dire que le projet n'est pas à l'arrêt : langchain est à 1.3.18 et langchain-core à 1.6.1, tous deux publiés fin août 2026, licence MIT, le dépôt parmi les plus actifs de la catégorie. Une grande partie des critiques décrit une version plus ancienne.
Le Paysage
Tous les chiffres viennent de PyPI et des dépôts des projets eux-mêmes, vérifiés en septembre 2026.
| Projet | Dernière | Licence | Focus |
|---|---|---|---|
| LangChain | 1.3.18 | MIT | Composition généraliste |
| LangGraph | 1.2.11 | MIT | Workflows stateful, multi-acteurs |
| LlamaIndex | 0.14.24 | MIT | Indexation et récupération de données |
| Haystack | 3.1.0 | Apache-2.0 | Pipelines de production |
| DSPy | 3.3.1 | MIT | Optimisation programmatique des prompts |
| Semantic Kernel | 1.44.1 | MIT | Entreprise, multilangage |
| Pydantic AI | 2.37.0 | MIT | Agents typés |
| Instructor | 1.16.0 | MIT | Sorties structurées uniquement |
Tous activement développés — chacun a reçu un push dans les jours précédant la vérification. Tous sous licence permissive. Les différences tiennent au périmètre et à la philosophie, pas à la viabilité.
LlamaIndex : La Récupération d'Abord
L'alternative généraliste la plus proche, et elle arrive d'une autre direction.
Là où LangChain a commencé par composer des appels LLM, LlamaIndex a commencé par relier les LLM à vos données — son propre résumé est "interface between LLMs and your data". Cette origine se voit dans ce qu'il fait bien : chargement de documents depuis une très large gamme de sources, stratégies de chunking, construction d'index, et motifs de récupération au-delà de la similarité top-k simple.
Choisissez-le lorsque la qualité de la récupération est la partie difficile de votre problème. Ses abstractions d'index et ses query engines sont plus sophistiqués que l'équivalent dans un framework général, et l'écosystème de loaders est assez large pour qu'un branchement sur une source inhabituelle tienne souvent en une ligne.
La réserve a la même forme que celle de LangChain : il a grandi jusqu'à devenir un framework général, donc l'adopter pour la récupération amène des agents, des workflows et du tooling dont vous ne voulez peut-être pas.
Haystack : Pipelines de Production
Le framework de Deepset, et le plus explicitement orienté production du groupe — il se décrit comme un framework "to build customizable, production-ready LLM applications".
Sa propriété distinctive : les pipelines sont des graphes explicites de composants aux entrées et sorties déclarées, sérialisables en YAML. Cela rend inspectable ce qui s'exécute d'une façon que le method-chaining ne permet pas, et fait d'un pipeline quelque chose que l'on peut versionner, differ et relire.
Choisissez-le lorsque vous construisez quelque chose qui sera opéré plutôt que démontré — où voir la structure du pipeline, le sérialiser et raisonner dessus en revue compte plus que le chemin le plus court vers un prototype qui tourne.
C'est aussi le seul projet Apache-2.0 de cette liste plutôt que MIT, une distinction sans grande différence pratique — les deux sont permissives — mais qui compte parfois dans une revue juridique avec une préférence.
DSPy : Une Idée Vraiment Différente
L'alternative la plus intéressante, et celle qui n'est pas une variation des autres.
Le postulat de DSPy : les prompts écrits à la main sont la mauvaise abstraction. Vous déclarez ce qu'un module doit faire en termes d'entrées et de sorties, et le framework optimise les prompts — y compris les exemples few-shot — contre une métrique que vous définissez.
La conséquence est une boucle de développement différente. Au lieu d'itérer le libellé du prompt à la main, vous construisez un jeu d'évaluation, définissez une métrique et laissez l'optimiseur chercher. Cela transforme l'ingénierie de prompt d'un artisanat en quelque chose de plus proche d'une procédure d'entraînement.
Choisissez-le lorsque vous avez une tâche à qualité mesurable, un jeu d'évaluation, et assez de volume pour que l'optimisation systématique paie. Classification, extraction et raisonnement structuré conviennent.
Ne le choisissez pas lorsque vous ne pouvez pas définir de métrique, ou lorsque la tâche est ponctuelle. Toute l'approche repose sur le scoring automatique des sorties, et construire ce jeu d'évaluation est le vrai travail.
Avec 37 000 stars et un développement actif, il a largement dépassé le stade expérimental — mais il vous demande plus d'emblée que n'importe quelle autre option ici.
Pydantic AI et Instructor : Étroits Exprès
Deux projets qui résolvent moins, volontairement.
Instructor fait une chose : les sorties structurées. Vous définissez un modèle Pydantic, et il gère le schéma, la validation et la boucle de retry en cas d'invalidité. C'est toute la bibliothèque.
Une part énorme du code d'applications LLM consiste à « obtenir du JSON valide de cette forme d'un modèle », et Instructor est une réponse complète en quelques lignes, presque sans surcoût de framework. Si c'est votre exigence, adopter un framework général pour l'obtenir est un mauvais échange.
Pydantic AI est plus large — un framework d'agents "the Pydantic way" — apportant sûreté de typage, injection de dépendances et sorties structurées à la construction d'agents. Il est plus jeune que les autres et grandit vite, et séduit surtout les équipes déjà investies dans Pydantic et le typage.
Choisissez-les lorsque le problème est bien défini et que vous préférez une bibliothèque à un framework. La distinction compte : une bibliothèque est quelque chose que vous appelez, un framework est quelque chose qui vous appelle, et le second est bien plus difficile à quitter.
Semantic Kernel : Entreprise et Multilangage
Le framework de Microsoft, et celui à considérer lorsque Python n'est pas toute l'histoire.
Ses traits distinctifs sont le support de première classe pour .NET, Python et Java, et une architecture autour de plugins et de planners qui se mappe sur les motifs d'intégration d'entreprise.
Choisissez-le lorsque vous êtes dans une équipe .NET, lorsque vous avez besoin des mêmes concepts dans plusieurs langages, ou lorsque les décisions de plateforme de votre organisation pointent dans cette direction. Ce sont de vraies contraintes, souvent décisives indépendamment du mérite technique.
Pour un projet uniquement Python sans cette contrainte, les options natives Python ont généralement plus d'élan dans l'écosystème.
LangGraph : L'Alternative au Sein de LangChain
Il vaut la peine de le séparer, parce que c'est souvent ce que les gens veulent vraiment lorsqu'ils disent vouloir une alternative.
LangGraph — de la même équipe, licence MIT, à 1.2.11 — se décrit comme destiné à "building stateful, multi-actor applications with LLMs". C'est un modèle d'exécution en graphe avec un état explicite, plutôt qu'une abstraction de chain.
La distinction compte parce que la plupart des plaintes sur LangChain concernent le flux de contrôle caché. LangGraph fait du flux de contrôle ce que vous écrivez : nœuds, arêtes, transitions conditionnelles et un objet d'état que vous définissez. C'est nettement plus lisible lorsqu'un problème survient à trois heures du matin.
Choisissez-le lorsque votre application a un vrai état, des branchements ou des cycles — un agent qui boucle, un workflow avec des étapes d'approbation, tout ce où « ce qui se passe ensuite » dépend de ce qui s'est passé avant. Il peut s'utiliser sans adopter le reste de LangChain.
Sans Framework : Le Plaidoyer
L'option que la plupart des articles de comparaison omettent, et la bonne réponse pour une part substantielle des applications.
Les SDK des fournisseurs de modèles sont désormais bons. En appeler un directement tient en quelques lignes, et c'est entièrement transparent :
response = client.messages.create(
model=MODEL,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
Ce que vous abandonnez : l'abstraction de fournisseur, les intégrations préfabriquées, les composants de récupération prêts à l'emploi, et la boucle d'agent.
Ce que vous gagnez : vous pouvez lire votre propre code. Le prompt envoyé est le prompt dans le fichier. Déboguer, c'est lire une requête et une réponse plutôt que de tracer des couches de framework. Votre arbre de dépendances est un SDK. Et les mises à jour sont les notes de version du fournisseur plutôt qu'un guide de migration de framework.
Une position intermédiaire raisonnable : utiliser des bibliothèques étroites pour des problèmes précis — Instructor pour les sorties structurées, un client de base vectorielle pour la récupération, un client HTTP pour les tool calls — et écrire l'orchestration vous-même. L'orchestration tient souvent en cinquante lignes, et cinquante lignes que vous avez écrites sont plus faciles à maintenir qu'un framework que vous n'avez pas écrit.
Quand un framework gagne vraiment sa place : lorsque vous avez besoin de nombreuses intégrations de fournisseurs, lorsque vous construisez des agents à usage complexe d'outils et voulez la boucle gérée, lorsqu'une équipe bénéficie de conventions partagées, ou lorsque la vitesse de prototypage compte plus que la lisibilité en production. Ce sont de vraies raisons, et elles s'appliquent à de vrais projets.
Le mode d'échec à éviter : adopter un framework pour la démo et découvrir en production que vous ne voyez pas ce qu'il fait.
Migrer Hors d'un Framework
Si vous avez déjà une application LangChain et envisagez un départ, le travail est plus prévisible qu'il n'y paraît — et l'ordre compte.
Découvrez d'abord ce qu'il envoie vraiment. Avant de changer quoi que ce soit, capturez les vrais prompts et paramètres. La plupart des frameworks exposent un callback ou un flag de debug pour cela, et l'activer produit l'artefact le plus utile de tout l'exercice : un enregistrement de ce que fait votre application, exprimé en requêtes HTTP plutôt qu'en appels de méthodes. La moitié du temps, cela seul révèle que le framework fait quelque chose que vous n'aviez pas prévu.
Déplacez un composant à la fois, pas toute l'application. Les pièces sont séparables. Remplacez l'étape de récupération par des appels directs au client de la base vectorielle en laissant le reste en place ; confirmez que la qualité de sortie n'a pas changé ; puis passez à la pièce suivante. Une réécriture big-bang mélange « le nouveau code est faux » et « le nouveau code est différent », et vous perdez la capacité de distinguer.
Gardez un harnais de comparaison des sorties. Exécutez les deux implémentations sur les mêmes entrées et différez les résultats. La récupération et la génération sont assez non déterministes pour que « ça a l'air bien » ne soit pas une preuve, et une centaine de sorties appariées montrera une régression que le spot-check ne montrera pas.
Attendez-vous à ce que les modèles de prompt soient la partie difficile. Les modèles de prompt de framework incluent souvent du boilerplate que vous n'avez pas écrit et que vous n'avez peut-être pas lu — instructions de formatage, output parsers, scaffolding few-shot. Reproduire le comportement, c'est les reproduire, d'où la capture d'abord des prompts réellement envoyés.
Et soyez honnête sur le fait que cela en vaille la peine. Une application qui marche et que vous trouvez un peu opaque n'est pas évidemment pire qu'une réécriture que vous comprenez et qui a de nouveaux bugs. Le cas pour migrer est fort lorsque le framework vous coûte activement — temps de debug, churn de mises à jour, conflits de dépendances — et faible lorsque la motivation est esthétique. Les réécritures justifiées par le goût ont un mauvais bilan.
Le chemin intermédiaire réaliste pour la plupart des équipes : arrêter d'ajouter de la surface de framework plutôt que d'enlever la surface existante. Nouveaux composants écrits directement, anciens laissés tranquilles jusqu'à ce qu'ils aient de toute façon besoin de changer.
Comment Choisir
Une courte procédure qui règle la plupart des cas.
Notez ce dont vous avez vraiment besoin. Sorties structurées ? Récupération ? Agents multi-étapes avec tools ? Changement de fournisseur ? La plupart des projets ont besoin d'une ou deux de ces choses. Adopter un framework général pour une seule, c'est d'où vient le regret.
Essayez d'abord sans framework. Une demi-journée à écrire directement contre un SDK vous dit quelle est vraiment la partie difficile de votre problème, et cette réponse pointe en général vers une bibliothèque précise plutôt que vers un framework général.
Faites correspondre l'outil à la partie difficile. La qualité de récupération pointe vers LlamaIndex. Une qualité de tâche mesurable avec un jeu d'évaluation pointe vers DSPy. L'extraction structurée pointe vers Instructor ou Pydantic AI. Les workflows stateful multi-étapes pointent vers LangGraph ou Haystack. L'entreprise multilangage pointe vers Semantic Kernel.
Pesez le coût de sortie. Combien de votre code changerait si vous l'enleviez ? Une bibliothèque que vous appelez est bon marché à quitter ; un framework qui possède votre flux de contrôle ne l'est pas. Cette question vaut d'être posée avant l'adoption plutôt qu'après.
Et ne choisissez pas seulement à la popularité. Chaque option ici est activement maintenue et sous licence permissive. La taille de l'écosystème aide à trouver des exemples, et ce n'est pas la même chose que l'adéquation à votre problème.
Questions Fréquentes
Quelle est la meilleure alternative à LangChain ?
Cela dépend de la partie dont vous avez besoin. LlamaIndex pour les applications lourdes en récupération, Haystack pour des pipelines de production inspectables, DSPy pour des tâches à qualité mesurable, Instructor ou Pydantic AI pour les sorties structurées, LangGraph pour les workflows stateful. Pour beaucoup d'applications, appeler le SDK du fournisseur directement est la meilleure option.
LangChain est-il encore maintenu ?
Très. langchain était à 1.3.18 et langchain-core à 1.6.1 fin août 2026, tous deux sous licence MIT, le dépôt parmi les plus actifs de la catégorie. Une grande partie des critiques en circulation décrit des versions antérieures.
Faut-il un framework pour construire avec des LLM ?
Non. Les SDK des fournisseurs sont simples, et un appel direct tient en quelques lignes avec une transparence totale sur ce qui est envoyé. Les frameworks gagnent leur place avec de nombreuses intégrations, des boucles d'agent complexes ou des conventions d'équipe partagées — et vous coûtent la capacité de voir ce qui se passe.
LangChain ou LlamaIndex ?
LlamaIndex si la récupération est la partie difficile : ses document loaders, stratégies de chunking et abstractions d'index sont plus développés. LangChain si vous avez besoin d'une composition large entre beaucoup de fournisseurs et d'outils. Les deux ont grandi jusqu'à devenir des frameworks généraux, la distinction est plus petite qu'autrefois.
Qu'est-ce que DSPy et en quoi est-ce différent ?
Il traite les prompts comme des paramètres à optimiser plutôt que comme du texte à écrire. Vous déclarez des entrées et des sorties, définissez une métrique, et le framework optimise prompts et exemples few-shot contre votre jeu d'évaluation. Il exige un jeu d'évaluation, qui est le vrai coût et aussi le vrai bénéfice.
LangGraph est-il une alternative à LangChain ?
Il vient de la même équipe et peut s'utiliser indépendamment. Il remplace les abstractions de chain par un graphe explicite de nœuds, d'arêtes et d'état, ce qui répond à la plainte la plus courante sur LangChain — que le flux de contrôle est caché. Pour des applications stateful ou ramifiées, c'est souvent ce que les gens voulaient vraiment.
Quel framework LLM est le meilleur en production ?
Haystack est le plus explicitement orienté production, avec des pipelines sérialisables que vous pouvez versionner et relire. LangGraph convient aux workflows stateful. Mais le choix le plus amical à la production est souvent le moins de framework — du code que vous lisez à trois heures du matin bat des abstractions que vous devez tracer.
Ces frameworks sont-ils gratuits et open source ?
Tous. LangChain, LangGraph, LlamaIndex, DSPy, Semantic Kernel, Pydantic AI et Instructor sont sous licence MIT ; Haystack est Apache-2.0. Tous sont permissifs, sans restriction copyleft, et tous étaient activement développés en septembre 2026.
Conclusion
La question du framework est vraiment une question de périmètre. Chaque projet ici est bien maintenu et sous licence permissive, donc la décision n'est pas de qualité — c'est de savoir combien du flux de contrôle de votre application vous voulez céder.
Cédez beaucoup et vous gagnez de la vitesse jusqu'à une première version qui tourne, des intégrations que vous n'avez pas écrites, et une boucle d'agent à laquelle vous n'avez pas eu à penser. Cédez peu et vous gagnez du code que vous pouvez lire, un arbre de dépendances que vous pouvez auditer, et un débogage qui consiste à regarder une requête et une réponse.
L'habitude qui vaut d'être construite : passer d'abord une demi-journée sans framework. Cela vous dit quelle est vraiment la partie difficile de votre problème — et c'est généralement la qualité de récupération, la validité des sorties structurées, ou l'évaluation, dont aucun n'est mieux résolu par un framework général que par une bibliothèque ciblée.
Puis choisissez pour ce problème précis. LlamaIndex pour la récupération, DSPy là où vous pouvez mesurer la qualité, Instructor ou Pydantic AI pour les sorties structurées, LangGraph ou Haystack là où l'état et l'inspectabilité comptent, Semantic Kernel là où la décision de plateforme est déjà prise. Et gardez le coût de sortie en vue, parce que la différence entre une bibliothèque et un framework n'est pas ce qu'elle fait pour vous — c'est combien de votre code doit changer lorsque vous arrêtez de l'utiliser.
