LangChain kontra LangGraph: Co faktycznie pokazują zależności pakietów
Analiza na poziomie zależności pokazuje, że LangGraph jest niezbędnym elementem LangChain, co sprawia, że wybór frameworku można przedstawić jako trzy pakiety, a nie dwa.
Dyskusje na temat LangChain kontra LangGraph pojawiają się ciągle w rozmowach inżynierskich, a standardowa odpowiedź jest prawie zawsze taka sama: wybierz LangChain, gdy potrzebujesz łańcuchów operacji i wywoływania narzędzi, a LangGraph – gdy potrzebujesz agentów z pamięcią i pętlami. Ta odpowiedź nie jest błędna, ale opiera się na założeniu, które nie sprawdza się po bliższym przyjrzeniu.
Odpowiedź bardziej precyzyjna okazuje się być tuż przed naszymi oczami, w samych metadanych pakietu.
Co ujawnia prosta instalacja
Spróbuj uruchomić pip install langchain, a następnie sprawdź, co faktycznie trafiło na dysk.
langchain-core==1.5.0
langgraph==1.2.9
pydantic==2.7.4
LangGraph jest automatycznie włączany razem z LangChain. Nie jest to opcjonalne dodatek, który można pominąć – to wymagana zależność. Patrząc na manifest wersji langchain 1.3.14, tylko trzy pakiety są wymienione jako ścisłe wymagania, a langgraph, ograniczony do wersji od 1.2.5 do 1.3.0 włącznie, znajduje się wśród nich.
Teraz spróbujmy czegoś odwrotnego: pip install langgraph. Dzięki temu zostanie pobraany langchain-core wraz z własnymi podpakietami LangGraph, ale sam langchain nigdy nie zostanie zainstalowany.
To oznacza, że typowe ujęcie sytuacji – traktowanie tej decyzji jako wyboru albo/tak albo/nie – opisuje coś, czego menedżer pakietów po prostu nie pozwoli ci zrobić. Instalacja LangChain gwarantuje, że LangGraph zostanie włączony razem z nim. Odwrotnej gwarancji nie ma.
Trzy pakiety, a nie dwa
Większość porównań przedstawia to jako decyzję dwukierunkową. W rzeczywistości istnieją trzy odrębne pakiety, a po prawidłowym określeniu ich nazw większość zamieszania znika.
langchain-core to wspólna baza pod wszystkim innym. Zawiera typy wiadomości, abstrakcję Runnable, BaseTool oraz RunnableConfig. Zarówno langchain, jak i langgraph zależą od niego bezpośrednio — nic w żadnym z tych pakietów nie funkcjonuje bez niego.
langgraph to rzeczywisty silnik wykonywania. Można go traktować jako maszynę stanową zbudowaną z węzłów, warunkowych krawędzi, wspólnego obiektu stanu oraz funkcji do tworzenia punktów kontrolnych. Został zaprojektowany tak, aby radzić sobie z cyklami, co w istocie stanowi sedno pętli agenta. Około 40,2% własnych plików źródłowych LangGraph importuje bezpośrednio langchain_core, co pokazuje, że nie jest to konkurencyjna alternatywa dla LangChain – został stworzony na bazie podstawowych abstrakcji LangChain.
langchain znajduje się nad oboma jako pakiet nadrzędny. Zawiera integracje z modelami, łączniki do dostawców oraz udogodnienia umożliwiające budowanie agentów na bazie dwóch opisanych wcześniej pakietów. To właśnie go instaluje się, jeśli chce się mieć ChatOpenAI lub ChatAnthropic gotowe do użycia, bez konieczności pisania własnego klienta HTTP od zera.
Określanie tego jako „łańcuchy liniowe kontra grafy stanowe” odzwierciedla starsze podziały, które już nie istnieją w bazie kodu. Dokładniejszy sposób sformułowania tego dzisiaj brzmi: LangGraph to środowisko wykonawcze, które wykonywa faktyczną pracę, natomiast LangChain to warstwa ułatwiająca, która pakuje to środowisko wraz z integracjami dostawców.
Prawdziwy wybór, który dokonujesz
Gdy już jasno zobaczysz kierunek zależności — LangChain znajduje się na wierzchu LangGraph, a nie odwrotnie — kwestia, na którą faktycznie odpowiadasz, zmienia swój charakter.
Przestaje to być pytanie „LangChain czy LangGraph?”, a staje się: czy chcesz cały ekosystem langchain, włączając integracje z dostawcami, ChatOpenAI, narzędzia do tworzenia agentów oraz ponad 30 dodatkowych pakietów opcjonalnych? Czy wolisz budować bezpośrednio na bazie langchain-core i langgraph, pomijając tę dodatkową warstwę?
W obu przypadkach pod spodem nadal działa LangGraph. Różni się wszystko inne, co jest włączane do twojego środowiska razem z nim.
Jeśli tworzysz obraz agenta do użycia w produkcji, w którym potrzebujesz ściśle określonego i łatwo sprawdzalnego zestawu zależności, zainstalowanie langgraph wraz z klientem danego dostawcy, którego faktycznie potrzebujesz, pozwala uzyskać lżejszą strukturę. Jeśli szybko tworzysz prototyp i chcesz, aby ChatOpenAI działał bez konieczności ręcznego tworzenia otoczki dla dostawcy, polecenie pip install langchain[openai] umożliwi to przy mniejszej liczbie kroków konfiguracyjnych.
Jeden szczegół, który warto wyraźnie podkreślić: langchain-core instaluje LangSmith, klient do śledzenia działań w LangChain, jako wymaganą zależność. Nie będzie on wysyłał żadnych danych, chyba że wyraźnie to skonfigurujesz. Jednak jeśli sprawdzasz dokładnie, co znajduje się w twoim kontenerze, LangSmith tam będzie, niezależnie od tego, czy go włączysz, czy nie.
Dlaczego wybór ma znaczenie poza rozmiarem instalacji
Zdjęto kontrolne porównanie między LangGraph 1.2.9 a Pydantic AI 2.13.0 w czterech zadaniach, łącznie przeprowadzono 160 prób przy użyciu gpt-4o. Obie platformy osiągnęły 100% poprawności. LangGraph był o około 1,4 do 1,8 sekundy szybszy pod względem czasu rzeczywistego, a różnica ta była spowodowana mechanizmem konwersji asynchronicznej na synchroniczną w Pydantic AI, jednak dokładność obu rozwiązań była identyczna.
To, co faktycznie wpłynęło na wyniki, to model używany w tle, a nie wybór platformy. Wykonywanie tych samych zadań z użyciem gpt-4o-mini skończyło się całkowitą porażką – 0 z 20 punktów – w jednym zadaniu dotyczącym arytmetyki dat, co jest przypadkiem granicznym, który większy model obsłużył bez problemów.
Krótko mówiąc: wybór pomiędzy LangChain a LangGraph oznacza głównie decyzję o tym, w jakim stopniu chcesz włączyć otaczający ekosystem LangChain do swojego projektu, ponieważ oba działają na tym samym silniku. Z kolei wybór pomiędzy LangGraph a Pydantic AI oznacza porównanie dwóch zupełnie oddzielnych bibliotek — a powyższe wyniki wskazują, że przy użyciu gpt-4o poprawność nie faworyzuje żadnej z nich, chociaż różnica w opóźnieniach jest na tyle znacząca, by warto ją zmierzyć we własnym środowisku.
Literatura pokrewna
- Co tak naprawdę automatyzuje LangChain po stworzeniu pętli agenta — Wyjaśnia, jak LangChain, LangGraph oraz podobne SDK-y wykorzystują tę samą podstawową pętlę agenta stworzoną od zera oraz kiedy korzystanie z frameworku jest pomocne, a kiedy szkodliwe.