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

Навошта доўгатэрміновым агентам абвязка: як Deep Agents кіруе станам і кантэкстам

Навошта агентам доўгіх задач абвязка: як LangChain Deep Agents змагаецца з гніеннем кантэксту праз чатыры апоры, middleware, файлавыя бэкэнды і ізаляваных субагентаў.

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

Крыніцы: The Deep Agents Architecture, Part 1: Understanding the Agent Harness

Самыя простая структура агента складаецца з ціклу вызоваў інструментаў. Мадэль чытае запіт, выбірае інструмент, запускае яго, чытае рэзультат, зноў выбірае і так далей, пакуль не перастане вызываць інструменты. LangChain чыста адзначае меры можлівасцей такой структуры: такія агенты ёсць «паверхневымі», неспроможнымі планаваць і дзеяць над дугімі, складнымі задачамі. Гэта не якаясь спецыфічная прынтка адзінаго фрэймворку. Гэта наследкі таго, што між модэллю і кантэкстам, які толькі расшыроўваецца, не залічваецца нічога.

Лепшы знак таго, што стэля ўструктурная, даецца трыма командамі, якія ніколі не супрацоўвалі. Anthropic дасягла гэтага пад час стварэння Claude Code, OpenAI — праз Deep Research, а Butterfly Effect дасягла гэтага настолькі сільна, што Manus быў перабудаваны чатыры разы. Кожна з іх вылучыла тыя ж чатыры складовыя: інструмент планавання, дэлегаванне задач сабеўпрацоўнікам, доступ да файловай сістэмы і дэталізаваны запіт. Незалежныя зусілі незалежных компаній, якія дасяглі адной і той жа архітэктуры, паказвае, што проблема сама выклікала гэта, а не чыясьць упадак упадку.

Рэальны механізм — заняцец кантэксту

Інтрыгуюча ўтварэнне, што дзейнікі агентаў не функцыонуюць довга праз тое, што заповнюецца вікна кантэксту. Але гэта не ўсё.

Мадэль, якая берэцца за дзяўныя розмовы, прымешчае горша, чым тая ж самая мадэль пад час кораткіх розмов, нават калі большая частка ўсіго прастору для даных застаецца вялікай. Колькасць увагі, якая доступна кожнаму окрэмаму токену, зменшаецца з адным ростам колькасці токенав навакола, і зменшэнне спявазання сігналу да шуму пагаршае якасць выходных даных задоўга да таго, калі прастор запоўніцца. Гэты эфект задокументаваны, а не ўзяты з анекдотаў: мадэлі стабільна гэрш адыходзяць да інформацыі, якая знаходзіцца ў серэдзіне дзяўнага кантэксту, вольбячы токены, якія знаходзяцца бліжэй да пачатку і канца.

Гэта зміняе тое, як можна выправіць сітуацыю. Якбы прычыной была недастатковая ўместнасць, большы прастор для даных мог бы яе вырашыць. Насправды прычына — розбавленне інформацыі: мадэль все ўсё застаецца здатной, але тое, што ёй трэба, заглушаецца всім, што было раней. Гэта проблема гіяены, а не размеру, і дадатковы прастор не дапамагае ў рашэнні гіяенычных проблем.

Праслойка, якую ні LangChain, ні LangGraph не былі створаны для прыкрыць

LangGraph сфокусаваны на стойкай рэалізацыі: контрольныя пункты, стрымінг, людская пераглядка і зберэжэнне дадзейнаў між потамі. Яго практычны аналаг — Temporal, а не іншыя фрэймворкі агентаў. Ён гарантуюе, што агент застанецца працоўны пасля збою, але не кажа ніч пра тое, чы роўна ж агент і далей чыста разумее пасля чатырох гадзін. LangChain знаходзіцца на вышэйшым роўні і з’являе абстракціі: цыкл вызываў інструментаў, структураваны контэнт і проміжныя механізмы для налаштавання. Тым не менш, стандартны цыкл, створаны на адной з гэтых абстракцый, являе сабою той самы просты цыкл, які ўжо быў опісан. Стойкасць і абстракцыя ўсё-такі існуюць і ўпэўненыя ў патрэбе, але жадна з іх не адпавядае на пытанне, чы застаецца рабочы кантэкст модэлю чыстым.

Гэта можна парадыктуваць па тым, як падключэныя элементы. Указаныя залежнасці Deep Agents — гэта langchain, langchain-core, langchain-anthropic, langchain-google-genai і langsmith. LangGraph не ў гэтым спіску. Ён прыключаецца толькі таму, што LangChain залежыць ад яго. Структура ўскладнена: Deep Agents знаходзіцца на LangChain, які знаходзіцца на LangGraph, а не тры абсалютна незалежныя часткі, якія былі бы з’едынены. Ні на рэвэлайнтайме, ні на роўні фрэймворку ніколі не было кантролю над чыстасцю кантэксту, адтуды што слой, які мяў бы за мету гэты кантроль, знаходзіцца вышэй за оба іх.

Тэза: проблема стану, а не проблема разумовага мышлення

Складная праца, для аднаго адзінаковага і чыста апісанага класу складнасці, ёсць проблемай кантролю стану, а не проблемай разумовага мышлення.

Існуе просты спосаб разбірацца, якага роду проблема ў заведзенні. Уявіце кваліфікаванага колегу, які ўтрачае весь спамяцеўкі кожныя дзесяць хвілін. Калі такі колега не справіцца з заведзеннем, то проблема была пов’язана з памяцю, і нотаткі, дэлегаванне задач і арганізацыя, створаная з урахоўваннем втраты памяці, дапаможуць яе рашыць. А калі чалавек, які весь час трэсціў усю проблему ў галаве, все равно будзе мятасца, нотаткі нічага не дапаможуць, адколі складнасць была ў самым мысленні.

Кожны механізм, які дадзеяўка даўае – будзь то сістэма файлавання для пераказвання навантажэння, падагенты для ізоляціі чы рэчынкавальны інструмент для назірання за працэю – разглядае прыклад амнэзіі. Жадны з іх не робіць жадны крок рэчынкавання розумнейшым. Таму кантроль стану не ўзаемна выклікаецца з рэчынкаванням. Гэта ўсходнік, які дазволяе рэчынкаванню развівацца па шмат крокаў і не перазначвацца пасля кожнага з іх. Модэль, якая правільна рэчынкуе на кожны крок, все рава можа зазнаць няўспэх у заданні з двухсот крокаў, калі 150-й крок не можа бачыць, што было адлучана на 12-му кроцы. Рэчынкаванне не было некорэктным. У яго проста не было цэласообразнасі, якая могла бы служыць для працы.

Этая адміністрацыя сама па сабе недастатня, і адказанне, што яна такая, павялічыць слабасці рэшты аргументацыі. Продовжэнне вікорыстання неефектывнай стратэгіі, калі правы, повны історычны факт знаходзіцца на відкрытым візуальным спагляданні, ўособліва ўскладнюе логічныя міркування, а бездоганна адміністрацыя стану не можа гэта выправіць. Таксама, мадэль, якая сваім пераказам падзеяў адхіляецца ад таго, што на самай працэ выйшло, мае проблемы з логікай, нават калі аслівныя запісы застаюцца цэлымі і доступнымі. Справедлівая версія тэзы выглядае так: для тых неудач, якія мае на меце сістэма керавання, тыя, якія паслабляюцца праз тое, што перазістаюць у часе паляглага кантэксту, адміністрацыя стану ёсць галоўным засобам, тады як якасць логічных міркуванняў — гэта складнейшы аспект, да якога каркас не можа дасягнуць. У наступных раздзелах практычна показана, што створылі тры команды, каб выкорыстаць гэты засоб.

Чатыры столпы з багатым складам

Што такое Deep Agents

Deep Agents выдаваемы як пакет на Python з адкрытым кодам пад ліцэнсам MIT, інсталюецца за дапамою pip, наразы версія 0.7.5. Апошы ў яго склад входзіць версія на TypeScript, тэрмінальны CLI пад назвай deepagents-code і хоставаная, кераваная версія, якая яшчэ находзіцца ў прыватнай бэта-версіі. Ён не ўзаемадзейнічае з LangChain і LangGraph. Як відзначалася раней, ён безпасова залежыць ад LangChain і толькі праз яго падключаецца да LangGraph. Выклік функцыі create_deep_agent() прыводзіць да вызову функцыі create_agent() з LangChain, якая стварае граф LangGraph, таму будзь-яя стойкасць агента падтрымвалася за рахунак таго, што перадае LangChain.

Чатыры основныя элементы і стак, які яны падтрымваюць

Паўтараючы словы LangChain, чатыры элементы робяць агента «глыбокім»: інструмент планавання, дэлегаванне задач сабагентам, доступ да файлавой сістэмы і дэталізаваны запрос. Гаррысан Чэйс запропанаваў такую класыфікацыю, пазначыўшы аднаковыя элементы ў Claude Code, Deep Research і Manus. Як ментальная мадэль яна добра працуе, адтолькі што гэтыя чатыры катэгорыі дзе-нейкі чынна відзначаюць разлік межаў межу мелкага цыклу і агента, які можа завершыць дзялёную задачу.

Чатыры быў толькі пачатковым апісам, а не заканчоўным планам. Функцыя create_deep_agent() складае кожную з можнасцей з большага і ўсё расшыроўванага набора мідлвэра, які можна свабодна сумешчаць. У гэтым спіску ўключаюцца файлы, падагенты, стварэнне падсумка, карэкцыя вызоў інструментаў, разныя варыянты кэшавання запытоў, прыязначаныя конкрэтным прадаўцам, памяць, навыкі і пацэнтаванне людзей, а таксама будзь-які спецыяльны шар, які піша распрацоўшчык. Назвы эйхэнав вказываюць, што можа робіць агент. Стак мідлвэра — гэта спосаб, якім насправды ствараюцца гэтыя можнасці, і ён постаўляе змяніцца.

Структурна ўмова выканання вымагае наявнасці толькі двух частак стака, і гэта мае большое значэнне, чым любая колькасць. FilesystemMiddleware неабходны, таму што ён рэалізуе правіла дазволаў, якія контролююць доступ да файлаў, што ў коментары да коду называецца гарантыяй безпекі. SubAgentMiddleware неабходны, таму што яго вікорыстоўвае інструмент task. Калі адну з іх не выключыць, выйдзе адказ пра адказ, і працэс не будзе працаваць без проблем. Усе іншае ёсць неабавязковым і сумачваецца толькі за запітам.

Кожны, хто зараз працуе з гэтым, должны ведаць, што два з пачатковых чатырох катагорыяў сталі необавязковымі. Пачынаючы з версіі v0.7.0, інструмент планавання (write_todos) не ўключаецца ў стандартны набор, а базавы запіт сістэмы поставляецца празоў, як зазначаецца у адпаведным уведамленні. Кожны з гэтых элементаў можна восстановіць за дапамогою адной лініі налаштавання. Просты вызов create_deep_agent() негайна дае доступ да файлаў і можлівасць дэлегавання задач сабеянтам, а планаванне і дэталізаваны запіт выдаюцца толькі за запітам.

Профілі выкарыстоўвання, шар налаштавання, якога няма ў новейшых мадэлях

Пад мідлвэрам знаходзіцца адзінэцкі механізм налагоджэння, які называецца профілем harness. Профіль дадзеўвае дадатковы тэкст для падтрымкі сістэмы і адключае певныя інструменты, выбраныя на адповіднае значэнне строкі модэлю, якая перэдаецца агенту. Не плутаць яго з ProviderProfile, які керуе спосабам стварэння об’екта модэлю. HarnessProfile формуе ўзор адказа пасля яго стварэння.

Для абсалютнага пошуку неабяжна точная зарэгістраваная клучовая значэнне provider:model; калі яе няма, як альтэрнатыўна выкорыстоўваецца запісь для всіх прадаўцоў. За замовчаннем існуюць прафілі для семьі Codex ад OpenAI і для трох паколенняў Claude: Haiku 4.5, Sonnet 4.6 і Opus 4.7. Прафіль Sonnet 4.6 — гэта не проста загальныя практычныя парады; ён настолькі строго следуе публікаваным рэкамендацыям самай компаніі Anthropic, што пра гэта ясна сказана ў коментарах да коду. Кроме таго, ў яму навмысна не паведамляюцца паведамленні, спрамованыя да прадаўцоў Opus, пра надмерную актыўнасць і частае выкарыстоўванне падагентаў, якія былі аднаковыя для Sonnet.

Модэль, выпускаемая на адзенцію пасля зарэгістраваных, не отрымае нічога. Калі пераглядаць ў рашэрабары, claude-sonnet-5, anthropic:claude-sonnet-5 і проста anthropic кожны з яных не вяртае жаднага профілю. Без точнага падтрымкі, а таксама без загальнага для всіх прадаўцоў элемента Anthropic, на які можна было б паспэўнуцца (існуюць толькі профілі, прыкрэпленыя да конкрэтных выпускаў), нічога не падходзіць. Такія невыпадкі застаюцца абсалютна непазначальнымі. За інструкцыямі самага рашэрабара, ўсё, што залічваецца як лог, — гэта прыметка для дыбаггінгу, якая выдаецца, калі вікорыстоўваецца альтэрнатыўны варыянт на рэвэлі прадаўцы. Калі оба пошуку не ўспэшныя, лог узагалі не запісваецца.

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

Як гэта працюе

Адна абстракцыя пад усім

Весь гэты мідлвэр спакоюецца на адны механізм, які належыць LangChain, а не Deep Agents. LangChain 1.0 дадаў можлівасць запускаць код калі пачынаецца або заканчваецца выконанне, да і пасля кожнага вызову модэлю, а таксама пасля кожнага вызову інструмента, што дазволяе аднаму агенту з петлёй падтрымляць абсалютна разныя дызайны. Функцыі before-hooks запускаюцца ў тым парадку, якім яны былі зарэгістраваны, а after-hooks — у працоўным напраму, што адпавядае спосабу, якім веб-фрэймворкі структуруюць свой мідлвэр. Функцыя wrapping hook можа перапрыцягнуць вызов, выдаць яго з кэша або цэлкам перэхапіць яго. Настройкі supervisor, свармы, петлі рэфлексіі і deep agents усе ў сукупнасці ёсць адной петлёй з рознымі прыўязанымі функціямі, а create_deep_agent() — проста адны з можлівых варыянтаванняў іх выбору.

Файлы: два бэкенды, два гарантаванні

Файлы можу знаходзіцца ў двух месцах, і тое, які з іх актыўны, вплывае на тое, што на самай працэ пісання дадзенняў агентам.

  • StateBackend, які ўжо ўсталяваны як стандарт, зберагае файлы ў канале стану LangGraph: даныя графа з своімі правіламі з’еднання, а не на дыску. Ён працюе толькі пад час працы жывога графа. Тое, чы рэзультаты будуць збераганы пасля адной выкліканні, залежыць ад наявнасці як чэкпойнтара, так і стабільнага ID ніткі. Без іх кожна выкліканні пачынаецца з порожнім станом, што і адказвае на тое, чаму простае выкліканне create_deep_agent() завжды паказвае порожню рабочую дырэку.
  • FilesystemBackend адмініструе рэальныя чытанні і запісі на дыску, што прыносіць як можлівасць стойкага зберагчыка дадзеных, так і рэальную апяшчанасць. У яго опісе чытна згадка пра тое, што ён падходзіць для локальнага развіцця і працэсаў CI/CD, але не падходзіць для таго, што ўпускаецца ў відносіні з корыстнікамі, адколькі агент можа чытаць все, да чаго можа дасягнуць, укладаючы і секрэты, а яго змяны немагчыма анулюваць. За стандартным налашчэннем virtual_mode=True доступ застаецца ў межах корневага каталога, пераходы па первісным і вырашаным шляхам забараняюцца, а справжнія абсалютныя шляхі скрытыя ад выходных даных агента, тады як месца розташавання корневага каталога не адкрываецца.
  • Адзін сістэма разрэшэння пакрывае і тое, і іншэ. Правілле супарабатвае аперэйш з шаблонам пацыку і аднім з трох варыянтаў: разрэшыць, адмовіць або перарваць. Адчысцэнне ацэнюецца з увагай на правіллі запісу. Рэкурсыўнае адчысцэнне адмовляецца, калі хоць ядно з правілаў адмовы перакрывае ўсё, што знаходзіцца пад цэлью, а не толькі першае правілле, якае падходзіць, таму раннее шырокае разрэшэнне не можа даць права на вычысцэнне чаго-небудзь, што было захішчана пазнейшым, вужэйшым правіллем.

    Падагенты, ізольаваныя за прыметам дызайну

    Да падагентаў прайшоць так сама, як і да будзь-каго інструмента. Калі модэль вызывае task, запускаецца абсалютна самастоятэльны агент, ужоўпынены сваім модэлем, інструментамі і мідлвэрам. Настройкі яго модэля прабіраюць або строку provider:model, або вялікі об’ект модэля, таму размешчэнне падагента на іншым прадаўцы, чым родны, выклікае толькі адну лінію настройкі, а не значныя інжынерныя зусіллі.

    Памяць не пераходзіць автаматычна. У спецыфікацыі падагента няма поля памяці, а логіка, якая перадае правыя, не мае адпаведнага элемента для памяці. Ізольаваны, чысты кантэкст ёсць намеральным, што значыць, што все, што зберагаецца праз памяць родніка, застаецца невідным для падагента, як толькі яму не будзе выдана сае власная асяроддзе для памяці.

    Памяць можа быць зменена, але не ўсёвладна

    Файл памяці, як толькі ён завантажыцца, не падае безпосерэдна ў сістэмны запрос. Ён прыбывае ў блоку з чыста відзначаным пазначэнням, з інструкцыямі, дадзенымі фрэймворкам, якія паведамляюць модэлю, што контэнт ёсць матэрыялам для апылу, які можа быць застарэлым або створаным іншым чалавекам, а не заповедзю, якую трэба выконваць без запытанняў. Гэта адпавядае ніжэйшаму рэвэлю доверы, чым у сістэмнага запросу, і падходзіць да задуманай ролі: гэта тое, што агент чытае і правіць пад час работы, а не правіла, якія раз створыў распрацоўшчык і спадзяецца, што яны будуць маць абсалютную валядзю.

    Дзеянне па кантэкстах

    Стан размовы залежыць ад спецыяльнага рэдуктара пад назвай DeltaChannel, які спраектаваны так, каб запісі пунктавах ростлі лінейна, O(N), па меры адгулі размовы, а не квадратна, O(N²).

    Дзеянне на кантэкстах

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

    Адзін неякісны выкарыстоўванне, многія нашкоды (запіс №694). Калі калькольваныя агенты працуюць паралельна і адзін з іх выклікае асывячэнне, рэшта таксама анулююцца. Аперацыя ў цэлым успевае або не успевае, без можлівасці ізоляціі адзінаго з елементаў. Адчытнае паведамленне датавана студзенем 2026 года, і прычына была выявлена ў ранній версіі, пры чым прычыну проблемы пасля таго не удалося знайсці ні ў кодзе калькольваных агентоў, ні ў слоі выканання інструментаў LangChain. Усё-такі трэба пры планаванні вяртацца да гэтага: спрыяцьвачваць тое, што будзь-якія незалежныя падзаданні могу часткова не успець, пакуль не будзе падтверджана іншая сітуацыя у фактычна выкладзенай версіі.

    Памылкі, які практычнаюцца для няправільнага чытача (#947). Калі інструмент вяртае памылку, мадэль зазвычай должна спробаваць зноў або скоррэкаваць ся. Аднак у дзеяных спостараных працаваннях ён звернуўся безпасова да канечнага корыстніка з тэкстам, які быў прызначаны як внутрашняя карэкцыя, таму чалавек побачыў паведамленне пра памылку, якае ніколі не была прызначана для яго. Калі гэта пераканалі, проблема застаўся нерашанай. У адзінам з аддзельных адчыненняў зазначаецца, што пасля пазнейшага апдэйта фрэймворку певныя асаблівасці інструментоў зупіняюць агента абсалютна, замест таго, каб дасягнуць модэлі як паведамленне, якое можна спробаваць зноў, тады калі пакуі ранейшых версій праходзілі далей праз яе.

    Два старэйшыя абলікавання ў той жа аблака ўжо закрытыя: сабагенты, якія ігнаруюць ліміт рэкурсіі для галоўнага агента (#1698), а таксама перэрывы ў продовжэнні працы пад час ведзення змян і прыняцця рашэнняў пра адхіленне (#554). Корэкцыя ліміту рэкурсіі таксама была перапрацавана ў співваротнасці з установленым кодам. Яны паказваюць, насколькі шыбкая проблемы на гэтым роўні зазвычай рашаюцься, таму яны не ўтвараюць праблемы для змены дызайну.

    Практычныя альтэрнатывы

    Сэгодні існуе тры практычныя варыянты для стварэння агента з далекаю перспектывай: Deep Agents, Claude Agent SDK і OpenAI Agents SDK. Кожны з іх відображае разны выбор ў тым, што контролюець ўчасткова команда і што яна выкладае на зовнішні рынак, і ніхто з іх не ўжо ўсунутая версія іншых.

    Адзін разлік, які частае плутаюць, — гэта разніца между перадачай задання і падзвірнім агентам. Две з трох працоўных стратэгій выкарыстоўваюць адно і тое ж основнае патэрн, да якога незалежна дасягаюць два калектыва. Трэцяя ўособліва разлічны механізм.

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

    Што трэба запамятаць

    Агенты з далекім горызонтом развіцці патрабуюць каркаса, таму што накопічаны кантэкст слабячы ўплывае на сігнал задаўна, перш чым заповнюецца вікно. Глыбокія агенты ствараюць такі каркас на адной чатырых стэпеняў структуры, падтрымваныя зменным наборам проміжных срэдств, з файловай сістэмай, падагентамі і памяцюю, кожны з якіх мае конкрэтныя гарантыі і конкрэтныя праследы. Знанне праследоў, такіх як пропускі ў тыхнявых профілях для новейшых модэляў, памяць, невідомая падагентам, паралельныя апыткі тыпу „усё або нічога“ і бягі прыладоў, якія трапляюцца да корыстнікаў, — гэта тое, што адзначае свядомае вікорыстанне фрэймворку ад даверыя да яго стандартных налашчэнняў.

    Спаднія матэрыялы

  • Managed Deep Agents Beta: Спосаб развертвання агентаў LangChain па прынцыпе каталога — Адзінцы LangChain Managed Deep Agents ператварае папку праекта на хоставаны агент. Чым займаецца кожны файл, як функцыонуе mda deploy, і якія недагадкі ёсць ў версіі Beta, якія трэба ведаць.
  • Стварэнне эфектыўных агентаў AI: Архітэктурныя шаблоны і фрэймворкі — Перагляд архітэктуры агентаў, ад цыклаў з вікорыстоўванням інструментаў, ReAct і рутэраў да памяці, захоўнічных мер, параджэння чалавека і можлівасцяў абзору, а таксама паследоўны спосаб стварэння.