LangChain протык LangGraph: Чаму насправді паказваюць залежнасці пакетаў
Разбір на рэгламентаў залежнасцяў паказвае, што LangGraph ёсьць неабходны элемент LangChain, чыя выбір фрэймворку тады практычна складаецца з трох пакетаў, а не двух.
Дыялогі пра LangChain і LangGraph сталкавацца ўсё частае ў тэхнічных размовах, і стандартны адказ практычна завжды аднаковы: выбіраюць LangChain, калі трэба ланцюгі і вызовы інструментаў, а LangGraph — калі патрэбны агенты з станамі і цикламі. Што гэты адказ не ўсупершце некалькі, але ён стоўіць на прыязначэнні, якое перстанае правдападобным, калі розглядаць усё адносна дэтальней.
Адказ, які ўсё точней, насправе знаходзіцца проста пад вачамі — у самых метаданых пакета.
Што паказвае простая установка
Спробуйце запустыць pip install langchain, а потым пераканацца, што насправе было захаванае на дыску.
langchain-core==1.5.0
langgraph==1.2.9
pydantic==2.7.4
LangGraph автаматычна ўключаецца ў LangChain. Цэта не дапаможны элемент, які можна праігнораваць — гэта неабходная залежнасць. Адзірнуўшы файл manifest для langchain 1.3.14, можна пабачыць, што толькі трыя пакеты зазначаны як строгіяя неабходнасці, і langgraph, які мае быць версіяй з дыапазону 1.2.5 да 1.3.0, таксама ўключаны сярод іх.
Тепер спробуйце адваротна: pip install langgraph. Гэта заваносіць langchain-core разам з сабскпакетамі LangGraph, але сам langchain ніколі не інсталюецца.
Это значыць, што стандартны падход — спрыяванне гэтага рашэння як выбору «альбо-альбо» — описвае ўсё тое, чаго ваш менеджер пакетаў проста не дазволіць вам зрабіць. Інсталляцыя LangChain гарантуе, што LangGraph таксама будзе ўключаны. Адваротная гаранція не існуе.
Тры пакеты, а не два
Большая частка параграфаў пры порэйнаўанні адносяць гэта да двухсторонняй дыяктывы. Насправдзе існуе тры разныя пакеты, і калі вы правильна назвете кожны з іх, большая частка плутання знікне.
langchain-core — это спяльная база для всього іншага. У ём уключаны типы паведамленняў, абстракцыя Runnable, BaseTool і RunnableConfig. І langchain, і langgraph безпасова залежаць ад яго — нічога ў жадным з пакетаў не можа функцыянацыяваць без яго.
langgraph — гэта самы рэальны двухчыннік выканання. Можна яго уявіць як машыну станоў, складзеную з вузлаў, умовных рэшток, спяльнага об’екта стану і падтрымкі пунктаў перапаказвання. Ён прызначаны для обработкі цыклам, што фактычна ёсць сутністю цыклу агента. Апошнія 40,2% сэрвасных файлаў самога LangGraph безпасяродна імпортуе langchain_core, што паказвае, што ён не яўляецца конкуруючай альтэрнатываю LangChain — ён створаны на адной пазылцы з основнымі абстракціямі LangChain.
langchain знаходзіцца вышэй за ўсё гэта як загальны пакет. Ён аб’едначае інтеграціі модэляў, канектары прадаўцоў і зручныя кэйсі для стварэння агентаў на адной пазылцы з двума пакетамі, якія ўжо былі описаны. Гэта тое, што трэба інсталаваць, якщо хочаце, каб ChatOpenAI або ChatAnthropic былі гатовыя да вжывання, без неабходнасці пісаць савой HTTP-кліент з нуля.
Апіляцыя да «лінейным ланцутам протыва графаў з станам» адбіваецца ад старэйшаг падзелу, які больш не існуе ў базе кода. Болей точны спосаб прыказаць гэта сёння: LangGraph — это рантайм, який выконвае фактычную работу, а LangChain — это шар зручнасці, який об’едначае гэты рантайм разам з інтеграцыямі з прадаўцамі.
Праўы выбор, які вы робіце
Калі вы чытка адразу бачыце напрамак залежнасцяў — LangChain распавешчаны на верхнім ярусе над LangGraph, а не наобаку — пытанне, на якое вы насправдзе адпавядаеце, зменшвае свою форму.
Це перестае быць „LangChain чы ЛангГраф?“ і стае такім: чы хочаце вы весь пакет langchain, укладзены ў адной кантэйнеразе, з інтеграцыямі прадаўцаў, ChatOpenAI, адказчыкамі для стварэння агентаў і болей чым 30 дапаможных пакетаў? Чы, можа, воліце будаваць безпасулькі на langchain-core і langgraph, пры чым адмаўляцься ад усіх дапаможных элементаў?
У будзь-якім случае ўсё рабіцца на базе LangGraph. Разлікаецца толькі все інша, што прыўлекаецца ў вашу среду разам з ямі.
Якщо вы ствараеце образ агента для практычнага вжытку, дзе вам патрэбны строго адмежаваныя та лёгкія для аудыту залежнасці, установка langgraph плюс кліента-прадаўцы, які вам насправдэ прыменяецца, дапамагае зменшыць розмер образу. Якщо вы швыта ўтвараеце пратэты і хочаце, каб ChatOpenAI працаваў без ручнага стварэння обгоракі для прадаўцы, команда pip install langchain[openai] дапамагае досягнуць гэтаго з мінімумам налашчанняў.
Є адна деталь, якую варта чытальна пазначыць: langchain-core установляе LangSmith, кліента-трагуванняя для LangChain, як неабходную залежнасць. Ён не будзе адправляць жадных дадзенняў, якщо толькі вы яго не налашыце так. Але якщо вы пераглядаеце, што самэ праўдзейша знаходзіцца ў вашым контэйнере, яго там будзе, незалежна ад таго, чы вы яго увогуле актываўалі.
Чаму выбор мае значэнне не толькі для розмеру установкі
Была адмініструвана контрольная перамоўка между LangGraph 1.2.9 і Pydantic AI 2.13.0 па чатырох задачах, ўсьго 160 прамоўак з викорыстаннем gpt-4o. Оба фрэймварка параджылі з 100% точнасцю. LangGraph працаваў прыблізна на 1,4–1,8 секунды быстрэй за час роботы, і гэта расхожданне было вызвана пераключэнням Pydantic AI з асінхроннага на сінхронны режым, але точнасць у обох была неперакідная.
Тое, што насправды паўтарыла рэзультаты, быў сам модель, а не выбор фрэймварка. Выконанне тых сабе задач з gpt-4o-mini прынесла абсалютную невялічкую — 0 з 20 — па адной задачы, якая выклікалася арытметикай дат, ў тое час як большы модель справіўся з гэтым без проблем.
Корачэй кажучы: выбір между LangChain і LangGraph здарожыць пераважна выборам таго, насколькі з апляваючай экасыстэмы LangChain вы хочаце адключыць да свайго проекту, адколі оба працуюць на однам і тым жа основным двігу. Выбір между LangGraph і Pydantic AI, з іншай боку, означае параболенне двух абсалютна разных бібліятэкаў — і вышэйшыя рэзультаты паказваюць, што пры gpt-4o правільнасць не настаўляе перавагу ні аднаму з іх, хоць разліка ў затрымкі достатня, каб яе было вартая мерыць у вашай сэтапаванні.
Спадзяючыся літаратура
- Што на самай працэ LangChain автаматызуе пасля таго, як вы створылі цикл агента — Паспяшвае, як LangChain, LangGraph і падобныя SDK-ы абгружаюць той самы основны цикл агента, створаны з нуля, і калі паводлежна фрэймворку дапамагае чы робіць шкоду.