Галоўная / Артыкулы / Практычныя прытамулкі: LangChain нешта часоў тады выдала кераваныя глыбокія агенты — і ваш агент ёсць

Практычныя прытамулкі: LangChain нешта часоў тады выдала кераваныя глыбокія агенты — і ваш агент ёсць

Практычныя прытамулкі: LangChain нешта часоў тады выдала кераваныя глыбокія агенты — і ваш агент ёсць: кантракты, пераказы і слоты для коду для команд, якія викорыстоўваюць гэты патэрн.

2640 слоў

У гэтым карыце парадоксальны спосаб перадбудаваець маршрут ад сыр'ёў да рабочай системы для: LangChain Just Shipped Managed Deep Agents — і ваш агент тепер являецца каталогам. Акцэнт ставіцься на практычныя крокі, чысткія перакананні та код, які можна проста дадаць у репазітарый без неабяснення меты. У стадіўцы «Аптаварыс» неабходна з'явіць вхідныя даны, адпаведальнага за крок та критэрыя завершэння прычым перад зменай коду. Аперацыйныя працавнікі должны магчымае перадзначыць крок з вядомай точкі контролю без неабяснення схованага стану. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехацкага рэзультата должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.

Што на самай працэ ёсць Managed Deep Agents

Калі працюеце над стадзіяй «What Managed Deep Agents», спачатку запісайце контракт: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільныя рамкі. Спрыймайце гэтую стадзію як контракт межа даннемі і перакананымі выходамі. Дайце назву рэзультатам, задаце критэрыя успеху і не падзволяйце частковаму завершэнню без паведамлення. Стварайце контрольныя точкі пасля дорогіх крокаў. Програма для продакцыі не должна зноў ставіць плата за той самы вызов LLM, калі аператар прабуе зноў выконаць пазнейшы элемент.

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

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

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

Файлы, якія выкааноўваюць работу

Калі працуеце над стадіяй «The Files That Do», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўвае чыстасць пазнейшых змян у кодзе. Зберагаюце настройкі праза код аплікацыі. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцый крануцца ў аднам месцы, дзе аператары можаць аудытаваць іх без неабяжлівага чытання всей структуры. Ставяце контрольны пункт пасля дорогіх крокаў. Функцыя вярнення працы не должна зноў выклікаць той самы вызов LLM, калі аператар перапрыяўляе роботу да наступнага вузла.

agent.py — ўжоўсёды неабяжлівы файл

Калі працуеце з агентам py, першым пунктам якога ўсегда ёст тое, каб спачатку запісаць контракт: неабяжныя даны, сигнал успеху і тое, што выходзіць на падчасныя неудачы. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў ёсцю частью продукту, а не пазнейшым дапрацоўкам. Стварайце контрольныя пункты пасля дорогіх крокаў. Система вярнення не павінна зноў ставіць плату за той самы вызов LLM, калі аператар перапрыбуе пазнейшы вузел.

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},
)
tools=[{"type": "web_search"}]                                # OpenAI
tools=[{"google_search": {}}]                                 # Google
tools=[{"type": "web_search_20260209", "name": "web_search"}] # Anthropic

instructions.md і skills/ — контэкст, який сінхронізуецца з хмарам

Калі вы працуеце над інструкцыямі, стадзіяй md і навыкамі, спачатку запісайце контракт: неабяжлівыя даны, сигнал успеху і тое, што выходзіць пад частковыя неудачы. Такі список перагляду дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказываць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Зробіце перагляд пасля дорогіх крокаў. Система адновлення не должна занова ставіць плату за той самы вызов LLM, калі аператар праказвае пазнейшы вузел.

# 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.

memory.py — стойкая память, і яна ўключаецца за выборам

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

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

sandbox/ — ізольаваная шэл, з крокам копіювання стану

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

from managed_deepagents import define_sandbox
sandbox = define_sandbox(
    idle_ttl_seconds=600,
    default_timeout=600,
    docker_image="python:3.12-slim",
)
#!/usr/bin/env bash
set -euo pipefail

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

schedules/ — cron, з абмежэнням часу компіляцыі

Калі працуеце з графікамі 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.",
)

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

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"],
        },
    },
)

identity.py — хто мае право яго вызваць

Ідэнтыфікацыйны прыем пад стэйдж-працой работае наяўней, калі яго спрыяваць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выконання і кост токена або запиту пад функцыональнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакою з боку расчыткаў, калі праця пераходзіць з дэмавайнага режыма ў спяльныя сераўеры. Храніце стан графа ў простам і типаваным формате. Вярнутыя структуры маскуюць інфармацыю пра тое, який вузел запісаў кожны поле, і спакшваюць продажчык працы пасля перарываў.

from managed_deepagents import auth, define_identity
identity = define_identity(auth=auth.langsmith_api_key())
identity = define_identity(auth=auth.supabase(project_ref="your-project-ref"))

Што на самай працэ выканання mda deploy

Этап «Што на самай працоўнае выканаецца» работае найлепей, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прымер, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Зберагаюце настройкі пазыром ад коду прыемліка. Файлы сераўнавальных средоў, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць контроль без неабяжнага чытання всіх дадзеных. Зберагаюце стан графа ў простам і типаваным формате. Вкладзеныя блокі маскуюць інфармацыю пра тое, який вузел запісаў канкрэтны поле, і спакоююць працу пасля перарываў. Этап «Што на самай працоўнае выканаецца» работае найлепей, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прымер, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць сферу дзеяння. Вядомаю прыорітэт даўайце маленькім, тэставаным елементам пад час стварэння скрыптав, а не вялікім і заплутаным ўзорам коду. Калі якісьця крока не выйшла, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцоўку дзеяння.

Як гэта пасляўляецца ў экасістэме LangChain

Для этапа «Як це пасуе» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяйце цэму этапу як кантракту межа вхіднымі данымі та перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, узначыце перакананні успеху та адмовіцеся ад беззвучнага частковага завершэння. Заставіце людзкую апраўду на тых кроках, дзе витрачаюцца грошы чы зміняюцыся даны для працы. Працэўнае підключэнне не є роўназначным бізнес-завершанню.

Адна рэч, яку трэба узгадаць пры выкліканні продукту

Для стадіі «One Thing to Sit» неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Запісваць час выконання і кост токена або запыту праза функцыйнальных рэзультатаў. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі траекторыя пераходзіць з дэмавай версіі ў спяльныя сераўы. Пры кроках, якія витрачаюць грошы або зменяюць даны ў працэсе, неабяжна выкарыстоўваць падтверджэнне чалавека. Працэс складання коду не ўзначае абоўсюднай завершанасці проекту.

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

Для стадіі The Surface Is Still неабяжна праблема — перш чым зменшваць код, неабяжна адзначыць вхідныя даны, адпаведнага адпаведальнага за крок і крэтырыя для завершэння. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба знаходзіць за межамі коду прыемленае. Файлы сераўіса, храненні секрэтных дадзенаў і флагі функцыйяй павінны быць у адном месца, якое працавнікі можуць пераглядаць, не чытаючы весь ланцуг задач. Прызначайце людскія апраўды для тых рэштоў, якія выкарыстоўваюць грошы або зменяюць даны у працэсе. Прыўязка на час компілявання не є падтверджэннем полныя адпаведнасці з бізнес-трэбамі. Для стадіі The Surface Is Still неабяжна праблема — перш чым зменшваць код, неабяжна адзначыць вхідныя даны, адпаведнага адпаведальнага за крок і крэтырыя для завершэння. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Валіце маленькія, тэставальныя елементы над вялікімі скрыптамі. Калі крок не выйшоў, прычына неабяжна адносіцца да конкрэтнай адпаведальнасці, а не да заплутанага ланцуга задач.

Калі трэба (і калі не трэба) яго вжываць

Калі працуеце над пунктамі «Калі трэба» і «Этап», спачатку запісайце угоду: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Спрыймайце гэты этап як угоду межа даннімі і перакананымі выходамі. Дайце назвы элементам, задаце правіла пераканання успеху і не падзэлвайцеся на частковыя завершэння без паведамлення. Зробіце перапытку пасля дорогіх крокаў. Система вярнення не должна занова ставіць плату за той самы вызов LLM, калі аператар прабуе зноў запрацаваць з пазнейшым вузлам.

Пачатак работы

Калі працюеце над этапам «Пачатак», спачатку запісайце умовы кантракта: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцвачваць змяны коду пасля таго. Запісвайце час выканання і кост токена або запытку праз тэкст функцыйнальных рэзултатаў. Відразы коста з самага пачатку запобегае неспакою, калі праця пераходзіць з дэмаверсіі ў спакульнаныя среды. Зробіце перапытку пасля дорогіх крокаў. Система адновлення не должна зноў нарахоўваць кост той самай вызову LLM, калі аператар прабуюць зноў запрацаваць пазнейшы вузел.

uv tool install managed-deepagents
mda init test-agent && cd test-agent
LANGSMITH_API_KEY=<your-key>
OPENAI_API_KEY=<your-key>

Апавясненні

Калі працуеце на стадыі «Апавязанні», спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагаеце настройкі паза кодам прыемлі. Файлы сераўіса, хранільнікі секрэтных данных і флагі функцый крануцца на аднам месцы, дзе аператары можаюць аудытаваць іх, не чытаючы весь ланцуг. Ствараеце контрольныя пункты пасля дорогіх крокаў. Система вярнення працы не должна занова ставіць плату за той самы вызыв LLM, калі аператар перапрыяўляе роботу да наступнага элемента. Калі працуеце на стадыі «Апавязанні», спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выканаецца, прычына нявыполнення должна вказываць на адну адпаведальнасць, а не на заплутаны ланцуг задач.

Контрольны список для аператараў

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

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

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

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

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

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

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

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

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

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

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

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