Retour au blog
IA Native · Comparatif Frameworks · 9 min de lecture

LangChain vs LlamaIndex pour des agents Postgres : lequel choisir

Affane Daylami · Fondateur· 24 août 2026

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é.

L'essentiel
  • 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 moteur Workflows.
  • 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.
#
Vue d’ensemble

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.

#
Connexion base de données

Comment chacun se branche sur Postgres, sans intégration packagée

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.

langchain_sql_agent.py
PYTHON
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import create_sql_agent
from langchain_openai import ChatOpenAI
# Chaîne obtenue depuis Studio → Paramètres → Connexion.
# search_path route vers le schéma du projet (voir doc SQLAlchemy/psycopg pour
# l’encodage exact du paramètre "options" selon le pilote utilisé).
db = SQLDatabase.from_uri(
"postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"
)
llm = ChatOpenAI(model="gpt-4o-mini")
agent = create_sql_agent(llm=llm, db=db, agent_type="tool-calling")
agent.invoke({"input": "Combien de commandes la semaine dernière ?"})

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.

llamaindex_sql_query_engine.py
PYTHON
from sqlalchemy import create_engine
from llama_index.core import SQLDatabase
from llama_index.core.query_engine import NLSQLTableQueryEngine
from llama_index.llms.openai import OpenAI
engine = create_engine(
"postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"
)
sql_database = SQLDatabase(engine, include_tables=["orders", "customers"])
query_engine = NLSQLTableQueryEngine(
sql_database=sql_database, llm=OpenAI(model="gpt-4o-mini"),
)
response = query_engine.query("Combien de commandes la semaine dernière ?")

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.

#
Agents

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 Postgres
#
Retrieval & RAG

Où 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.

Approfondir : construire un pipeline RAG Postgres/pgvector
#
Multi-agents

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 ».

#
Limites

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 Aurabase
#
Comparatif

LangChain, LlamaIndex, CrewAI, AutoGen en un tableau

Objectif principalOrchestration LLM généralisteFramework de données / RAGOrchestration multi-agents par rôlesOrchestration multi-agents conversationnelle
Primitive agentLangGraph (graphe d’état)Workflows (étapes événementielles)Crew / Task / ProcessAssistantAgent / GroupChat
Connexion SQL nativeSQLDatabase + create_sql_agentSQLDatabase + NLSQLTableQueryEngineAucune (outil externe)Aucune (outil externe)
Support pgvectorlangchain-postgres (PGVector)llama-index-vector-stores-postgresAucun natifAucun natif
Multi-agents natifNon (LangGraph multi-nœuds)Non (flux mono-agent)OuiOui
LicenceMITMITMITMIT (projet Microsoft Research)
LANGCHAINLLAMAINDEXCREWAIAUTOGEN
#
Pratique

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.

terminal
BASH
# 1. Récupérer la chaîne de connexion Postgres du projet
# (Studio → Paramètres → Connexion, ou n’importe quel Postgres managé)
export AURA_DB_URL="postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"
# 2. Installer le pilote SQL et le framework choisi
pip install langchain langchain-community langchain-openai psycopg2-binary
# ou, côté LlamaIndex :
pip install llama-index llama-index-llms-openai psycopg2-binary
# 3. Créer un rôle Postgres dédié, lecture seule si l’agent ne doit qu’interroger
CREATE ROLE agent_readonly LOGIN PASSWORD '***';
GRANT SELECT ON ALL TABLES IN SCHEMA project_<id> TO agent_readonly;

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.

#
Décision

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.

#
Questions Fréquentes

FAQ

LangChain et LlamaIndex peuvent-ils modifier des données Postgres (INSERT, UPDATE, DELETE) ?+
Oui, par défaut, si le rôle de base de données utilisé dans la chaîne de connexion a les droits d'écriture. Ni create_sql_agent côté LangChain ni NLSQLTableQueryEngine côté LlamaIndex ne restreignent nativement les requêtes en lecture seule. La vraie garde-fou se pose au niveau de Postgres : un rôle applicatif dédié avec des GRANT limités à SELECT. Voir aussi le guide sur la sécurisation du NL2SQL contre l'injection SQL.
Faut-il choisir entre LangChain et LlamaIndex, ou peut-on les combiner ?+
Les deux peuvent cohabiter dans un même projet : un moteur de requête LlamaIndex peut être exposé comme un outil dans un agent LangGraph, et l’inverse est possible aussi. C’est une option technique réelle, pas une recommandation par défaut : maintenir deux frameworks ajoute une dépendance et une surface de configuration supplémentaires à justifier.
CrewAI ou AutoGen remplacent-ils LangChain et LlamaIndex ?+
Non. CrewAI et AutoGen orchestrent plusieurs agents entre eux (répartition des rôles, dialogue, délégation de tâches) mais ne fournissent pas de couche de connexion aux données. Dans un projet qui interroge Postgres, ils s’appuient sur un outil SQL construit avec LangChain, LlamaIndex, ou une fonction Python maison.
Existe-t-il une intégration officielle Aurabase pour LangChain ou LlamaIndex ?+
Non, à ce jour. Aucun connecteur packagé n’existe côté Aurabase pour ces frameworks. La connexion se fait via la chaîne de connexion Postgres standard exposée par chaque projet, avec un pilote SQL générique (SQLAlchemy), exactement comme pour n’importe quel Postgres managé.
BRANCHER VOTRE AGENT

Un Postgres standard, prêt pour votre stack agent

Créez un projet Aurabase, récupérez la chaîne de connexion Postgres depuis Studio, et branchez LangChain, LlamaIndex ou votre framework agent préféré en quelques minutes.

Créer un compte gratuit Documentation IA native
Aucune carte bancaire requise · 500 MB gratuits · 50 000 MAU