Головна / Статті

LangChain проти LangGraph: вибір між ланцюгами та графами зі станом

LangChain забезпечує лінійні ланцюги; LangGraph додає робочі процеси зі станом та гілкуванням. Прості приклади кожного з них та простий спосіб визначити, що потрібно вашому додатку.

Видавець: REACTAPP.TOP5 хв читання1088 слів

Джерела: LangChain vs LangGraph: What’s the Difference?

Якщо ви починаєте працювати з розробкою ШІ, два назви постійно зустрічаються всюди:

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?

Тепер уявімо, що ваш інтелектуальний викладач потребує більше ніж одного проходження завдання.

Замість простого надання відповіді ви хочете, щоб він:

  1. Відповів на запит учня.
  2. Оцінив, чи є ця відповідь справді хорошою.
  3. Якщо вона хороша, зупинився на цьому.
  4. Якщо ні, вніс до неї корективи.
  5. Знову перевірив виправлену відповідь.

Тепер логіка виглядає приблизно так:

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 з’єднує їх та керує потоком.