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

Managed Deep Agents у беце: разгортванне агентаў LangChain з тэчкі праекта

Managed Deep Agents ад LangChain ператварае тэчку праекта ў агента на хостынгу. Што робіць кожны файл, як паводзіць сябе mda deploy і якія прабелы беты варта ведаць.

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

Крыніцы: LangChain Just Shipped Managed Deep Agents — And Your Agent Is Now a Directory

Команды, які працавалі з LangGraph, продовжлівалі сталквацца з тым самым лімітам. LangGraph — гэта асяроддзе выканання, прымітывна на нізкам рэвэлі, але багато людзей ставіліся да яго як да фрэймворка для стварэння прыкладнікаў. Deep Agents стаў адпаведзеннем LangChain: планаванне, вяртуальная файлавая сістэма, падагенты і стысненне кантэксту, аб’еднаныя ў ўсеўключаючую структуру, каб нікому не патрабавалася занова ствараць всю інфраструктуру.

Гэта дапамагало, але з’явіўся другі ліміт. Усеўключаючая структура заканчваецца на межы процэса. Як толькі агенту патрабуецца працаваць пасля перзапуску, продаваць працу пасля таго, як чалавек падтвердзіць вызов інструмента, працаваць з 8 ранку па пнева-пятак, адпавядаць на паведамлення ў Slack або зберагаць які-небудзь мемарыі па за межамы чыннага потока, команда знову змушана ствараць інфраструктуру. Гэта значыць неабходнае вікорыстанне чэкпоінтав, заданняў тыпу cron, пераканання падпісаў, візначэння власніка потока і правільная роутаванне секрэтных дадзенняў.

Кожны, хто прытлумляў агента ў кантэйнер у воблаку, ведае, насколькі гэта можа стаць несбалансаваным. Уявіце сабе документны агента, які працуе на базе MCP у ECS Fargate: правілы IAM, VPC з прыватнымі сабнетамі, стан Terraform у S3 з табліцай блакітавання DynamoDB, а таксама апісаванні задач, якія не праходзяць перакананняў на справнасць, пакуль хтось не з’явіць несувярэннасць у портах кантэйнера. Логіка агента можа стварыць проблемы на калькі дзён, тады як аблікватная інфраструктура — на калькі тыдзён.

Managed Deep Agents — гэта адпаведна рашэння LangChain да гэтага другога ліміту. Ён выйшаў у публічны бета-версіі 7 серпня 2026 года. Пасля прачытання 21 сторонікі дасягненняў, найболей выдатным не ёсць можлівасць развярнуць все за аднам камандам, пра якую пішлі ўсі. Гэта тое, што агент перастае быць об’ектам Python — ён стае каталогам.

Што на самай працэ ёсць гэты продукт

Слова „managed“ ўзнімае неяснасці, таму точная дэфініцыя дапамагае. Managed Deep Agents, якіе запускаюцца як mda у тэрмінале, — гэта пакет на Python. Ён берае папку праекта, компілюе яе у аплікацыю LangGraph, якая розмешчаецца на серверэ, і надае яе на сервер Agent Server LangSmith. Сама структура Deep Agents застаецца незменнай, а LangSmith берае на сябе ўправлінне ўсім: підтрымкай стабільнасці, працай надзвычайных потак, кераваннем жыцёвым цыклам сэндбоксаў, завантажэннем навыкаў і кераваннем памяцюю.

Гэты працэс складаецца з чатырох каманд:

uv tool install managed-deepagents
mda init research-assistant
cd research-assistant
uv sync
mda dev .        # run locally in LangSmith Studio
mda deploy .     # deploy to LangSmith

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

Функцыянал кантролюецца за дапамогою ls

mda init стварае структуру праекта, якую дакументацыя вважае цэлым прасторам дзеяння:

my-agent/
├── agent.py              # required — the model and core config
├── instructions.md       # system prompt, synced to Context Hub
├── skills/
│   └── research/
│       └── SKILL.md      # task-specific playbooks
├── tools/                # your LangChain tools
├── middleware/           # logic around model and tool calls
├── connectors/
│   └── mcp.py            # remote MCP servers
├── channels/
│   └── slack.py          # Slack, GitHub, other entry points
├── schedules/
│   └── daily_digest.py   # managed cron jobs
├── sandbox/
│   └── __init__.py       # isolated filesystem and shell
├── identity.py           # auth and thread scoping
├── memory.py             # durable cross-thread memory
├── pyproject.toml
├── .env
└── evals/                # Harbor tasks

Толькі agent.py ўмовны. Усе іншае ўзначальнае, і гэта самае важлівае: наявнасць файла ўключае або выключае адпаведную можлівасць.

Калі адмахнуць каталог sandbox/, сэндбокс знікне. Якшо падмесці memory.py у корневы каталог, увімкнёцца стойкія памяць. Якшо дадаць schedules/daily_digest.py, падчас наступнага запуску будзе створана задача LangSmith cron; якшо выдаліць файл, задача cron будзе знішчана.

Кожны, хто пісаў на Terraform, впішаеся ў гэты модэль. Гэта дэкларатыўная інфраструктура на сінтаксі Python. Вы опісваеце жаданы стан, а mda deploy прыбліжае рэальнасць да яго.

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

agent.py — ўмовны файл

from managed_deepagents import define_deep_agent
from middleware.audit import log_tool_calls
from tools.search import internet_search

agent = define_deep_agent(
    name="research-assistant",
    model="openai:gpt-5.5",
    tools=[internet_search],
    middleware=[log_tool_calls],
    interrupt_on={"internet_search": True},
)

name — гэта ўсё, што ўмовна неабходна, і ён служыць як ID асістэнта LangGraph, так і стандартным назвам развертання. Крым таго, функцыя define_deep_agent прыймае параметры tools, middleware, subagents, permissions, interrupt_on (для затверджэння чалавекам) і response_format (структураваны выхід).

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

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

tools=[{"type": "web_search"}]                                # OpenAI
tools=[{"google_search": {}}]                                 # Google
tools=[{"type": "web_search_20260209", "name": "web_search"}] # Anthropic

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

instructions.md і skills/

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

# Research assistant

You are a careful research assistant. Use internet search to find sources,
keep notes, and return concise answers with citations.

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

---
name: research
description: Gather and synthesize context before answering complex questions.
---
# Research
Use this skill when a task needs more than a direct answer.
1. Identify what information is missing.
2. Use `query_db` to look up relevant records.
3. Summarize findings before responding to the user.

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

Корыстны тэхнічны факт: пад час развяртання файл instructions.md і весь каштан skills/ перадаюцца ў LangSmith Context Hub. Пасля чаго іх можна зменіць у інтэрфейсе без новага развяртання, таму рэдагаванне запрасу больш не значыць неабходнасці стварэння новай версіі. Кожны, хто стаў свідкам запуску CI толькі для таго, каб выправіць памылку ў сістэмнам запрасе, разумее гэта.

memory.py: стойкая памяць, за выборам

from managed_deepagents import define_memory
memory = define_memory(scope="agent")

Дыя два рэчы ёсць усё, што трэба, і без іх агент не мае жаднай стойкай памяці. Гэта можа здзівіць тых, хто думае, што памяць ёсць стандартной.

Як толькі гэта увімкнуць, будзе створаны адны дрэва Context Hub у катэгорыі /memories/agent/. Файл AGENTS.md у гэтым дрэве ёсць «гарачая» памяць, якая завантажваецца ў кантэкст за кожны запуск. Усе іншае — «холадная» памяць, яку агент чытае толькі тады, калі гэта неабходна. Чытанне і запіс вадзяцца за дапамою звычных функцый read_file, edit_file і write_file, а запісы ў іншыя месцы, укладзеныя пад /memories/, не ёсць стойкімі. З гэтага вынікае паследак у дызайне, пра які пасля будзе сказана далей.

sandbox/ і ўзоркуванне

from managed_deepagents import define_sandbox
sandbox = define_sandbox(
    idle_ttl_seconds=600,
    default_timeout=600,
    docker_image="python:3.12-slim",
)

Кожны адыячны тэчарты атрымлее свой сэндбокс, падтрымваны LangSmith Sandboxes. Неабяжлівы файл sandbox/setup.sh запускаецца адназначы пад час работы bash -e, а рэзультат зберагаецца як снэпшот, які новыя тэчарты клануюць замест таго, каб не павтараць настройкі:

#!/usr/bin/env bash
set -euo pipefail

apt-get update && apt-get install -y jq
mkdir -p /workspace

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

schedules/: cron з правілам часу компіляцыі

from managed_deepagents import define_schedule
schedule = define_schedule(
    cron="0 8 * * 1-5",
    timezone="America/Los_Angeles",
    prompt="Review durable memory for reusable research rules. List open questions for today.",
)

Для кожнага раскладу існуе адзін файл, а назва файла становіць назву раскладу. Павінен быць заданы толькі адзін з параметраў prompt або input. Прыймаецца толькі фармат cron з пяцью польмі, таму выразы, заснованыя на секундах, спакоююць компіляцыю. Без задання часовага пояса вжываецца UTC.

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

Кожны запуск зазвычай атрымоўвае тэнт, які выкарыстоўваецца толькі раз і адключаецца пасля завершэння. Для запускаў за раскладам, якія павінны зберагаць стан, неабходна наступная настройка thread={"mode": "persistent", "id": "nightly-memory"}.

channels/ і connectors/

Канал прымае паведамленні, які запускаюць працу, а канектар супягае агенту інструменты. Кожны з іх — гэта адзін файл:

# channels/slack.py
from managed_deepagents import channels
channel = channels.slack(
    auto_reply=True,
    mention_behavior="strip",
    conversation={"app_mention": "thread", "direct_message": "conversation"},
)
# connectors/mcp.py
from managed_deepagents import connectors
connector = connectors.mcp(
    mcp_servers={
        "langchainDocs": {
            "transport": "http",
            "url": "https://docs.langchain.com/mcp",
            "include_tools": ["search_docs_by_lang_chain"],
        },
    },
)

Маршруты выклікаюцца на адпаведнае імя файла. Файл channels/slack.py выклікае свой канцэнтр пад зместам Events па адрэсу /channels/slack/events, а інструменты MCP выкорыстоўваюць назву сервера як прыфікс, калі толькі не было іншага паведамлення, таму гэты канектар паказваецца як langchainDocs__search_docs_by_lang_chain. Серверы Stdio MCP не ўзімаюцца ў выкарыстоўванне, прыемліваюцца толькі Streamable HTTP і старыя фарматы SSE.

identity.py: хто можа выклікваць агента

from managed_deepagents import auth, define_identity
identity = define_identity(auth=auth.langsmith_api_key())

Гэта тое, што mda init стварае як безпечны стандарт. Апелянты надаюць ключ рабочага прастора LangSmith у заголовку x-api-key. Гэта вяршыць, чыя-то можа вызваць агента, але ўсі тады выкорыстоўваюць тыя ж потокі. Для прыватнасці кожнага карыстальніка неабходна замена на Supabase:

identity = define_identity(auth=auth.supabase(project_ref="your-project-ref"))

Кліянты пасля чаго адправляюць Authorization: Bearer <access_token>, і MDA пераканальвае JWT па адпаведным канцэнтры JWKS праекта. У дасяглівайных матэрыялах ёсць адзін паведамленні пра міграцыю: дадзенне гэтаго параметра ў існуючую разградзенную сістэму не восстанавляе метаданыя власніка для вялікі ўжо існуючых тэадзаў.

Што робіць пры застосоўцы mda deploy

У дасяглівайных матэрыялах пераказаны адзінаццаць парадковых крокаў. Найважлівейшыя з іх:

  1. Пераканальвае праект і завантажвае agent.py.
  2. Знаходзіць ключ LangSmith у фіксаванай парадку (LANGGRAPH_HOST_API_KEY, LANGSMITH_API_KEY, LANGCHAIN_API_KEY) і чытае файл .env раней чым чытаеся сераўерная асяроддзе.
  3. Складае всі незарэзерваваныя значэнні з файла .env і адправляе іх як таіны разградзення.
  • З’являюць instructions.md і папка skills/ у Context Hub.
  • Выконуецца кампіляцыя у .mda/build, пасля чаго завантажаецца архіў, які можа маць максымальна 200 MB.
  • Чакаецца, перакантролюючы статус, пакуль ён не стане DEPLOYED.
  • Складаюцься зноў крон-задачы: знаходзяцься всія задачы, створаныя раней, выкарыстоўваючы ўсе іх для выдалення, і ствараецца новы набор з дырэктарыі schedules/.
  • Сьведама сьпява — гэта той момент, калі паўтарны аналіз з Terraform перастае быць проста метафорай. Гэта корэкцыя адхыленняў, і гэта працюе так сама, як terraform apply.

    Такім чынам, як і у Terraform, існуе пазл, які тыха ўскліквае ўхіленне ад яго выканання. Дадаць --no-wait прыводзіць да таго, што CLI запускае удалённую перабудову і завершае працу раней, чым статус становіцца DEPLOYED, тое значыць, што крок супрацоўкі з расходамі часовых планаў ніколі не выкананы. Новы cron не існуе, а выдалены cron яшчэ працюе, і запуск фіксуе успех. Калі лячыцца часовы план, трэба запусціць mda deploy . без --no-wait. Адзін радок у інструкцыі команды — гэта недорога страховка.

    Якое яго месца ў стаке LangChain

    Зараз існуе чатыры шары, і людзі часта зліваюць іх адзін з другім.

    LangChain сапраўджае базовыя элементы: мадэлі, інструменты, запросы. Гэта фундамент.

    LangGraph — гэта асяроддзе выканання, якая забезпечвае стойкую, з станам, у віглядзе графа выконвальную працу (перазбіранне, стрымінг, перарывы). Можна супарадзіць яе з двыгунам.

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

    Managed Deep Agents — гэта хоставаныя сервісы для выканання гэтага каркаса. Гэта той самы Agent Server, які кліянты LangSmith ужо вікорыстоўваюць у працэсе распрацоўкі, але у болей строгай фарматызацыі для праектаў Deep Agents.

    Аналагія з автомабілем дапамагае зрозумець гэта: LangGraph суплячвае двахціліндровы двахтактны двахатэль і коробку перэдач, Deep Agents — сам автомабіль, а Managed Deep Agents — не толькі автомабіль, але і гараж, а таксама людзя, які зменяюць масло. Цена за гэта — адсутнасць можлівасці адкрываць капот. Гэта чыстая адмянка, і дакументацыя чыста пра гэта паведамляе. Тым, хто патрэбуе індывідуальных маршрутаў, коду прыложэння паўстацейна да графа, або прымітнага кантролю над збераганнем дадзеных, радзяць вікорыстоўваць LangSmith Deployment безпосерэдна.

    Дыямэтрыя спільнай памяці

    У версіі beta існуе адзін прастор памяці, agent: адзін дрэв з чытаннем/запісам, які дзеліць усі корыстувальнікі, які могу даць доступ да даных.

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

    Цэта позіцыя ўскладнівае пытанні безпекі. Файл AGENTS.md завантажваецца ў сістэмны кантэкст праз кожны запуск, таму все, што запішае корыстувальнік A у вток, будзе ў кантэксце корыстувальніка B у срэду, і гэта будзе трываць. Для внутрашньага інструмента, які вікорыстоўваецца толькі адной командай, гэта нормальна. Але для інструмента, які вікорыстоўваецца колькіма корыстувальнікамі, гэта стварае можлівасць втрымкі інструкцый з дадатковым слоем трываласці.

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

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

    Паверхня, якая яшчэ рухаецца

    Практычны паведамленне перад копіюванням будзь-якога коду. Дата публікацыі аанунсу — 7 серпня, тады як дасягальныя документы постаўляюцься ў стані постаўленых змян. За апошнія тры тыдні чатыры публічныя API змяніліся, і кожны, хто стварае прыстрой на аснове прыкладаў з аанунсу, сталкнёўся з усіма чатырмая.

    • Памяць: у аанунсе сказана, што кожная дыяпрацаваць начынаецца з памяці, прызначанай для агента, тады як у дасведчэннях памяць, якая застаецца пасля завершэння дыяпрацавы, опісваецца як опцыйна і ўвыключаная за значычным станом.
    • Сандбоксы: у аанунсе вікорыстоўваецца define_sandbox(provider="langsmith", scope="thread") і натыякнаецца на спяльны дыячынь agent; на сторонцы з інфармацыяй перыяднаны idle_ttl_seconds і default_timeout, і сказана, што адзін сандбокс завжды адпавядае адзінаму потоку.
    • Ідэнтычнасць: у аанунсе гаворыцца пра налаштаванне прадаўца OIDC унутры identity.py, але на сторонцы, прызначанай для ідэнтычнасці, рассказваецца толькі пра ключы API LangSmith і Supabase.
    • Slack: у аанунсе вікорыстоўваецца channels.slack(on=[...]), тады як у інструкцыі для Slack няма параметра on, і падпісвячэнні на запаведзі размешчаюцца ў маніфесце дапытку Slack.

    Дакументацыя таксама не завжоды ўзаемна супарадна. На адной сторанцы команда называецца mda channel init slack, а на іншай — mda channel add slack .; паракамент --configure-slack для mda deploy . опісан у гідзе для Slack, але не прынятны ў табліцы справакі CLI.

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

    Калі гэта падходзіць, а калі — ні

    Managed Deep Agents мае сэнс, калі:

    • вы ужо працуеце на палатформе Deep Agents, а інфраструктура ёсць вузькім месцам
    • агенту патрэбны стойкія задачы, запланаваныя задачы або інтэрфейс у Slack
    • пromptы і навыкі трэба можна было бы рэдагаваць без паўторнага развяртання
  • Усі абоненты выкарыстоўваюць аднаковыя межы довер’я.
  • Якша, як вы знаходзіцеся ў США, запуск з тэрміналу працюе нормальна.
  • Выберыце сам LangSmith Deployment або самі размясціце адкрыты кодаць harness, калі:

    • Ваш сэрвар-бэкенд павінен вызваць агента. Бета-версія спачатку падтрымлівае толькі CLI, пакуль не будзе завершана рэалізацыя API, а програмна вярнэнне перэрванага запуску значыць неабходнасць запытання вашага кантакта з LangChain, як указана ў дасягліх документах. Гэта цэлкам блакуе такі варыант вікорыстоўвання.
    • Абоненты павінны быць аддзеленыя ад спамяці іншых абонентаў.
    • Патрэбны спецыяльныя маршруты або прымытковы контроль над збераганнем дадзеных.
    • Дадзеныя павінны застацца за межамі США.
    • Slack працюе на калькі рэплік. На дзесяньні удаленне падобных запісаў відбываецца на рэгламентнам адзінцы, таму праказа з Slack можа запусціць агента два разы, а інструменты, доступныя з каналу, павінны быць ідэмпатныя, якшо у яных ёсць парадоксальныя наследкі.

    Пробаваць

    З’явіце і створыце каркас:

    uv tool install managed-deepagents
    mda init test-agent && cd test-agent
    

    Потым падзейце ключы ў .env:

    LANGSMITH_API_KEY=<your-key>
    OPENAI_API_KEY=<your-key>
    

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

    Далей uv sync && mda dev . стварае праект, стварае локальную альтэрнатыву Context Hub (якая ўключае інструкцыі, навыкі і памяць) і запускае LangSmith Studio у вікні браузера. Гэты інструмент не адразу перзапускае файлы праекта, таму пасля змян трэба зупініцца і запусціць працэс занова. Oficыяльны посібнік з швырага запуску знаходзіцца ў документацыі LangSmith на Python у роздзеле Managed Deep Agents.

    Команды, якія ужо выкарыстоўваюць Deep Agents і самостоятэльна ствараюць структуру ўпроваджэння, зможаць завершыць гэта за адні полудзень. Мадэль каталога — гарная ідэя, а проблемы бета-версіі можна будзе рашыць, калі яны будуць вядомы.

    Супаўзвязаныя матэрыялы

  • Агентская памяць: працуючая, эпізодычная, сэмантычная і працэйная — Агент два разы вылечыў той самы баг, таму што нічога не зберагала рэзультат. Дазнаецеся пра чатыры тыпы памяці, як кожны з іх не функцыонуе і куды трэба зберагаць інфармацыю.
  • Streaming LangChain Deep Agents: жывыя планы, вызовы інструментаў і токены — Заменіце блакуючы вызов на стрым, каб корыстнікі моглі бачыць, як працуе глыбокі агент: тры рэжымы стрыму, прасторы імен для падагентаў і фільтрацыя токенаў для стасумарызацыі.