LangChain проти LangGraph: вибір між ланцюгами та графами зі станом
LangChain забезпечує лінійні ланцюги; LangGraph додає робочі процеси зі станом та гілкуванням. Прості приклади кожного з них та простий спосіб визначити, що потрібно вашому додатку.
Якщо ви починаєте працювати з розробкою ШІ, два назви постійно зустрічаються всюди:
LangChain та LangGraph.
На перший погляд вони можуть здатися взаємозамінними. Чи це один і той самий інструмент? Чи потрібно вивчати обидва? І як вирішити, який з них підходить для вашого проекту?
Розгляньмо це на простому прикладі.
Що таке LangChain?
LangChain як набір інструментів для створення додатків на основі ШІ.
Він надає готові елементи, які дозволяють працювати з LLM та під’єднувати їх до інших ресурсів, таких як:
- Запити
- LLM
- Інструменти
- API
- Документи
- Векторні бази даних
- Механізми пошуку
Припустимо, ви хочете створити простого викладача на основі ШІ.
Процес може виглядати ось так:
Student Question
↓
Prompt
↓
LLM
↓
Answer
LangChain робить створення такого типу конвеєра досить простим.
Простий приклад LangChain
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
llm = ChatOpenAI(model="gpt-4o-mini")prompt = ChatPromptTemplate.from_messages([
("system", "You are a helpful programming teacher."),
("human", "{question}")
])chain = prompt | llmresponse = chain.invoke({
"question": "What is recursion?"
})print(response.content)
Логіка тут проста та лінійна:
Запит → Підказка → LLM → Відповідь
Саме такий прямолінійний конвеєр — це те, у чому ЛангЧейн досягає найкращих результатів.
Що таке LangGraph?
Тепер уявімо, що ваш інтелектуальний викладач потребує більше ніж одного проходження завдання.
Замість простого надання відповіді ви хочете, щоб він:
- Відповів на запит учня.
- Оцінив, чи є ця відповідь справді хорошою.
- Якщо вона хороша, зупинився на цьому.
- Якщо ні, вніс до неї корективи.
- Знову перевірив виправлену відповідь.
Тепер логіка виглядає приблизно так:
Student Question
↓
Generate Answer
↓
Check Answer
↙ ↘
Good Bad
↓ ↓
Finish Improve
↓
Check Again
Саме для таких сценаріїв і було створено LangGraph.
LangGraph дозволяє створювати робочі процеси, які можуть включати:
- Кілька кроків
- Умовні гілки
- Цикли
- Спільний стан
- Точки прийняття рішень
- Схвалення з участю людини
- Більш різноманітну поведінку агентів
Простий приклад LangGraph
Щоб почати, ви визначаєте стан, який ваше додатку потрібно відстежувати.
from typing import TypedDict
class State(TypedDict):
question: str
answer: str
good: bool
Цей стан відстежує три речі:
question
answer
good
Далі ви створюєте окремі кроки, які називаються вузлами, всередині вашої схеми.
Створити відповідь
def generate_answer(state):
response = llm.invoke(
f"Answer this question simply:\n{state['question']}"
) return {
"answer": response.content
}
Перевірити відповідь
def check_answer(state):
response = llm.invoke(
f"""
Is this answer good? Question:
{state['question']} Answer:
{state['answer']} Reply only YES or NO.
"""
) return {
"good": response.content.strip().upper() == "YES"
}
Далі ви визначаєте функцію прийняття рішень:
def decision(state):
if state["good"]:
return "finish" return "improve"
Важливо те, що саме LangGraph з’єднує ці вузли між собою та вирішує, який вузол буде виконуватися далі.
Якщо перевірка провалюється, граф може повернутися до вузла покращення та знову її виконати.
У чому ж основна різниця?
Найпростіший спосіб сформулювати цю різницю — такий:
LangChain = Блоки будівництва
LangChain надає окремі компоненти, з яких складається додаток ШІ.
Наприклад:
LLM
Prompt
Retriever
Tool
Vector Database
↓
LangChain
LangGraph = Робочий процес
LangGraph керує тим, як ці компоненти взаємодіють та у якому порядку.
Start
↓
Generate
↓
Check
↙ ↘
Good Bad
↓ ↓
Finish Improve
↓
Check
Чи є LangChain та LangGraph конкурентами?
Не зовсім.
Вони розроблені для сумісного використання.
Наприклад:
LangGraph
↓
┌──────────┴──────────┐
↓ ↓
LangChain LangChain
Retriever Tools
↓ ↓
└──────────┬──────────┘
↓
LLM
LangChain надає блоки будівництва та інструменти, тоді як LangGraph організовує більший робочий процес навколо них.
Коли варто використовувати LangChain?
LangChain — це правильний вибір, коли ваше додатку має досить лінійний перебіг.
Типові випадки включають:
- Базовий чат-бот
- Додаток на основі RAG
- Відповіді на запитання з PDF
- Пошук у документах
- Простий додаток на основі LLM
- Виклик простих інструментів
Базовий алгоритм тут може виглядати приблизно так:
User
↓
Retrieve Information
↓
LLM
↓
Answer
Для таких конфігурацій створення повної графової структури зазвичай є надмірним.
Коли варто використовувати LangGraph?
LangGraph знаходить своє застосування тоді, коли ваше додатку потребує логіки розгалужень та прийняття рішень, а не просто фіксованої послідовності кроків.
Це стосується ситуацій, таких як:
- Автономні AI-агенти
- Робочі процеси, що включають кілька кроків
- Системи з кількома взаємодіючими агентами
- Процеси з участю людини
Як приклад, уявіть AI-наставника, структурованого ось так:
Student asks question
↓
Analyze level
↓
Generate explanation
↓
Give quiz
↓
Check answer
↓
Correct?
↙ ↘
YES NO
↓ ↓
Next topic Explain again
Саме у такій розгалуженій, залежній від стану поведінці ЛангГраф демонструє свою перевагу.
Найпростіша аналогія
Уявіть собі будівництво будинку.
LangChain виступає як ваш інструментарій.
Він надає вам таке:
Цеглу, інструменти, матеріали та компоненти.
LangGraph виступає як креслення.
Він визначає послідовність:
Покласти фундамент → підняти стіни → додати дах → перевірити роботу → якщо щось не так, повернутися та виправити це.
Коротко кажучи:
LangChain допомагає вам збирати елементи.
LangGraph допомагає вам керувати цим процесом.
Остаточні висновки
Замість того, щоб розглядати LangChain та LangGraph як незалежні інструменти, точніше буде бачити їх як два рівні однієї і тієї самої системи.
AI Application
↓
LangGraph
(Workflow / Logic)
↓
LangChain
(Tools / Components)
↓
LLM
Якщо ваша ситуація використання проста, один лише LangChain, ймовірно, задовольнить ваші потреби.
Коли ваше застосування вимагає відстеження стану, умовної логіки, циклів чи складної поведінки агента, LangGraph є кращим вибором.
Проте у багатьох продакшн-системах обидва інструменти використовуються разом.
Правило, яке варто запам’ятати:
LangChain створює окремі елементи. LangGraph з’єднує їх та керує потоком.