LangChain vs LlamaIndex pour des agents Postgres : lequel choisir
LangChain et LlamaIndex ne répondent pas à la même question de départ. LangChain est né comme une boîte à outils générale pour enchaîner des appels à un LLM, des outils et de la mémoire. LlamaIndex est né comme un framework de données, pensé pour connecter un LLM à des sources structurées ou non structurées. Les deux ont depuis convergé : agents, RAG et connexion SQL existent aujourd'hui des deux côtés. Le choix dépend de l'architecture qui correspond le mieux à votre agent, pas d'une capacité qui manquerait d'un côté.
Ce post fait partie du panorama IA native d'Aurabase. Aucun des deux frameworks ne propose de connecteur propriétaire vers une base de données : la connexion à Postgres passe, dans les deux cas, par un pilote SQL générique (SQLAlchemy côté Python) et une chaîne de connexion standard. C'est vrai pour Aurabase comme pour n'importe quel Postgres géré.
- LangChain : framework généraliste d'orchestration LLM (chaînes, outils, mémoire). Les agents se construisent aujourd'hui via
LangGraph, et SQL est traité comme un toolkit parmi d'autres. - LlamaIndex : framework de données né pour le RAG et l'interrogation de sources structurées. Moteur SQL natif (
NLSQLTableQueryEngine), agents via son moteurWorkflows. - CrewAI et AutoGen ne sont pas des alternatives à LangChain/LlamaIndex : ce sont des couches d'orchestration multi-agents, posées par-dessus l'un des deux (ou une fonction Python maison).
- Ni LangChain ni LlamaIndex ne propose de connecteur Postgres propriétaire : les deux passent par SQLAlchemy, compatible avec n'importe quel Postgres managé, Aurabase inclus.
- Aucune intégration packagée Aurabase n'existe pour ces frameworks à ce jour. La connexion se fait via la chaîne de connexion Postgres standard exposée par chaque projet.
Deux frameworks nés pour des besoins différents
LangChain et LlamaIndex sont apparus la même période, dans le sillage de la sortie de ChatGPT fin 2022. Leur point de départ diffère nettement. LangChain modélise une application LLM comme une chaîne d'étapes composables : prompt, appel modèle, outil, mémoire, le tout assemblé via LCEL ou un graphe LangGraph.
LlamaIndex modélise d'abord des données : documents, nœuds, index, moteur de requête. Un VectorStoreIndex ou un SQLDatabase sont des citoyens de première classe, pas des outils ajoutés à un agent générique. Les deux sont open source (licence MIT), disponibles en Python et en TypeScript, et couvrent aujourd'hui un périmètre qui se recoupe largement : agents, RAG, appel d'outils, connexion SQL.
Cette convergence rend la comparaison plus utile sur l'architecture que sur la liste de fonctionnalités : les deux savent, presque, faire la même chose. Ce qui change, c'est comment.
Côté LangChain, le module langchain_community.utilities.SQLDatabase encapsule un moteur SQLAlchemy. L'agent create_sql_agent l'expose ensuite comme un ensemble d'outils : lister les tables, décrire un schéma, exécuter une requête, vérifier une requête avant exécution.
Côté LlamaIndex, l'abstraction équivalente est llama_index.core.SQLDatabase, elle aussi construite sur un moteur SQLAlchemy. Le moteur de requête NLSQLTableQueryEngine traduit une question en langage naturel vers une requête SQL, l'exécute, puis reformule le résultat en réponse.
Aucun des deux extraits ne dépend d'Aurabase. Un pilote SQLAlchemy et une chaîne de connexion Postgres standard suffisent, exactement comme pour Supabase, RDS, ou une instance auto-hébergée.
LangGraph contre Workflows : deux façons d’orchestrer un agent
LangChain a d'abord proposé une boucle d'agent classique (AgentExecutor, pattern ReAct). Le projet a depuis fait converger ses agents vers LangGraph : un agent y est représenté comme un graphe explicite de nœuds et d'arêtes, avec point de reprise (checkpointing) et intervention humaine possible entre deux étapes.
LlamaIndex répond avec ses Workflows : une orchestration pilotée par événements, où chaque étape émet et consomme des événements typés. Un moteur de requête SQL ou vectoriel s'y branche directement comme une étape, sans couche d'adaptation supplémentaire, puisque ces moteurs sont déjà des primitives natives du framework.
Pour un agent qui interroge Postgres, la différence pratique est celle-ci : LangGraph donne un contrôle fin sur les branchements et les nouvelles tentatives autour d'un appel SQL. LlamaIndex demande moins de code de liaison quand la question porte d'abord sur des données déjà indexées par le framework.
Approfondir : tutoriel function calling pour un agent PostgresOù LlamaIndex garde une longueur d’avance historique
LlamaIndex a été conçu dès l'origine pour connecter un LLM à des sources de données, avec un catalogue de connecteurs (LlamaHub) et des index spécialisés selon le type de contenu. Le RAG reste le cas d'usage le plus direct du framework, pas une fonctionnalité ajoutée après coup.
LangChain couvre le même besoin via ses retrievers et ses chaînes de récupération, avec une intégration tout aussi mature dans l'écosystème LangGraph. La différence tient moins à la capacité qu'à l'endroit où vit la logique métier : intégrée à l'index côté LlamaIndex, assemblée explicitement dans une chaîne côté LangChain.
Les deux savent utiliser pgvector comme base vectorielle : llama-index-vector-stores-postgres côté LlamaIndex, la classe PGVector du paquet langchain-postgres côté LangChain. Sur un projet Aurabase, pgvector 0.8.6 est déjà présent dans l'image Postgres tenant : les deux paquets s'y connectent avec la même chaîne de connexion, sans étape d'activation séparée.
CrewAI et AutoGen : quand un seul agent ne suffit plus
CrewAI orchestre plusieurs agents par rôle : chaque agent reçoit un objectif, un contexte (backstory) et des outils, regroupés en Crew avec des Task exécutées en séquence ou selon une hiérarchie. C'est un framework d'orchestration à part entière, pas une extension de LangChain.
AutoGen, projet de recherche Microsoft, prend une approche différente : des agents qui dialoguent entre eux (AssistantAgent, UserProxyAgent, GroupChat), avec la possibilité d'exécuter du code dans un environnement isolé. La coordination ressemble à une conversation, pas à un graphe d'état explicite comme LangGraph.
Aucun des deux ne remplace la couche de connexion aux données. Un agent CrewAI ou AutoGen qui doit lire Postgres appelle, en pratique, un outil SQL construit avec LangChain ou LlamaIndex, ou une simple fonction Python autour de psycopg2. CrewAI et AutoGen répondent à « qui fait quoi et dans quel ordre », pas à « comment lire la base ».
Ce qu’aucun des deux ne fait nativement sur une base Postgres
create_sql_agent et NLSQLTableQueryEngine exécutent la requête générée par le modèle contre la connexion fournie. Aucun des deux ne borne par défaut le nombre de lignes renvoyées, ni ne bloque une requête d'écriture : la garde-fou réelle est le rôle Postgres utilisé dans la chaîne de connexion, pas une option du framework.
C'est une différence structurelle avec le NL2SQL natif d'Aurabase, qui traduit une question en SQL côté serveur, valide la requête générée (parsing SQL, rejet des champs serveur usurpés) et borne le LIMIT avant exécution. Ce n'est pas la même brique : un endpoint NL2SQL répond en un tour, avec des garde-fous posés par la plateforme ; un agent LangChain ou LlamaIndex raisonne en plusieurs étapes, avec des garde-fous à assembler soi-même.
En pratique, les deux approches se complètent plutôt qu'elles ne s'excluent : un endpoint NL2SQL borné pour une question simple exposée à un utilisateur final, un agent pour un raisonnement multi-étapes qui combine plusieurs outils au-delà de SQL.
Voir aussi : tutoriel NL2SQL sur Postgres avec AurabaseLangChain, LlamaIndex, CrewAI, AutoGen en un tableau
Brancher LangChain ou LlamaIndex sur un backend Postgres standard
Trois étapes suffisent, quel que soit le framework retenu, et elles ne dépendent d'aucun connecteur spécifique à une plateforme.
La troisième étape compte plus que le choix du framework. Un rôle Postgres restreint aux droits réellement nécessaires reste le seul garde-fou fiable contre une requête générée qui dépasse son périmètre, quel que soit l'agent qui l'exécute. Voir la documentation IA pour la configuration des fournisseurs LLM natifs d'Aurabase (OpenAI, Anthropic, Gemini) utilisables côté agent.
Lequel choisir selon votre projet
Aucun des deux frameworks n'est strictement supérieur pour un agent connecté à Postgres. Le contexte de départ du projet tranche davantage que la liste de fonctionnalités.
- LangChain : si l'agent doit combiner plusieurs outils hétérogènes (SQL, API externes, recherche web) avec un contrôle fin du flux via LangGraph, et si l'équipe valorise l'écosystème d'intégrations le plus large du marché.
- LlamaIndex : si le cœur du projet est le RAG ou l'interrogation de données déjà indexées, avec un besoin fort de connecteurs de sources et un modèle d'index/requête qui colle directement au cas d'usage.
- CrewAI ou AutoGen en complément : dès qu'un seul agent ne suffit plus et qu'il faut répartir un travail entre plusieurs rôles spécialisés, au-dessus de l'un ou l'autre des deux frameworks de données.
Les deux peuvent aussi cohabiter dans un même projet : un moteur de requête LlamaIndex exposé comme outil dans un agent LangGraph est un pattern courant. Maintenir deux frameworks a un coût de complexité réel, à mettre en balance avec le gain avant de l'adopter par défaut.
Comment chacun se branche sur Postgres, sans intégration packagée