Галоўная / Артыкулы

LangChain протык LangGraph: Выбір между ланцюгамі та графамі з станамі

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

Выдавец: REACTAPP.TOP5 хв чытання1088 слоў

Крыніцы: LangChain vs LangGraph: What’s the Difference?

Якща вы пачаткаеце ў розрабоце ШІ, два назвы сталківаюцца з вамі практычна ў всім:

LangChain і LangGraph.

На першы погляд можа здавацца, што яны можна заменіць адным. Чы ўсё ж яны — гэта та самая адна засоба? Чы трэба вучыцца і таму, і іншаму? І як выбраць тое, што падходзіць вашам проекту?

Разберёмся на простым прыкладзе.

Што такое LangChain?

Уявіце LangChain як набор засобаў для стварэння аплікацый на базе ШІ.

У ёму є готовыя элементы, якія дазволяюць працаваць з LLM-амі та праўяць іх да іншых ресурсоў, такіх як:

  • Prompts
  • LLMs
  • Засобы
  • 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 → Адпаведзь

Такі просты пайплайн — гэта самэ тое, у чаму LangChain выказвае сябе адзінакова.

Што такое 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 супляўае адзінаковыя складовыя, з якіх вы складаеце прыемнік AI.

Напрыклад:

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
    

    Самэўсёлкаванае, станообразнае падзея ёсць самэй там, дзе ЛангГраф выказвае сваія перавагі.

    Найпростейшая аналогія

    Уявіце будову дома.

    ЛангЧейн выступае як ваш інструментарый набор.

    Ён дае вам такія рэчы:

    Цеглы, інструменты, матэрыялы і компаненты.

    ЛангГраф выступае як план будовы.

    Ён визначае последоўнасць:

    Заложыце фундамент → падніміце стэны → дадзіце дах → пераканацеся ў роботе → якщо чагосьці не так, верніцеся і выправіце.

    Корача:

    ЛангЧейн дапамагае вам склadaць этыя элементы.

    LangGraph памагаець вам карманаваць гэтым процесам.

    Заключныя выводы

    У працоўнай супэрвізі LangChain і LangGraph як незалежных інструментаў, адносна точней супрацаваць з імі як з двумя слоямі адной і той жа структуры.

    AI Application
                  ↓
              LangGraph
           (Workflow / Logic)
                  ↓
              LangChain
          (Tools / Components)
                  ↓
                 LLM
    

    Якщо ваша справа простая, LangChain сама паверхне падпірнуць вашыя патрабаванні.

    Калі ваша прыкладна програма выказвае патрабаванні ў трыманні стану, умовнай логіцы, циклах аб складнае поведэнне агента, LangGraph становіць лепшы выбар.

    У багатых системах прыменнення, аднак, этыя два інструмента сумашчаны.

    Правіло, якое варта запамятаць:

    LangChain стварае складовыя. LangGraph спаявае і кантролюее тэкст працы.