LangChain vs LangGraph — kiedy które, decyzja dla polskiego zespołu
LangChain to dziś wzorzec dla większości tutoriali AI. LangGraph (od tych samych autorów) to nowsza biblioteka skupiona na agentach z grafem stanu. Pokazujemy konkretną decyzję dla polskiego zespołu: kiedy LangChain wystarcza, kiedy LangGraph to konieczność, jakie pułapki obie biblioteki mają.
LangChain i LangGraph to dwie biblioteki od tego samego autora (LangChain Inc.), które często myli się jak narzędzia konkurencyjne. W rzeczywistości to dwa różne poziomy abstrakcji. Polskie zespoły AI często wybierają jedno z drugim na ślepo, co kończy się refactor-em za pół roku. Ten artykuł to praktyczna decyzja: kiedy LangChain wystarczy, kiedy LangGraph jest konieczny.
LangChain — co to dokładnie jest
LangChain to biblioteka komponentów do budowania aplikacji LLM-based: integracje z modelami, parsery output, RAG, memory, prompty. Najlepiej traktować ją jako "stdlib dla AI" — zbiór dobrze przemyślanych klocków. Pisana w Pythonie i JavaScript.
Gdzie LangChain wygrywa
- Szybki prototyp — w 100 linijkach robisz RAG-a.
- Standardowe pipeline-y (load → chunk → embed → store → retrieve → generate).
- Bogaty ekosystem integracji (40+ vector DB, 30+ modeli).
- Community — dużo tutoriali, Stack Overflow, gotowych przykładów.
LangGraph — co to dokładnie jest
LangGraph to biblioteka do budowania agentów z grafem stanu. Każdy agent to graf węzłów (node) i krawędzi (edge). Stan przepływa przez graf, węzły go modyfikują, krawędzie decydują, dokąd dalej. Inspiracja: Pregel z Google, akka actors.
Gdzie LangGraph wygrywa
- Złożone agenty z pętlami, warunkami, gałęziami.
- Multi-agent systems (kilka agentów współpracuje).
- Long-running tasks z checkpointami.
- Human-in-the-loop — pauza, czekanie na akceptację, kontynuacja.
- Pełna kontrola nad stanem.
Decyzja — kiedy które
| Scenariusz | LangChain | LangGraph | Custom |
|---|---|---|---|
| RAG na 1 typie dokumentów | tak | overkill | nie |
| Chatbot prosty | tak | overkill | nie |
| Agent z 2-3 narzędziami | tak (AgentExecutor) | opcja | nie |
| Agent z 8+ narzędziami | za prymitywne | tak | opcja |
| Multi-agent system | nie | tak | jeśli zespół duży |
| Long-running workflow (24h+) | nie | tak | jeśli specyficzne |
| Human approval w środku | trudne | natywne | możliwe |
| Plan-and-Execute pattern | nieprzyjazne | natywne | opcja |
Przykład LangGraph — prosty agent z human-in-the-loop
from langgraph.graph import StateGraph, END
from typing import TypedDict
class State(TypedDict):
query: str
plan: str
approved: bool
result: str
def make_plan(state: State) -> State:
state["plan"] = llm.invoke(f"Plan dla: {state['query']}")
return state
def wait_approval(state: State) -> State:
# Pauza grafu, czekanie na zewn. event
return state
def execute(state: State) -> State:
state["result"] = executor.run(state["plan"])
return state
graph = StateGraph(State)
graph.add_node("plan", make_plan)
graph.add_node("approval", wait_approval)
graph.add_node("exec", execute)
graph.set_entry_point("plan")
graph.add_edge("plan", "approval")
graph.add_conditional_edges("approval",
lambda s: "exec" if s["approved"] else END)
graph.add_edge("exec", END)
app = graph.compile(checkpointer=memory)
Gdzie LangChain (i LangGraph) zawodzą
- Magia abstrakcji — gdy coś nie działa, debug to grzebanie w warstwach.
- Częste breaking changes — wersje 0.x oznaczają niestabilność API.
- Memory bloat — niektóre chains trzymają w pamięci więcej niż trzeba.
- Async w niektórych miejscach kuleje — staraj się trzymać sync albo full async.
- Polski w prompts — domyślne prompty LangChain są angielskie. Override prawie zawsze.
Kiedy custom zamiast LangChain/LangGraph
- Macie senior dev z doświadczeniem AI — szybciej napiszesz 200 linii custom niż uczysz się LangChain.
- Stack nie-Python (PHP, Go) — LangChain JS jest słabszy, lepiej własne.
- Wysokie wymagania performance — direct API call jest 30-50% szybszy.
- Limited scope — jeden konkretny use case, nie growing platform.
Praktyka: 14 wdrożeń RedAI z LangChain/LangGraph
- 6 LangChain — RAG-y, chatboty, proste agenty. Wszystkie produkcyjne, działają.
- 5 LangGraph — multi-agent, plan-and-execute, complex workflows. 4 z 5 udane.
- 3 custom — gdzie LangChain by tylko spowolnił. PHP backend, prosty pipeline w 180 liniach.
Pułapki przy migracji z LangChain do LangGraph
- Chain.run() != Graph.invoke() — model wykonania inny.
- Memory abstraction inna — często trzeba przepisać.
- Tools w LangGraph mają inny shape niż w LangChain AgentExecutor.
- Checkpointers nie są pluginowe — wybierz wcześnie (Postgres, SQLite, MemorySaver).
Rekomendacja dla polskiego zespołu
- Start z LangChain dla MVP RAG-a lub prostego chatbota.
- Migracja do LangGraph gdy: dodajecie 4+ narzędzia, lub gdy workflow ma pętle, lub multi-agent.
- Custom gdy: zespół ma senior AI dev, lub stack nie-Python.
- Niezależnie od wyboru — testy end-to-end od dnia 1, logi promptów, evaluation suite.
Podsumowanie
LangChain i LangGraph to nie konkurenci — to różne poziomy abstrakcji. LangChain dla prostych wzorców, LangGraph dla skomplikowanych agentów, custom gdy potrzebne. Decyzja zależy od scope, zespołu, stack-u. Pomożemy wam wybrać — 1 godzina audytu i mamy rekomendację.
Chcesz przetestować, jak AI rozwiąże to u Ciebie?
30 minut rozmowy + pokaz działającego wdrożenia u klienta. Bez NDA.
Umów demo