Практычныя прытамулкі: Архітектура DeepAgents, Частка 2: Стварэнне інструмента для агентаў
Практычныя прытамулкі: Архітектура DeepAgents, Частка 2: Стварэнне інструмента для агентаў: контракты, перакананні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўаны варыянт ідэй з кніги “The DeepAgents Architecture, Part 2: Building the Agent Harness” для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап “Адгледжэнне” найкраща працюе, калі яго розглядаць як мерыемую структуру. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычым расшырэнню масштаба. Зберагайце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжнай чытанняў усіх элементаў структуры.
Падготовка
У стадії падчырэння неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзеі коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не яго пазнейшай дапрацоўкі. Аутентыфікацыя выканаць у шлюзе, а прабачэнне прав на доступ — у роўні дадзеных. Сам токэн-носіцель не є межай арендаванага ресурсу.
git clone https://github.com/shubhodayahampiholi/system-design-planner.git
cd system-design-planner
uv sync
cp .env.example .env # fill in real API keys
Як DeepAgents керуе файламі і контролем доступу
Для стадіі «Як How DeepAgents адмініструе файлы» неабяжна прадзефінаваць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзеяванні коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест амаль неконтрольваных скрыптов. Калі крок не выйшоў, прычына нехарактэрыстыкі павінна вказываць на адзін конкрэтны элемент, а не на заплутаны ланцуг задач. Автентыфікуйцеся на входзе і прадзеявайце правы пры роботе з дадзеннямі. Толькі токэн-носіцель не ўтварае межы тэнанты.
Выбір месца зберагчыць файлы агента
У стадії «Выбір меса для агента» неабяцо практычна вводныя даны, адміністратар шагу і крэтыяры завершэння пры перадзеіснаванні коду. Аператары павінны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяйце гэтай стадіі як даговору межа вводнымі данымаў і падтверджанымі выходнымі рэзультатамі. Даўце назвы артыфактам, практычна перагляд успеху і адмовіцеся ад тыхоўскага частковага завершэння. Автентыфікуйцеся на воратах і практычна перавыдаце разрешэння на роўні дадзеных. Толькі токэн-носіцель не ёсць межай аренды. У стадії «Выбір меса для агента» неабяцо практычна вводныя даны, адміністратар шагу і крэтыяры завершэння пры перадзеіснаванні коду. Аператары павінны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы схованы стан. Зберагачыце настройкі за межамі коду прыемленае. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць без чытання всіх элементаў.
# src/system_design_planner/agent.py
from deepagents import create_deep_agent
MODEL = "claude-sonnet-5"
def build_planner_agent(*, system_prompt=PLANNER_SYSTEM_PROMPT, **kwargs):
return create_deep_agent(model=MODEL, system_prompt=system_prompt, **kwargs)
Адзынакоўка таго, што агент можа рабіць
Калі працуеце над стадзіяй адзынакоўкі таго, што можа рабіць агент, спачатку запісайце умовы кантракту: неабходныя даны, сігнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі список контроля дапамагае заліцьваты змяны ў кодзе пазней. Запісуйце адночасна шлях успеху і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў є частью продукту, а не дадатковымі правкамі пазней. Фіксуйце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такіх задапісаў дэбаггін цыклаў агента губіць гадзіны.
# src/system_design_planner/permissions.py
from deepagents import FilesystemPermission
DESIGN_SESSION_PERMISSIONS = [
FilesystemPermission(operations=["read", "write"], paths=["/.env"], mode="deny"),
FilesystemPermission(operations=["write"], paths=["/knowledge_base/**"], mode="deny"),
FilesystemPermission(operations=["write"], paths=["/memory/AGENTS.md"], mode="interrupt"),
]
Паўтарная перакананасць, што агент сапраўды чытае тое, што яму даўця
Калі працюеце над стадзіяй «Паказанне, чы ўсё справа з агентам», спачатку запішыце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыполнення павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Запішыце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога журналу дэбаггін цыклаў агента губіць гадзіны.
backend = FilesystemBackend(root_dir="knowledge_base")
agent = build_planner_agent(backend=backend)
result = agent.invoke({
"messages": [{
"role": "user",
"content": "List every file in your working directory, then give a one-line summary of what each one covers.",
}]
})
Дэлегаванне работы падагентам
Калі працюеце на стадыі делегавання роботы падпрацоўнікам, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду. Спрацаввайце гэтую стадыю як контракт межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце перакананні успеху і адмовіцеся ад тыхоўскага частковага завершэння. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рынак кожнага вызову. Дэбагаванне цягоў агента без такога следу марнуе гадзіны.
Што на самай працэ делегавання
Калі працюеце над этапам «Што на самай справе значыць делегаванне», спачатку запісайце угоду: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у случае частковага нявыпання. Такі список контроля дапамагае заліцьварыцца з пазнейшымі змянамі ў кодзе. Запісвайце час выканання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверыянту ў спакульнаныя среды. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзултат кожнага вызову. Без такога лёгкага следу дэбагаванне агента, які ціркулюе без канца, можа забраць гады часу.
Прызначэнне разных модэляў для разных падагентаў
Калі працюеце над практыкай «Прызначэнне разных модэляў для стадыі», спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разы ў частковай нявыполненасці. Такі список пераканаецца дапамагае залічваць змяны коду пасля таго. Зберагаеце настройкі за межамі коду прыемлі. Файлы сераўнавання, храненні секрэтных дадзенаў і флагі функций павінны знаходзіцца ў аднам месцы, куды аператары можаюць аудытаваць іх без неабходнасці чытаць весь граф. Зберагаеце у кэшы стабільныя інструкцыі системы і схемы адзінакоў. Перадача таго ж самога прамэра є частым выклікам затрат ресурсаў.
from deepagents import SubAgent
REFERENCE_EXTRACTOR: SubAgent = {
"name": "reference-extractor",
"description": (
"Extracts structured, factual capabilities from the knowledge_base "
"reference files for a specific platform or topic. Delegate here "
"before proposing any subsystem design, so decisions are grounded "
"in verified platform facts rather than assumption. Do not use this "
"subagent for design reasoning or tradeoffs - extraction only."
),
"system_prompt": (
"You are a fact-extraction specialist. Given a topic, find the "
"relevant file(s) in your working directory, read them, and return "
"ONLY a bullet list of the concrete facts relevant to that topic - "
"no narrative, no design opinions, no recommendations. If a fact is "
"explicitly flagged as an open question or unverified in the source "
"file, preserve that flag in your output rather than smoothing it "
"over into a confident-sounding statement."
),
"model": "openai:gpt-5.6-luna",
}
Чаму памяць сабеагента за значэнням є його савой, без дадатковых налаштованняў
Калі працуеце над стадзіяй «Прычыны дзейства сабагента», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Зявляйце лог з назвай інструмента, хэшам аргументаў, часам затрымкі і рэзультатам кожнага вызову. Без такога следу дэбагаванне цыклаў агента губіць гадзіны.
def build_governance_specialist(backend) -> SubAgent:
from deepagents.middleware.memory import MemoryMiddleware
return {
"name": "governance-specialist",
"description": (
"Reasons about Unity Catalog governance, lineage, and the "
"Databricks-Microsoft Foundry governance boundary for this "
"architecture."
),
"system_prompt": (
"You are a governance specialist for an Azure + Databricks AI "
"architecture. Before answering, check /memory/AGENTS.md for any "
"recorded scoping decisions - they are binding constraints on "
"your recommendation, not suggestions."
),
"middleware": [MemoryMiddleware(backend=backend, sources=["/memory/AGENTS.md"])],
}
Людзкая апраўка і стойкія памяткі
Калі працуеце з етапамі «Прынятне людзьмю» і «Стойкасе», спачатку запісайце угоду: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, прычына нявыпання павінна вказываць на адну адповядальнасць, а не на заплутаны ланцюг задач. Запісвайце назву інструмента, хеш аргументаў, час адклікання і рэзультат кожнага вызову. Без такога следу дэбаггін агента, які ціркулюе без канца, змарнавае гадзіны.
Чаму дзеянні некалькіх аб’ектаў патрабуюць затверджэння чалавека
Калі працуеце над этапам «Чаму дзеянні трэбуюць певных умов», спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Спрэцьвуйце гэты этап як контракт межа даннімі і перакананымі выходамі. Дайце назву артыфактам, задаце правіла пераканання успеху і не падзеўляйцеся частковым завершэнням без паведамлення. Запісвайце назву інструмента, хэш аргументаў, час адклікання і рэзультат кожнага вызову. Дыбаггін без такога лёгкага следу марнуюць гадзіны. Калі працуеце над этапам «Чаму дзеянні трэбуюць певных умов», спачатку запісайце контракт: неабяжлівыя данні, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Зберагаце настройкі за межамі коду прыемленае. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Як на самай працуюць процесы затверджэння і вярнення
Этап затверджэння і вярнення працюе найкраща, калі яго рассматрываць як меркаваны аспект. Зберагчыце адны ідеальны прыклад, адзін прыклад неудачы і запіс пра вярненне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументавайце як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не дадатковыми правкамі пазнейшае. Адкрывайце інструменты з вузкімі схемамі і чыткімі пазначэннямі парадоксальных наследкав. Адпрацоўвачы должны знать, якія вызовы мутуюць стан, перш чым аўтаматычна затвердзіць.
from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import Command
checkpointer = MemorySaver()
agent = build_planner_agent(
backend=backend,
permissions=DESIGN_SESSION_PERMISSIONS,
checkpointer=checkpointer,
memory=["/memory/AGENTS.md"],
)
state = agent.get_state(config)
if state.interrupts:
action = state.interrupts[0].value["action_requests"][0]
print(f"tool: {action['name']}")
print(f"args: {action['args']}")
decision = {"type": "approve"}
# or:
decision = {"type": "reject", "message": "Not yet ready — needs client confirmation first."}
result = agent.invoke(Command(resume={"decisions": [decision]}), config=config)
Што выходзіць, калі модэлю не адказваюць, чаму яго адхілілі
Што выходзіць, калі працэўваець стадія, лепш усматрываецца як вимерная паверхня. Запісайце адну „золатую“ транскрыпцію, адны прыклад неудачы і прыметку па вярнэнню да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выходзіць, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач. Задаўце ліміт токенав на кожны раунд і на кожную сесію. Інструменты-агенты агрэсывна расширваюць контекст; строгі ліміты не дазволяюць дэмам ператварыцца на неспакоўныя рахункі.
Чаму затверджэнне калькіх рашэнняў адразу трэба атрымваць з ўвагай
Этап «Прычыны санкцыявання калькі рашэнняў» працуе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Спрыяйце гэтаму этапу як кантракту межа вхіднымі дадзеннямі і паверыжанымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаць критэрыя успеху і адмовіцеся ад тыхняй частковай роботы без паведамлення. Адкройце інструменты з вузкімі схемамі та чысткімі пазначэннямі пабочных эфектаў. Адпаведальныя за эксплуатацыю должны знать, якія вызовы мутуюць стан, перш чым аўтаматычна санкцыяваць. Этап «Прычыны санкцыявання калькі рашэнняў» працуе наяўней, калі яго спрыяваць як мерыемую паверхню. Зафіксавайце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Зберагаюце канфігурацыю праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзенняў і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабходнасці чытання всей структуры.
Коордынацыя калькі спецыялістаў адразу
Для координавання дзеяння калькольных спецыялістаў на данай стадзіі неабходна прадзержаць вяскласаванне інпутаў, адпаведальнага за кожны крок і крэатарыяў завершэння працы перад зменым коду. Аперацыйныя сістэмы павінны магчымаць перапрыявленне крока з вядомай точкі контролю без неабясненага адгадвання скрытых станоў. Неабходна адзначыць як шлях успеху, так і шлях вяселення. Практыкі перапрыявлення спроб, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай самага продукту, а не яго пазнейшай дапрацоўкі. Аутентыфікацыя павінна адбывацца на воратах, а пераправенне прав на доступ — у рэжыме обработкі дадзенаў. Толькі токен-носіцель не є межай адпаведнае часткі продукту.
Дазволаць агенту самам выбіраць, хто павінен адпаведзаць на запыт
У стадії «Дазволіць агенту прымкнуць рашэнне» неабяжна практычна вакументацыя параметраў, адначальніка крока і крэатывных крытарыяў пры перамены коду. Аператары павінны магчымаць перапрацоўка крока з вядомага пункта контролю, не спадзяючыся на скрыты стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехарактэрыстыкі павінна вказваць на адзіну адпаведальнасць, а не на заплутаны ланцоўкі задач. Автентыфікуйцеся на входзе і паўторна автарызуйцеся на роўні дадзенняў. Толькі токэн-носіцель не є межай арендаванага ресурсу.
Асэнсівнае паралельнае делегаванне
Для стадіі асэнтныя паралельная дэлегацыя неабходна ўзначыць вхідныя данні, адпаведальную особу за выкананне крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перывыканне крока з вядомай точкі контролю без неабясненняя схованага стану. Спрыяць гэтай стадіі як даговору межа вхіднымі данніма і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, узначыць перакананні на успех і адмовіцца ад беззвучнага частковага завершэння. Аутентыфікувацца ў шлюзе і паўтарна автарызавацца на роўні дадзенняў. Толькі токэн-носіцель не ёстся межай аренды. Для стадіі асэнтныя паралельная дэлегацыя неабходна ўзначыць вхідныя данні, адпаведальную особу за выкананне крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перывыканне крока з вядомай точкі контролю без неабясненняя схованага стану. Хаваць канфігурацыю за межамі коду прыемленае. Файлы сераўнавальнага сэрвісу, хранілішчы секретных дадзенняў і флагі функцый должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабясненняя всіх аспектаў.
Як выглядае рэальная сінтэза
Калі працуеце над этапам «Як выглядае рэальная сінтэза», спачатку запісайце умовы: неабяжлівыя данні, сігнал успеху і тое, што выканаецца у разы ўзельнага нявыпалення. Такі чэк-ліст дапамагае залишыцца адкрытым пад час пазнейшых змян у кодзе. Запісуйце адночасна шлях успеху і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є частью продукту, а не пазнейшай дапрацоўкі. Фіксуйце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога лёгкага следу дэбагаванне агента займае гадзіны.
Калі два затверджаныя рашэння суперсачуцца
Калі працюеце на стадыі «Калі два затверджаныя рашэнні», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладоў заходзіць пазнейшыя змены коду чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшоў, нявыпанне павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рынак кожнага вызову. Дэбаггаванне агента без такога следу марнуе гадзіны.
Надаўанне агенту новых можлівасцей
Калі працюеце над стадзіяй «Выдача новага агента», спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список перакладзець пазнейшыя змены коду ў правільным напрамку. Спрэцьвуйце да гэтай стадзіі як да контракту межа данымі і перакананымі выходамі. Дайце назву артыфактам, задаце правіла пераканання успеху і не падтрымайце тыхі частковыя завершэння. Запісвайце назву інструмента, хэш аргументаў, час адклікання і рэзультат кожнага вызову. Дыбаггін ціклам агента без такога лёгку паслявісу змарнавае гадзіны.
Створэнне спецыяльнага інструмента
Калі працюеце над стадзіяй «Стварэнне спецыяльнага інструмента», спачатку запісайце угоду: неабяжлівыя даннэ, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заліцьварыць пазнейшыя змены ў кодзе. Запісвайце час выканання і кост токена або запыту праза функцыйнальныя рэзултаты. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзултат кожнага вызову. Без такога лёгкага следу дэбагаванне агента, які ціркулюе без канца, змарнавае гадзіны.
from langchain_core.tools import tool
from langchain_tavily import TavilySearch
_tavily_instance = None
def _get_tavily() -> TavilySearch:
global _tavily_instance
if _tavily_instance is None:
_tavily_instance = TavilySearch(max_results=3, topic="general")
return _tavily_instance
@tool
def check_current_standards(query: str) -> str:
"""Search the live web to verify whether a platform capability, naming,
or integration detail is still current.
Use this specifically to check something already pulled from
knowledge_base against what's true right now - not for open-ended
research.
"""
result = _get_tavily().invoke({"query": query})
return str(result)
Надаўанне агенту відновлювальных процедур з навыкамі
Калі працюеце над стадзіяй «Надаўчы агента з можласцю павтаральнага выкарыстоўвання», спачатку запісайце контракт: неабходныя даны, сигнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список перакладоў дапамагае заліцварыць пазнейшыя змены ў кодзе. Зберагаюце настройкі праза код аплікацыі. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжнага чытання всіх элементаў. Запісвайце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога лёгкага адступніка дэбагаванне цыклаў агента губіць гадзіны.
---
name: native-tool-scoping-check
description: Checks whether a request to use "native tooling" is genuinely unambiguous, given the deep current integration between Databricks-native and Azure-native (Microsoft Foundry) services.
license: MIT
---
# Native-Tool Scoping Check
## The procedure
1. Check /memory/AGENTS.md for an existing scoping decision covering this
question. If one exists, treat it as binding and stop here.
2. If no decision exists, do not assume either interpretation - surface
the ambiguity explicitly as a scoping question.
3. Once resolved, the decision should be persisted to memory, subject to
human approval.
З’яўленне ў рэальную зовнішню систему за дапамогою MCP
Калі працюеце над этапам «З’яўленне з рэальным системай», спачатку запісаце кантракт: неабяжныя даны, сігнал успеху і тое, што выканаецца у разы частковага невяскання. Такі список пераконтроўкаў дапамагае заліцьваты змяны ў кодзе пазнейша.
import asyncio
from databricks.sdk import WorkspaceClient
from databricks_langchain import DatabricksMCPServer, DatabricksMultiServerMCPClient
async def _fetch_uc_function_tools():
workspace_client = WorkspaceClient()
host = workspace_client.config.host
mcp_client = DatabricksMultiServerMCPClient([
DatabricksMCPServer(
name="uc-functions",
url=f"{host}/api/2.0/mcp/functions/{CATALOG}/{SCHEMA}",
workspace_client=workspace_client,
),
])
return await mcp_client.get_tools()
def get_databricks_uc_function_tools():
return asyncio.run(_fetch_uc_function_tools())
Стварэнне інтэрактыўнага інтерфейсу
Калі працюеце над стадзіяй «Стварэнне інтэрактыўнага інтерфейсу», спачатку запішыце умовы працы: неабходныя данні, сігнал успеху і тое, што выканаецца у разы частковага нявыполнення. Такі список контроля дапамагае залічыць змяны ў кодзе пасля таго. Валіце маленькія, можна працаваць з імі елементы замест большых скрыптав. Калі якісь крок не выйшае, прычына нявыполнення павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Запішыце назву інструмента, хэш параметраў, час адклікання і рынак кожнага вызову. Без такога следу дэбагаванне можа зайняць гады.
Іншага роду прыкладны програма
Калі працуеце над стадзіяй «A Different Kind of», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Спрэчвайце гэтую стадзію як контракт межа даннэмі і перакананымі выходамі. Дайце назву артыфактам, задацье правіла пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рынак кожнага вызову. Дэбаггін без такога следу марнуе гадзіны. Калі працуеце над стадзіяй «A Different Kind of», спачатку запісайце контракт: неабяжлівыя даннэ, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконвае ў тым, што пазнейшыя змены коду будуць чыстымі. Зберагаўце настройкі за межамі коду прыемленае. Файлы сераўнавання, хранілішчы секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Адказ пра тое, што рабіць агент, у момант выконання
Этап «Адказ пра тое, што рабіць агент» работае наяўней, калі яго спрыяваць як мерыемую плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб. Дакументаваўце як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не наступным этапам дапрацоўкі. Адкрывайце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных эфектаў. Хостам неабходна знать, якія вызовы мутуюць стан, перш чым яны автаматычна затвердзяць.
def classify_tool_call(tool_call, mcp_tool_names):
name = tool_call["name"]
args = tool_call.get("args", {})
if name == "task":
return "subagent", args.get("subagent_type", "?")
if name in mcp_tool_names:
return "mcp", name
if name == "read_file":
path = str(args.get("file_path", ""))
if "/skills/project/" in path and path.endswith("SKILL.md"):
skill_name = path.split("/")[-2]
return "skill", skill_name
if name in ("read_file", "write_file", "edit_file", "ls", "glob", "grep", "delete"):
return "filesystem", name
return "tool", name
Затверджэнне чы рашчароўкі дзеянняў з інтэрфейсу
Этап затверджэння чы рашчырання працюе найкраща, калі яго розглядаць як меркаваную плошчу. Запісаце адна ідеальная версія, адзін прыклад неудачы і прыметку па поверненню да пачатковага стану пры расширэнні масштаба. Валіце малыя, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок дзеянняў. Адкройце інструменты з вузкімі схемамі та чысткімі пазначэннямі побачных наследкаў. Адпаведальныя за эксплуатацыю павінны знать, якія вызовы мутуюць стан, прытаму яны можаць автаматычна затвердзіць.
if st.session_state.pending_interrupt:
action = st.session_state.pending_interrupt
st.warning(f"**Approval needed**\n\n**Tool:** `{action['name']}`\n\n**Args:** `{action['args']}`")
col1, col2 = st.columns(2)
with col1:
if st.button("Approve"):
run_turn(Command(resume={"decisions": [{"type": "approve"}]}))
with col2:
reason = st.text_input("Reason for rejecting")
if st.button("Reject"):
decision = {"type": "reject", "message": reason or "Rejected by the human reviewer."}
run_turn(Command(resume={"decisions": [decision]}))
Вядомая меры таго, што можа паказваць інтэрфейс
Этап «The A Known Limit» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зберагчыце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану, прычым расширваючы сферу дзеяння. Разглядайце гэты этап як кантракт межа вхіднымі даннымі і пераканаленымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце критэрыя успеху і не падзеўляйцеся частым, непূরным выкананнем задач. Адкройце інструменты з вузкімі схемамі та чыткімі пазначэннямі побачных эфектаў. Адпаведальныя за эксплуатацыю должны знать, якія вызовы мутуюць стан, перш чым автаматычна схваліць іх. Этап «The A Known Limit» працюе найкраща, калі яго розглядаць як вимерную паверхню. Зберагчыце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнню да пачатковага стану, прычым расширваючы сферу дзеяння. Зберагачыце настройкі параду ад коду прыемлівача. Файлы сяродавішча, хранільнікі секрэтных данных і флагі функцый должны знаходзіцца ў аднам месцы, куда аператары можуць аудытаваць іх, не чытаючы весь лянцуг задач.
Што на самай працэ пабудовы фактычна падтверджваецца
Для стадіі «Што насправды робиться ў гэтым будаванні» неабходна прадзеяваць інпуты, адпаведальную за крок адказнае особа і крэтыніяы завершэння перад зменым коду. Аперацыйныя працавнікі павінны магчымае перадзеяваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна аддзеяваць як шлях успеху, так і шлях восстанавлення. Перапрыбуткі, людзкія перакрыцці і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Утримванне каркаса
Для стадіі The Scaffolding Held неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтырыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына нехваткі должна вказываць на адну адпаведальнасць, а не на заплутаны ланцужок задач. Автентыфікуйцеся на входзе і паўторна автарызуйцеся на роўні дадзенняў. Толькі токэн-носіцель не є межай адпаведальнасцяў.
Што Scaffolding не вырашае
Для стадіі «What Scaffolding Doesn’t» неабяцо практычна апрацаваць вхідных дадзеных, выявіць адпаведнага адпаведальнага за крок і задаць критэрыі завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межы вхідных дадзеных і перакананых выходных рэзультатаў. Даць назвы артыфактам, задаць перакананні на успех і адмовіцца ад беззвучнага частковага завершэння. Аутентыфікуйцеся на в’язку і парадэкстрыруйце правы на выкарыстанне дадзеных. Толькі токэн-носіцель не ёстся межайю тэнантства. Для стадіі «What Scaffolding Doesn’t» неабяцо практычна апрацаваць вхідных дадзеных, выявіць адпаведнага адпаведальнага за крок і задаць критэрыі завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Зберагачыце настройкі за межамі коду прыемленае. Файлы сераўіснага сэрвісу, хранілішчы секретных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое працавнікі можуць аудытаваць, не чытаючы весь граф.
Чаму гэта важна
Калі працюеце над этапам «Чаму гэта важна», спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разы частковага невясковання. Такі список контроля дапамагае заліцварыць пазнейшыя змены ў коде.
Чек-ліст для эксплуатацыі
Калі працюеце над этапам чек-ліста для эксплуатацыі, спачатку запісайце умовы працы: неабяжлівыя данні, сигнал успеху і тое, што выканаецца у разы частковага невясковання. Такі список контроля дапамагае заліцварыць пазнейшыя змены ў коде.
Запісвайце часы выканання а таксу купонаў чы роезыкацый пры функцыянальных рэзультатах. Відразлівая візуабілізацыя касоў запобегае неспакойным рахункам, калі маршрут пераходзіць з дэмовай среды ў спакульнаныя сераўысы.
Запісвайце назву інструмента, хэш аргументаў, час затрымкі і рэзультат кожнага вызову. Без такога следу дэбагаванне агента займае гадзіны.
Зберагаюце стан графа ў простам і типаваным формате. Вярнутыя блокі маскуюць, який вузел запісаў якое поле, і спаказваюць продаж пасля перарываў.
Калі бюджет дазволяе, адключайце тэст на працягласць критычнага маршруту ў CI з фіксатрамі, а не з жывымі платнымі API.
Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшаў, адказ за гэта павінен быць прысвечаны адзіной адпаведальнасці, а не заплутанай лінійной структуре.
Перш чым запускать стак, заморозьце версіі, зафіксавце «золаты» транскрыпты для критычнага шляху і паказвце спосабы атрыбутавання. У спільных сэрвісах неабходны ліміты частоты запытанняў, пераконтрольванне прав на выкарыстоўвання ресурсаў і чысткі власнік для змены секрэтных даных. Лепш выбіраць простую надзею на надзейнасць, чым хітрыя експерыментальныя дэманстрацыі.
Прыметка для 35d60e28a332: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токеноў на кожную сесію і зберагачыце транскрыпты празаўсёды побач з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннэй.
Для прыметкі па забезпечэнню надзейнасці на стадыі 0 неабходна ўжо пачатку визначыць інпуты, власніка крока і критэрыя завершэння, перш чым зменіць код. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і вартасць токеноў або запытанняў празаўсёды побач з функцыйнальнымі рэзултатамі. Відкрытая інформацыя пра вартасці запобегае неспакойным рахункам, калі процес пераходзіць з дэманстрацыйных сэрвісаў у спільныя.
Дзеянне паўжасткі 0/762: звярніце увагу на час выканання, класыя ошибак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе паказаных пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.
Калі працуеце над першым этапам запісу паўжасткі, спачатку запішыце контракт: неабходныя данні, сігнал успеху і тое, што выканаецца у разе частковага нявыпання. Такі список контроля дапамагае заставіць пасляэтапныя змяны коду чыстымі. Задокументавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткаю продукту, а не пасляэтапным дапрацоўкам.
Дзеянне паўжасткі 1/762: звярніце увагу на час выканання, класыя ошибак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе паказаных пытанняў, а не на індывідуальных прыкладах, выявіце, чы рэшыцца застаўіць змяну.
Этап 2 практыкы зміцнення працюе найэфективней, калі яго розглядаць як вимерную паверхню. Зафіксавце адна «золатая» копія дадзеных, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы работ. Разглядзіце гэты этап як кантракт межа вхіднымі дадзенымі та пераканаленымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху та не падзейцеся частым, непূরным выпаннем заведамаў.
Дзеярожны пункт 2/762 з практыкі зміцнення: вымерзьце час выпання задачы, класію памылак та колькасць выкарыстоўваных ресурсаў для гэтага пункту, а потым вынікніце рашэнне пра тое, чы хацеце застаўіць змяну, спынюючыся на апранаванай сэтцы пытанняў, а не на індывідуальных спостарожэннях.
Для трэція ўрагу практыкы забезпечэння надзеі неабходна пазначыць вхідныя даны, адпаведальнага за выкананне крока і критэрыя завершэння пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Конфігурацыю трэба залічыць пазнаходзяцца за межамі коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыяй павінны знаходзіцца ў адном месцы, якое аператары можаць пераглядаць, не чытаяўшы весь код.
Дзялейчык 3/762 практыкі забезпечэння надзеі: вы мераваеце час выканання, класы каштоўкаў і витрату токенав для гэтага пункту, а потым прымаеце рашэнне пра тое, чы робіць змяны, на адной пазначкай фіксаванага набора пытанняў, а не на асобістых спазырэннях.
Калі працуеце над 4-й стадзіяю практыкы забезпечэння безпекі, спачатку запісайце умовы кантракта: неабяжлівыя данні, сігнал успеху і тое, што выходзіць на падзею частковага нявыпання. Такі список контроля дапамагае заліцвачыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.
Дзялянка 4/762 практыкы забезпечэння безпекі: замерайце час выканання, класы каштоўкаў і витраты токенав для гэтай дзялянкі, а пасля, на аднойчынных критэрыях, а не на індывідуальных спостарэннях, адлучыце, чы робіць змены.
4-я стадзія практыкы забезпечэння безпекі працуе лепей, калі яе спрыяваць як меравальную плошчу. Зберагачыце адні ідеальны прыклад роботы, адзін кейс нявыпання і запіс пра адкатуванне, перш чым расширваць масштабы. Запісвайце час выканання і вартасць токенав або запыткаў разам з функцыйнальнымі рэзултатамі. Відкрытая інформацыя пра вартасці запобегае неспакою, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дзеянне паўжчання 5/762: звярніце увагу на час выканання, класыя ошибак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.
Для 6-й стадзіі паўжчання неабходна перад змянай коду чытко апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчымае перадзвануць гэты крок з вядомага пункта контролю, не прымуджаючыся здагадвацца пра схованы стан. Трэба адночасна задокументаваць шлях успеху і шлях вярнення. Практыка павторных спроб, людзкія контрольныя пункты і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Дзеянне паўжчання 6/762: звярніце увагу на час выканання, класыя ошибак і колькасць викорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набору пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.
Калі працуеце над 7-й стадзіяю практыкы забезпечэння безпекі, спачатку запісайце контракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае залічыць пазнейшыя змены коду чыстацкі.
Спрэчвайце гэтую стадзію як контракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і адмовіцеся ад мовчанкавага частага завершэння задачы.
Дзеярлівайце деталі 7/762 практыкы забезпечэння безпекі: вымерайце час выканання, класы каштоўкаў і витрату токенав для гэтай практыкі, а потым выберыце, чы робіць змены на адной пазначанай базе пытанняў, а не на адной лічбе прыкладаў.
7-я стадзія практыкы забезпечэння безпекі працюе лепей, калі яе спрэчваюце як меравальную плошчу. Запісайце адну ідеальную транскрыпцыю, адзін прыклад неудачы і змест карэтквоту перад расшырэнням масштаба.
Канфігурацыю трэба залічыць праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных данных і флагі функций должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Дзеянне паўжчання 8/762: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на асобістых спазыраннях, выявіце, чы хачаце застаўіць змяну.
Для 9-го этапа паўжчання неабходна перад змянай коду чытка апісаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыяныя працавнікі должны магчымае перадзвануць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехарактернага рэзультата должна быць адносна конкретнай адпаведальнасці, а не сложнай сэткі крокаў.
Дзеянне паўжчання 9/762: звярніце увагу на час выканання, клас памылакі і колькасць выкорыстоўваных токенаў для гэтага запісу, а пасля, на аднойчынай базе фіксаванага набора пытанняў, а не на асобістых спазыраннях, выявіце, чы хачаце застаўіць змяну.
Калі працюеце над 10-й стадзіяю практыкы зароўнавання безпекі, спачатку запісайце умовы кантракту: неабходныя даны, сігнал успеху і тое, што выходзіць на частым неудачам. Такі список контроля дапамагае залічыць пазнейшыя змены ў кодзе адкрыта і прозрачна. Запісвайце часы выканання і кост токенаў або запытаў праза функцыйнае рэзультат. Відчутнасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Дзеянне зароўнавання безпекі 10/762: замерайце час выканання, класію паканаў і выкарыстаныя токены для гэтай практыкі, а потым выберайце, чы робіць змену на адной пазнакованай базе, а не на аснове індывідуальных спазыроў.