Што на самай працо автаматызуе LangChain пасля таго, як вы створылі цикл агента
Пасвячаецца таму, як LangChain, LangGraph і падобныя SDK-ы абгружаюць той самы основны цыкл агента, створаны з нуля, і калі викорыстоўванне фрэймворку дапамагае чы робіць шкоду.
Даўныні вы вяршылі стварэнне цэлага агента з первісных матэрыялаў — цыклу, памяці, інструментаў, падагентоў, хуків — выкарыстоўваючы толькі простае Anthropic SDK. Няма жадных фрэймворкаў.
Самэ гэтая момент — час пагаворыць пра фрэймворкі, таму што зараз адбываецца ўжо калісьці корыстнае: раз вы самі створылі весь механізм, жадны фрэймворк больш ніколі не будзе для вас таёмніцай.
Назвы, якія вы часта чуеце
LangChain. LangGraph. LlamaIndex. CrewAI. AutoGen. The OpenAI Agents SDK.
Кожны з іх мае свою тэрміналогію і свой спосаб пакавання таго, што здаецца адной і той жа основнай задачы. Якщо вы новачак у гэй кантэксте, вялікая колькасць варыянтаў можа здавацца перанасланай.
Є адна ідея, якая расеівае гэтыя плутанні:
Кожны з гэтых фрэймворкаў ў сутнасі ўкладае той самы цыкл, які вы вяршылі раней у гэй серыі.
Гэта праўда, весь секрет. Ні адна з іх не мае скрытай „магіі“. По суты, усе яны выканаюць тую ж самую последовальнасць: адправляюць паведамленні, перагледваюць прычыну зупінкі, запускаюць інструменты, а потым вяртаюць рэзультаты. Це той самы цикл, які вы вяснілі зусім добра.
Уявіце сабе гэта як гатованне. Калі вы навучыліся готаваць страву з сырых інгредыянтов, вы знаеце кожны крок, можете працаваць з смакам і корэгувацыями падчас гатовання, а якщо ў чымсь не так, вы точна ведаеце, што трэба змяніць. Фреймворк больш супаменеўся наборам для еты — овочы вялікія ўжо нарэзаныя, соус ужо прамішаны, і вам застатквае каля кальколька хвілін, ўсё склаць. Це, звычайна, быстрэй. Але якщо соус выйдзе не такі, у вас няма можлівасці яго парадкаваць, таму што вы ніколі самі яго не гатавалі і не ведаеце, што ў яго было падана.
Гэта сама прыдзея, яку прадстаўляе кожная фрэймворк: вы пасвячаеце частку кантролю за дадатковую шычасць.
Пагляд сваімі вачамі
Давайце паглядзим на той самы агент, які рэалізаваны два разы — аднойчы вручную, аднойчы за дапамогою фрэймворка.
Гэта прыблізна як выглядае ваш агент, калі викорыстоўваць чысты SDK, версію, якую вы тепер цалкам разумеце:
messages = [{"role": "user", "content": user_message}]
while True:
# call the API — this runs again every time the model asks for a tool
response = client.messages.create(
model="claude-sonnet-4-6",
tools=tools,
messages=messages,
) # if the model is done, stop
if response.stop_reason == "end_turn":
break # otherwise it asked for a tool: run it, append the result, loop again
messages.append(response_as_message)
messages.append(tool_result_message)
Гэта саме той цыкл, які быў представлены ранейша ў серыі. Выклік API знаходзіцца внутры while цыклу, таму што ён выконваецца паўтароўна — аднойчы для пачатковай адпаведзі, потым знову пасля кожнага рэзультата ад інструмента — пакуль модель не сигналізуе, што ўсё завершылася.
Тепер паўпоручце гэта з прыблізна тым самым агентам, створаным у LangChain:
from langchain.agents import create_agent
agent = create_agent(model="claude-sonnet-4-6", tools=tools)
result = agent.invoke({"messages": [user_message]})
Пяць ліній заместо трыдзяці. На першы погляд, гэта відаць як явныя палегчэння.
Але зверніце ўвагу, што зникло. Цикл больш ня існуе. Пераканаленне на stop_reason больш ня выконваецца. Ручная обработка паведамленняў больш ня выконваецца. Ніякая з тых логікаў насправды не знікла — яна ўсё ўжо працуе, проста ёй месца ў create_agent, дзе яе вялікай меры не можна пабачыць.
Калі все праходзіць гладка, вы зарабляеце час. Калі ўсё ламаецца, вам даводзіцца раскладваць проблемы процесу, які нельга адразу паглядзець.
Гэта напряженне — гэта сама сутнасць фреймворкаў. Усе інша — толькі деталі, якія дадаюцца зверху.
Што вы насправды робіце проты ўсьго, што робіць фреймворк
Гэта та частка, якая часта застаецца непазнанай. Калі вы вже викорыстоўваеце фреймворк, вы ніколі не паглядзіце безпосередна на stop_reason. Вы ніколі не пераканалеваеце блок tool_use. Вы ніколі не дадаеце ручна tool_result. Вы вообща ніколі не пішаце цикл.
У замене ваша робота складаецца з трох крокаў:
- Запісуйце функцыі вашага інструмента так, як вы бы це зрабілі з чыстым SDK.
- Зарэгіструйце гэтыя функцыі ў агенте за дапамогою кода на кшталт
create_agent(tools=[...]). - Адзін раз вызваце
agent.invoke(...).
Гэта весь процес. Вы під’ўязуеце інструменты і адзін раз запускаеце вызов.
За гэтым адзінам вызывам фреймворк тыхо запускае весь цикл, які вы створылі раней: адправляе поведамленні, пераканальваецца ў прычыне зупінкі, бачыць, што модель патрэбуе інструмента, вызывае вашу функцыю, дадае рэзультат, зноў запускае цикл і павтарае гэты процес, пакуль модель нарэшце не вернёў end_turn. Толькі тады ён дае вам готовую адпаведь.
Такі фрэймворкі не толькі маскуюць сам цикл — яны таксама маскуюць увесь механізм, який забезпечвае працювання вызоваў інструментаў. Людзі, які вивучають агенты, пачынаючы з фрэймворка, нават не будуць ведаць, што існуе прычына зупінкі на кшталт end_turn, чы ўсё ж вызовы інструментаў рэшуюцца за дапамогою павтаральных ітерацый. Для яных усё будзе выглядаць проста так: «Я зарэўнаваў інструмент, і ён быў автаматычна выкарыстоўаны».
Усё гаразд, пакуль вызовы інструментаў працюють правільна. Але калі ў якім-небудзь моменты ўсё пачынае работаць некоректна, вам застаёцца толькі разглядаць «чорную скрынку», бо вы ніколі не бачылі механізма, який працюе пад спудам. У вашым жа случае вы самі створылі гэты механізм, таму вы точна ведаеце, што ў яго ўнутры відбываецца.
LangChain, LangGraph — у чым разлік?
Вы будете часта сталкватыцца з гэтымі назвамі, таму ось кароткая версія.
LangChain — гэта сама праматрыця. Яна забезпечвае відзначэнні інструментаў, з’яўленне звязкаў межы моделямі і функцыю create_agent — той самы спосаб прыховвання ціклу, пра які гаворылася вышэй.
LangGraph — гэта рангавая сістэма выконання, на якой стоіць LangChain. Яе выкарыстоўваюць, калі патрэбна болей тонкая контроль: паўза агента, каб чалавек могаў затвердзіць практыку, коордынацыя логіки розгалужэння межы калькама агентаў, або зберагчэнне стану, каб сервер пасля зламу могаў продыржыць ад таго самага месца.
Простая ментальная модель: LangChain — гэта быстры, высокарангавы вхідны пункт. LangGraph — гэта тое, каму пераходзяць, калі такога вхіднага пункта недастаткова. З канца 2025 года LangChain быў перабудаваны на базе LangGraph, таму гэтыя два інструмента больш не ёсць конкурэнтамі — гэта два слою адной системы: адны просты, другі моцны.
Якщо вы толькі пачаткаеце, вам, верагацельна, яшчо не патрэбны ні тое, ні інше. Чыста SDK, яюю вы вже разумеете, можа дапамогчы вам працаваць на здивлююча высокі рэвалюцыі.
Калі фреймворк дапамагае
Фрэймворкі самі па сабе не ўтвараюць пастку. У дзякучыні некалькім супакойствам вжыванне фрэймворка ёсць справды правым рашэнням.
Вам патрэбны готовыя інтеграціі. Падазроўваеце, ваш агент павінен запрашаць даны з хранілішча вектарных дадзеных Pinecone і запрашаць дакументы з Google Drive. Самостайна напісанне обох канектараў у чыстай SDK ёсць можлівым, але трохі трудоемкім. LangChain прыносіць іх уже створанымі — вам проста трэба іх імпортаваць і падключыць. Гэта справжня еканамія часу.
Вы ствараеце пратэты пад канечным термінам. Ваш менеджар хочаць працуючы дэман завтра ранком. У такі момент внутрашняя структура ўжо не мае значэння — вам проста патрэбна што-небудзь функцыональнае якомога шыбкая. Пяці-радковая настройка можа дапамогчы вам досягнуць ціялі ўжо сёння вечарам.
Вам патрэбна архітектура, яка ўскладнена для стварэння. Уявіце агента, які на момент выпання задачы зупіняецца, чакае, пакуль хтось нажме кнопку „Затвердзіць“, перш чым адправіць платеж, а потым працюе далей там, дзе зупініўся — нават пасля перезапуску сервера. Дзеякі фрэймворкі з’ядруюць такую можнасць без дадатковых налаштаванняў. Їх стварэнне з нуля ёсць значным інжынерным завданням.
Калі фрэймворк стае на перакананні
Дэбаггаванне стае складным. Уявіце, калі ваш агент часам вяртае порожню адпаведь, і вы не можете з’ясаваць прычыну. У кодзе, які вы самі напісалі, вы проста дадасте заповедзь на выведанне данных, праследаваеце цикл і за калькі хвілі знайдзеце проблему. У фрэймворку тая ж сама памылка знаходзіцца гдесь у функцыі create_agent — кодзе, які не належыць вам. Вас вынуджаюць шукаць у кодзе фрэймворка на GitHub, толькі каб зразумець, што робіць ваш сопственны агент.
Абстракцыя начынае выклікаць проблемы. Фрэймворкі оптымацаваны для стандартных ситуацый. Уявіце, што вам патрэбны рэзультаты работы інструмента у нестандартны формат, або політіка павторных спроб, прыстосованая да вашай конкрэтной наладки. Фрэймворк ніколі не прыглядаўся да такога. Тады вам даводзіцца шукаць неканэйсверныя способы, каб прымусіць яго выконваць тое, што 30 ліній вашага сабеўтарэння моглі бы зробіць без працы.
Вы востаннўе вучыцеся пра інструмент, а не пра саму концэпцыю. Праця з фрэймворкамі научае вас „як працуе LangChain“, а не тое, як на самай працоўнае агенты. Потым API LangChain зменяецца — і гэта трапляецца не раз — і вашы знанья за ноч астаюць застарэлымі. Цикл, пра які гаворылася раней у гэтай серыі, не зменіўся з моменту стварэння агентаў, і не плануецца змінювацца.
Правіло, якое варта дапэўніць
Пачніце з самага SDK. Самі створыце цыкл. Так вы точна зразумеете, што робіць ваш агент, і зможаце праследаваць кожны ўздоўж коду, калі ўтворыцца проблема. Для большасці агентоў гэта практычна ўсё, што вам будзе трэба.
Включайце фреймворк толькі тады, калі ён лепш за вас рашае якую-небудзь конкрэтную проблему — гатовая інтеграцыя, стан, які застаецца пасля збою, крокі затверджэння з участю чалавека. Выкорыстоўвайце яго свядома, самэлькі з гэтой прычыны, а не як стандарт.
Не прымнівайцеся да фреймворка толькі каб ухіліцца ад выучэння цыкла. Гэта справжня пастка. Якшто прыхіліцеся да яе, вы атрымаеце «чорную скрынку», пабудаваную на ідеях, якія вы насправдзе не засвоўлі.
Спачатку зразумейце цыкл. Пасля таго фреймворк стане інструментам, які вы выберазеце свядома — а не падпярэнням, на якое спыніцеся, таму што не выучылі основы.
Чаму гэтая серыя стварыла всё з нуля
Гэта самэйша прычына, чаму мы адкладвалі викорыстоўванне фрэймворкаў да гэтага моменту.
Якбы гэтая серыя пачалася з фразы «з’ядзіце LangChain, вызывайте create_agent», у вас быў бы працюючы агент, але без рэальнага разумення яго прыроды. Вы бы не зналі, што такое блок tool_use, чаму рэзультаты паралельных вызоў інструментаў аб’едынаюцца ў адной паведамленні, чаму логіка автарызацыі знаходзіцца ў хуку.
Уж калі гэтыя адміністратыўныя элементы ўжо ў вашай распэшчэ, то слоўнік будь-якага фреймворку можна мгновенна пераклаць. Як бы там не называлі свой „агента“, на самай працэ ўсё робіцца за дапамогою таго ж цыклу. Тое, што называецца „памяцю“, — гэта проста спіс паведамленняў, якія вам вядомы. Тое, што пазначаецца як „інструменты“, адпавядае блокам tool_use, якімі вы керавалі вручную. А тое, што праспамяшваецца як „мідлвэр“, — гэта проста іншая назва для хуків, якія вы самі створылі.
Гэтае і є правильная позыцыя. Не „Я знаю LangChain“ — а „Я розумею, як працуюць агенты, і LangChain — толькі адна з дзеянняў для выражэння гэтага“.
Фреймворкі будуць продовжваць развівацца. Кожныя калькі з’яўляюцца новыя. Але цыкл, які стоіць за ўсім, застаецца незменным. Формуючы своё розуменне, акцэнтавайцеся на тым, што не зменяецца.
Спадневаная літэратура
- Chatbot vs AI Agent: Чаму насправды розлічваюцься чатботы і AI-агенты, кроме LLM — Дазвольце дазнацца, чаму справжняя разліка межа чатботамі і AI-агентамі крыўцяецца ў архітэктуре супакоўкі — інструментах, планаванні і дзеяннях — а не самам LLM.
- Розумеўце AI-агенты: Цялі, інструменты, память і цикл агента — Простае поясненне для пачатківаўцаў, як AI-агенты разлічваюцся ад чатботаў, з урахоўваннем ключовых складовых, циклу прыняцтва рашэння, рагівняў автонаміі і практычных прыкладаў выкарыстання.