PRODSuwerenna europejska platforma BaaSOtwórz Panel →

Natywna sztuczna inteligencja · 9 min odczytu

LangChain vs LlamaIndex dla agentów Postgres

Affane Daylami · Fondateur · 24 marca 2026

Powrót do bloga

LangChain i LlamaIndex nie odpowiadają na to samo początkowe pytanie. LangChain narodził się jako ogólny zestaw narzędzi do łączenia wywołań z LLM, narzędziami i pamięcią. LlamaIndex narodził się jako framework danych, zaprojektowany w celu połączenia LLM ze źródłami ustrukturyzowanymi lub nieustrukturyzowanymi. Od tego czasu obie strony się połączyły: agenci, połączenia RAG i SQL istnieją dziś po obu stronach. Wybór zależy od architektury, która najlepiej pasuje do Twojego agenta, a nie od możliwości, których brakuje jednej ze stron.

Ten tekst w języku angielskim został wygenerowany automatycznie na podstawie francuskiego oryginału i nie był jeszcze recenzowany.
Ta strona została przetłumaczona automatycznie. Wersja angielska jest miarodajna.

Ten post jest częścią panoramy Native AI firmy Aurabase. Żaden framework nie oferuje własnego łącznika z bazą danych: połączenie z Postgres odbywa się w obu przypadkach poprzez ogólny sterownik SQL (SQLAlchemy po stronie Pythona) i standardowy ciąg połączenia. Dotyczy to Aurabase, jak każdego zarządzanego Postgres.

Najważniejsze
  • LangChain: ogólna struktura orkiestracji LLM (łańcuchy, narzędzia, pamięć). Agencje są obecnie budowane za pośrednictwem LangGraph, a język SQL jest traktowany między innymi jako jeden z zestawów narzędzi.
  • LlamaIndex: struktura danych stworzona dla RAG i odpytująca źródła strukturalne. Natywny silnik SQL (NLSQLTableQueryEngine), agenci za pośrednictwem silnika Workflows.
  • CrewAI i AutoGen nie są alternatywami dla LangChain/LlamaIndex: są to wieloagentowe warstwy orkiestracji, umieszczone na jednej z dwóch (lub wewnętrznej funkcji Pythona).
  • Ani LangChain, ani LlamaIndex nie oferują własnego konektora Postgres: oba korzystają z SQLAlchemy, kompatybilnego z każdym zarządzanym Postgresem, łącznie z Aurabase.
  • Jak dotąd nie istnieje żaden pakiet integracyjny Aurabase dla tych frameworków. Połączenie odbywa się za pośrednictwem standardowego ciągu połączenia Postgres udostępnianego przez każdy projekt.
#
Przegląd

Dwa frameworki stworzone dla różnych potrzeb

LangChain i LlamaIndex pojawiły się w tym samym okresie, po wydaniu ChatGPT pod koniec 2022 roku. Ich punkt wyjścia znacznie się różni. LangChain modeluje aplikację LLM jako łańcuch dających się złożyć kroków: podpowiedź, wywołanie modelu, narzędzie, pamięć, a wszystko to składa się za pomocą wykresu LCEL lub LangGraph.

LlamaIndex pierwsze modele danych: dokumenty, węzły, indeksy, silnik zapytań. VectorStoreIndex lub SQLDatabase to obywatele pierwszej klasy, a nie narzędzia dodane do ogólnego agenta. Obydwa są open source (licencja MIT), dostępne w Pythonie i TypeScript, a dziś obejmują w dużej mierze pokrywający się zakres: agenci, RAG, wywoływanie narzędzi, połączenie SQL.

Ta zbieżność sprawia, że ​​porównanie jest bardziej przydatne w przypadku architektury niż na liście funkcji: oba mogą prawie zrobić to samo. Co się zmienia, to jak.

#
Połączenie z bazą danych

Jak wszyscy podłączają się do Postgres, bez integracji pakietowej

Po stronie LangChain moduł langchain_community.utilities.SQLDatabase zawiera silnik SQLAlchemy. Następnie agent create_sql_agent udostępnia go jako zestaw narzędzi: wyświetla listę tabel, opisuje schemat, wykonuje zapytanie, sprawdza zapytanie przed wykonaniem.

langchain_sql_agent.pypython
from langchain_community.utilities import SQLDatabase
from langchain_community.agent_toolkits import create_sql_agent
from langchain_openai import ChatOpenAI

# Kanał uzyskany ze Studio → Ustawienia → Połączenie.
# search_path trasa do schematu projektu (patrz dokumentacja SQLAlchemy/psycopg dla
# dokładne kodowanie parametru „opcje” w zależności od użytego sterownika).
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 ?"})

Po stronie LlamaIndex równoważną abstrakcją jest llama_index.core.SQLDatabase, również zbudowana na silniku SQLAlchemy. Mechanizm zapytań NLSQLTableQueryEngine tłumaczy pytanie w języku naturalnym na zapytanie SQL, wykonuje je, a następnie ponownie formułuje wynik jako odpowiedź.

llamaindex_sql_query_engine.pypython
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 ?")

Żaden z ekstraktów nie zależy od Aurabase. Wystarczający jest sterownik SQLAlchemy i standardowy ciąg połączenia Postgres, podobnie jak w przypadku Supabase, RDS lub instancji hostowanej samodzielnie.

#
Agenci

LangGraph a przepływy pracy: dwa sposoby koordynowania agenta

LangChain jako pierwszy zaproponował klasyczną pętlę agenta (AgentExecutor, wzorzec ReAct). Od tego czasu projekt skupił swoich agentów w kierunku LangGraph: agent jest tam reprezentowany jako wyraźny wykres węzłów i krawędzi, z punktami kontrolnymi i możliwą interwencją człowieka pomiędzy dwoma etapami.

LlamaIndex odpowiada swoim Workflows: orkiestracją sterowaną zdarzeniami, w której każdy krok emituje i zużywa wpisane zdarzenia. Silnik zapytań SQL lub wektorowych podłącza się bezpośrednio jako krok, bez dodatkowej warstwy adaptacyjnej, ponieważ te silniki są już natywnymi prymitywami frameworka.

W przypadku agenta wysyłającego zapytania do Postgres praktyczna różnica jest następująca: LangGraph zapewnia precyzyjną kontrolę nad gałęziami i ponownymi próbami wywołania SQL. LlamaIndex wymaga mniej kodu łączącego, gdy pytanie dotyczy najpierw danych już zaindeksowanych przez platformę.

Wejdź głębiej: poradnik wywoływania funkcji dla agenta Postgres

#
Odzyskiwanie i RAG

Gdzie LlamaIndex pozostaje historycznym krokiem do przodu

LlamaIndex został od początku zaprojektowany, aby połączyć LLM ze źródłami danych, z katalogiem łączników (LlamaHub) i specjalistycznymi indeksami w zależności od rodzaju treści. RAG pozostaje najbardziej bezpośrednim przypadkiem użycia frameworka, a nie funkcją dodaną po fakcie.

LangChain zaspokaja tę samą potrzebę poprzez swoje retrievers i łańcuchy pobierania, z równie dojrzałą integracją z ekosystemem LangGraph. Różnica polega mniej na pojemności, niż na tym, gdzie leży logika biznesowa: zintegrowana z indeksem po stronie LlamaIndex, jawnie połączona w łańcuch po stronie LangChain.

Obaj wiedzą, jak używać pgvector jako bazy wektora: llama-index-vector-stores-postgres po stronie LlamaIndex, klasa PGVector pakietu langchain-postgres po stronie LangChain. W projekcie Aurabase pgvector 0.8.6 jest już obecny w obrazie dzierżawy Postgres: oba pakiety łączą się z nim za pomocą tych samych parametrów połączenia, bez osobnego etapu aktywacji.

Kop głębiej: budowanie rurociągu RAG Postgres/pgvector

#
Wielu agentów

CrewAI i AutoGen: gdy pojedynczy agent już nie wystarcza

CrewAI organizuje kilku agentów na rolę: każdy agent otrzymuje cel, kontekst (backstory) i narzędzia pogrupowane w Crew z Task wykonywanym sekwencyjnie lub według hierarchii. Jest to pełnoprawna platforma orkiestracji, a nie rozszerzenie LangChain.

AutoGen, projekt badawczy firmy Microsoft, przyjmuje inne podejście: agenci, którzy komunikują się ze sobą (AssistantAgent, UserProxyAgent, GroupChat), z możliwością wykonywania kodu w izolowanym środowisku. Koordynacja wygląda jak rozmowa, a nie wyraźny wykres stanu, taki jak LangGraph.

Żadna z nich nie zastępuje warstwy połączenia danych. Agent CrewAI lub AutoGen, który musi czytać wywołania Postgres, w praktyce narzędzie SQL zbudowane z LangChain lub LlamaIndex lub prosta funkcja Pythona wokół psycopg2. CrewAI i AutoGen odpowiadają na pytanie „kto co i w jakiej kolejności robi”, a nie „jak czytać bazę danych”.

#
Limity

Czego żadne z nich nie robi natywnie w bazie danych Postgres

create_sql_agent i NLSQLTableQueryEngine wykonują zapytanie wygenerowane przez model na podstawie dostarczonego połączenia. Ani nie ogranicza domyślnie liczby zwracanych wierszy, ani nie blokuje żądania zapisu: rzeczywistą poręczą jest rola Postgres używana w ciągu połączenia, a nie opcja struktury.

Jest to strukturalna różnica w stosunku do natywnego języka NL2SQL Aurabase, który tłumaczy pytanie na SQL po stronie serwera, sprawdza wygenerowane zapytanie (parsowanie SQL, odrzucanie sfałszowanych pól serwera) i ogranicza LIMIT przed wykonaniem. To nie ta sama cegła: punkt końcowy NL2SQL odpowiada w jednej turze, z barierkami zainstalowanymi na platformie; a agent LangChain lub LlamaIndex uzasadnia w kilku etapach, z zabezpieczeniem samodzielnego montażu.

W praktyce te dwa podejścia raczej się uzupełniają niż wykluczają: ograniczony punkt końcowy NL2SQL dla prostego pytania kierowanego do użytkownika końcowego, agent do wieloetapowego wnioskowania, który łączy w sobie kilka narzędzi wykraczających poza SQL.

Zobacz też: Samouczek NL2SQL na temat Postgres z Aurabase

#
Porównanie

LangChain, LlamaIndex, CrewAI, AutoGen w jednej tabeli

Główny celOgólna orkiestracja LLMRamy danych / RAGOrkiestracja wieloagentowa według rólKonwersacyjna orkiestracja wieloagentowa
Prymitywny agentLangGraph (wykres stanu)Przepływy pracy (kroki zdarzenia)Załoga / Zadanie / ProcesAsystentAgent / Czat grupowy
Natywne połączenie SQLBaza danych SQL + utwórz_sql_agentBaza danych SQL + NLSQLTableQueryEngineBrak (narzędzie zewnętrzne)Brak (narzędzie zewnętrzne)
obsługa pgvectoralangchain-postgres (PGVector)sklepy z lamą-index-vector-postgresŻaden rodzimyŻaden rodzimy
Natywny multiagentNie (wielowęzłowy LangGraph)Nie (przepływ jednego agenta)TakTak
LicencjaMITMITMITMIT (projekt badawczy Microsoftu)
ŁAŃCUCH JĘZYKALLAMAINDEXCREWAIAUTOGEN
#
Praktyczny

Podłącz LangChain lub LlamaIndex do standardowego backendu Postgres

Wystarczą trzy kroki, niezależnie od wybranego frameworka i nie są one zależne od żadnego konektora specyficznego dla platformy.

terminalbash
# 1. Pobierz parametry połączenia Postgres projektu
#    (Studio → Ustawienia → Połączenie lub dowolny zarządzany Postgres)
export AURA_DB_URL="postgresql+psycopg2://aura:***@<host>:5432/aura_db_master?options=-csearch_path%3Dproject_<id>"

# 2. Zainstaluj sterownik SQL i wybrany framework
pip install langchain langchain-community langchain-openai psycopg2-binary
# lub po stronie LlamaIndex:
pip install llama-index llama-index-llms-openai psycopg2-binary

# 3. Utwórz dedykowaną rolę Postgres, tylko do odczytu, jeśli agent powinien tylko odpytywać
CREATE ROLE agent_readonly LOGIN PASSWORD '***';
GRANT SELECT ON ALL TABLES IN SCHEMA project_<id> TO agent_readonly;

Trzeci krok ma większe znaczenie niż wybór ram. Rola Postgres ograniczona do naprawdę niezbędnych praw pozostaje jedynym niezawodnym zabezpieczeniem przed wygenerowanym żądaniem przekraczającym jego zakres, niezależnie od agenta go wykonującego. Zobacz dokumentację AI, aby zapoznać się z konfiguracją natywnych dostawców LLM Aurabase (OpenAI, Anthropic, Gemini), których można używać po stronie agenta.

#
Decyzja

Który wybrać według swojego projektu

Żadna struktura nie jest ściśle lepsza dla agenta połączonego z Postgres. Kontekst początkowy projektu jest bardziej decydujący niż lista funkcjonalności.

  • LangChain: jeśli agent musi połączyć kilka heterogenicznych narzędzi (SQL, zewnętrzne API, wyszukiwarka internetowa) z precyzyjną kontrolą przepływu za pośrednictwem LangGraph i jeśli zespół ceni najszerszy ekosystem integracyjny na rynku.
  • LlamaIndex: jeśli sercem projektu jest RAG lub wykonywanie zapytań dotyczących już zindeksowanych danych, przy silnym zapotrzebowaniu na łączniki źródłowe i model indeksu/zapytania, który pasuje bezpośrednio do przypadku użycia.
  • CrewAI lub AutoGen dodatkowo: gdy pojedynczy agent już nie wystarczy i praca musi zostać rozdzielona pomiędzy kilka wyspecjalizowanych ról, powyżej jednego lub drugiego z dwóch frameworków danych.

Obydwa mogą również współistnieć w tym samym projekcie: silnik zapytań LlamaIndex udostępniony jako narzędzie w agencie LangGraph jest powszechnym wzorcem. Utrzymanie dwóch frameworków wiąże się z prawdziwym kosztem złożoności, który należy porównać z korzyściami przed domyślnym przyjęciem.

#
Często zadawane pytania

Często zadawane pytania

Czy LangChain i LlamaIndex mogą modyfikować dane Postgres (INSERT, UPDATE, DELETE)?+
Tak, domyślnie, jeśli rola bazy danych używana w parametrach połączenia ma uprawnienia do zapisu. Ani create_sql_agent po stronie LangChain, ani NLSQLTableQueryEngine po stronie LlamaIndex natywnie nie ograniczają zapytań tylko do odczytu. Prawdziwe zabezpieczenie pojawia się na poziomie Postgres: dedykowana rola aplikacji z GRANTAMI ograniczonymi do SELECT. Zobacz także przewodnik dotyczący zabezpieczania NL2SQL przed iniekcją SQL.
Czy wybrać pomiędzy LangChain i LlamaIndex, czy można je połączyć?+
Obydwa mogą współistnieć w tym samym projekcie: silnik zapytań LlamaIndex można udostępnić jako narzędzie w agencie LangGraph, ale możliwa jest również sytuacja odwrotna. Jest to prawdziwa opcja techniczna, a nie domyślna rekomendacja: utrzymanie dwóch frameworków dodaje dodatkową zależność i powierzchnię konfiguracyjną, którą należy uzasadnić.
Czy CrewAI lub AutoGen zastępują LangChain i LlamaIndex?+
Nie. CrewAI i AutoGen koordynują między sobą kilku agentów (podział ról, dialog, delegowanie zadań), ale nie zapewniają warstwy połączenia danych. W projekcie, który wysyła zapytanie do Postgres, polegają na narzędziu SQL zbudowanym z LangChain, LlamaIndex lub domowej roboty funkcji Pythona.
Czy istnieje oficjalna integracja Aurabase z LangChain lub LlamaIndex?+
Nie, do tej pory. Po stronie Aurabase nie istnieje żadne gotowe złącze dla tych frameworków. Połączenie jest nawiązywane za pomocą standardowego ciągu połączenia Postgres udostępnianego przez każdy projekt, z ogólnym sterownikiem SQL (SQLAlchemy), dokładnie tak, jak w przypadku każdego zarządzanego Postgres.

GOTOWY DO WDROŻENIA?

Twój backend w pięć minut.

Karta kredytowa nie jest wymagana · 500 MB za darmo · 50 000 MAU