![]()
До сада сте у току курса правили агенте који раде на вашем лаптопу, унутар нотебоок-а, покретани az login и неколико променљивих окружења. То је управо прави начин учења. Међутим, то није исправан начин да покренете агента на којем хиљаде корисника зависи у 3 ујутру.
Ова лекција говори о јазу између “ради на мом рачунару” и “ради поуздано и економично у продукцији.” Тај јаз покривају Microsoft Foundry и Microsoft Foundry Agent Service, при чему градимо правог агента за корисничку подршку који има алате, ретривал, меморију, евалуацију и мониторинг.
Ова лекција ће обухватити:
Након ове лекције, знаћете како да:
Ова лекција претпоставља да сте завршили претходне и да сте упознати са:
Такође ћете морати да имате:
az login).requirements.txt.Прототип агента и продукциони агент деле исти основни циклус — размишљање, позив алата, одговор. Све остало око тог циклуса је оно што се мења. Модел чини можда 20% продукционог агента; осталих 80% је оперативни скелет.
| Област | Прототип | Продукција |
|---|---|---|
| Хостинг | Ради у вашем нотебоок-у | Ради као хостована услуга, са верзионисањем и објављивањем |
| Идентитет | Ваш az login токен |
Управљани идентитет са ограниченим RBAC-ом |
| Состојба | У меморији, губи се приликом рестарта | Спољашња (складиште нитова, сервис меморије) |
| Грешке | Видите трацебацк | Понављања, резервне опције, dead-letter, упозорења |
| Трошкови | “То је неколико центи” | Прати се по захтеву, рутира, кешира, буџетира |
| Квалитет | Процјењујете погледом | Аутоматски се оцењује пре сваког издања |
| Поверење | Одобравате сваку акцију | Политика + људско присуство за ризичне радње |
Имајте на уму ову табелу. Сваки следећи одељак се односи на један од ових редова.
Постоје три обрасца које ћете користити, често у комбинацији.
Објекат агента живи унутар вашег апликационог процеса. Ваш код директно позива провајдера модела; логика циклуса размишљања ради у вашој услузи. То је начин рада свих претходних лекција.
Агент је регистрован као ресурс у Microsoft Foundry. Foundry хостује циклус размишљања, чува нити, обезбеђује безбедност садржаја и RBAC, и чини агента видљивим у Foundry порталу. Ваша апликација постаје танак клијент који креира нити и чита одговоре.
Више агената (и алата) се саставља у граф са експлицитним током управљања — секвенцијални кораци, разгранућа, људска одобрења, и трајне контролне тачке које могу да паузирају и наставе. Ово је могућност Microsoft Agent Framework Workflows примењена на скалу распореда.
flowchart TB
subgraph P1[Client-Hosted]
A1[Your App Process] --> M1[Model Provider]
end
subgraph P2[Hosted Agent]
A2[Thin Client] --> F2[Foundry Agent Service]
F2 --> M2[Model + Tools + Thread Store]
end
subgraph P3[Agent Workflow]
A3[Orchestrator] --> S1[Triage Agent]
S1 --> S2[Resolver Agent]
S2 --> H[Human Approval Node]
H --> S3[Action Agent]
end
Распоређивање агента није једнократни push. То је циклус који подсећа на циклус издавања софтвера јер то и јесте.
flowchart LR
Create[Create / Author] --> Version[Version]
Version --> Evaluate[Evaluate offline]
Evaluate -->|passes gate| Deploy[Deploy hosted]
Evaluate -->|fails gate| Create
Deploy --> Observe[Observe online]
Observe --> Improve[Collect failures]
Improve --> Create
Deploy --> Retire[Retire old version]
Кључна идеја, преузета из Лекције 10: офлајн евалуација је капија, не после-мисао. Нова верзија агента није пуштена у рад док не прође ваше евалуационе прагове. Онлајн посматрачност онда уноси стварне грешке назад у ваш офлајн скуп тестова. То је цео циклус.
Скалисање агента разликује се од скалисања бездржавног веб API-ја, јер сваки захтев може покренути више скупих позива модела и алата. Четири технике носе већину терета.
Обрада захтева без стања. Не чувати појединачно стање корисника у меморији процеса. Сачувајте нитове разговора у Foundry складиште нити или меморијски сервис тако да сваки примерак може обрадити било који захтев. Ово вам омогућава хоризонталну скалабилност — додајте примерке, без лепљивих сесија.
Рутирање модела. Ни сваки захтев не мора да користи најспособнији (и најскупљи) модел. Усмерите једноставне захтеве — класификација намера, кратки чињенични одговори — ка малом, брзом моделу, а велики модел резервишите за право размишљање. Foundry-јев Model Router може то за вас урадити, или можете имплементирати лагани класификатор сами. Ви ћете направити сопствену верзију у лабораторији.
Кеширање одговора. Многи захтеви корисника су готово дупликати (“како да ресетујем лозинку?”). Кеширајте одговоре на честе питања и послужите их без позивања модела. Чак и умерену стопу погодака кеша значајно смањује трошкове и латенцију.
Конкурентност и притисак са назад. Провајдери модела имају ограничења протока. Ограничите вашу конкурентност, користите покушаје са експоненцијалним одлагањем и нека падови буду грациозни (одговор “радимо на томе” у реду је бољи од 500).
flowchart LR
Q[User query] --> C{Cache hit?}
C -->|yes| R[Return cached answer]
C -->|no| Router{Complexity?}
Router -->|simple| SLM[Small model]
Router -->|complex| LLM[Large model]
SLM --> Out[Response]
LLM --> Out
Out --> Store[Cache + trace]
Не можете управљати тиме што не видите. Као што је обрађено у Лекцији 10, Microsoft Agent Framework нативно емитује OpenTelemetry трагове — сваки позив модела, покретање алата, и корак оркестрације постаје део трага. У продукцији извозите те делове у Microsoft Foundry (или било који OTel компатибилан бекенд) како бисте могли:
from agent_framework.observability import get_tracer
tracer = get_tracer()
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("customer.tier", "enterprise")
span.set_attribute("routed.model", "gpt-5-nano")
# agent execution is traced automatically inside this span
Атрибути као што су customer.tier и routed.model претварају зид трагова у одговорна питања (“да ли корпоративни корисници пречесто добијају упућене одговоре на мали модел?”).
Трошкови у продукционим агентима доминирају око броја токена. Три полуге, по утицају:
Капије евалуације и контролa трошкова су иста дисциплина посматрана из два угла: евалуација вам говори ниво квалитета, рутирање и кеширање вас држе што ближе трошку тог нивоа.
Управљање. Hosted Agents наслеђују Foundry-јев RBAC, безбедност садржаја и аудит логове. Дајте сваком агенту управљани идентитет са најмањим потребним привилегијама — приступ за читање базе знања, ограничен приступ API-ју за тикете, ништа више.
Људски фактор. Неки поступци су превише важни да би се аутоматски радили — повраћај новца, брисање налога, ескалација правном тиму. Microsoft Agent Framework подржава алате које захтевају одобрење: агент предложи акцију, извршење се паузира, човек одобри или одбије, радни ток наставља. Примитивни пример сте видели у Лекцији 6; овде га распоредите.
MCP у продукцији. MCP омогућава вашем агенту да користи спољне алате преко стандардног интерфејса. У продукцији, третирајте сваки MCP сервер као непоуздану границу: закључајте верзију сервера, покрените га са ограниченим идентитетом, валидирајте излазне податке, и никад не излажите тајне. MCP сервер је зависност, а зависности се патчују, ревидирају и имају ограничења.
flowchart TB
subgraph Dev[Development Architecture]
D1[Notebook] --> D2[Agent Framework]
D2 --> D3[Model Provider]
D2 --> D4[Local tools]
end
subgraph Deploy[Deployment Architecture]
E1[CI pipeline] --> E2[Evaluation gate]
E2 -->|pass| E3[Foundry Agent Service]
E3 --> E4[Versioned hosted agent]
end
subgraph Run[Runtime Architecture]
F1[Client app] --> F2[Hosted agent]
F2 --> F3[Model Router]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Memory service]
F2 --> F6[MCP tools]
F2 --> F7[OTel -> Foundry tracing]
F2 --> F8[Human approval]
end
Та три дијаграма — развој, распореда, време извршавања — представљају истог агента у три фазе живота. Лабораторија у наставку вас води кроз његову изградњу.
Отворите code_samples/16-python-agent-framework.ipynb и радите кроз њега од почетка до краја. Саставићете Contoso агента за корисничку подршку са свим аспектима продукције:
Нотебоок је организован тако да је сваки аспект продукције самосталан, извршни део. Срж је руковање захтевима са рутирањем и кеширањем:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Serve from cache when we can.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Route by complexity to control cost.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Run the agent inside a trace span for observability.
with tracer.start_as_current_span("support_request") as span:
span.set_attribute("routed.model", model)
span.set_attribute("customer.id", customer_id)
response = await support_agent.run(query, model=model)
# 4. Cache and return.
response_cache.set(normalize(query), response.text)
return response.text
Капија евалуације која штити издање изгледа овако:
async def evaluation_gate(agent, test_cases, threshold: float = 0.8) -> bool:
passed = 0
for case in test_cases:
result = await agent.run(case["input"])
if score_response(result.text, case["expected"]) >= 0.8:
passed += 1
pass_rate = passed / len(test_cases)
print(f"Evaluation pass rate: {pass_rate:.0%} (gate: {threshold:.0%})")
return pass_rate >= threshold # only deploy if the gate passes
Прочитајте сваки ред — нотебоок одржава примитиве намерно малим да ништа није скривено иза позива оквира.
Горе наведена капија евалуације ради офлајн против вашег агента. Кад је агент распореден као Hosted Agent, потребна вам је још једна, још јефтинија провера: да ли распоређена тачка заправо одговара?
РАспоређивање са “успехом” доказује само да је контролна равнина прихватила дефиницију — не доказује да агент одговара. Недостајућа зависност, погрешно рутирање модела или истекла конекција могу оставити зелено распоредење које ништа не враћа. Smoke тест хвата то у секунди, на сваком распоређивању, без трошкова потпуне евалуације.
Овај репозиторијум испоручује спремну за употребу smoke-тест цевовод базиран на AI Smoke Test GitHub акцији:
tests/lesson-16-smoke-tests.json садржи промптове и тврдње за Contoso агента подршке (одговоре из базе знanja, претрагу поруџбина, остајање на теми и континуитет више корака разговора). Каталози за агенте других лекција су поред њега — видите tests/README.md..github/workflows/smoke-test.yml се пријављује са Azure OIDC и шаље сваки промпт на Responses крајњу тачку агента, и неуспех посла ако било која тврдња није испуњена.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Покрените га са картице Actions након што ваш агент буде распоређен, достављајући крајњу тачку вашег Foundry пројекта и име агента. Федеративни идентитет треба да има улогу Azure AI User у опсегу Foundry пројекта. Замислите слојеве као пирамиду: тестови пушења (доступан и одговара?) се извршавају при сваком распоређивању, офлајн процена (довољно добра за пуштање у производњу?) се извршава пре промоције, а онлајн процена (како делује у реалном окружењу?) се непрекидно изводи.
Тестирајте своје разумевање пре него што пређете на задатак.
1. Око колико је процента производног агента „модел“, а шта је остало?
2. Када бисте изабрали Hosted агент уместо агента који се покреће на клијенту?
3. Зашто скалирајући агент мора бити без стања у својој меморији процеса?
4. Који проблем решава усмеравање модела и како је то повезано са проценом?
5. Шта је „охранска капија“ процене и где се налази у животном циклусу?
6. Зашто MCP сервер треба посматрати као непоуздану границу у производњи?
7. Која једна промена обично највише утиче на трошкове производног агента и зашто?
8. Коју улогу атрибути преко опсега као што су customer.tier и routed.model играју у посматрању?
Узмите агента за корисничку подршку из лабораторије и ојачајте га за конкретан сценарио: агент за подршку о наплати претплате у SaaS компанији.
Ваш предлог треба да садржи:
get_subscription_status, get_invoice и issue_credit (кредити преко 50 долара захтевају одобрење од људи).Напишите кратак одломак (у markdown ћелији) објашњавајући које правило усмеравања модела сте изабрали и како бисте га валидирали са правим саобраћајем. Не постоји један тачан одговор — бићете оцењени по томе да ли су производни аспекти повезани у складу.
У овој лекцији сте пренели агента од прототипа до производње уз Microsoft Foundry:
Следећа лекција иде у супротном смеру: уместо скалирања агената у облак, спустићете их на доњи ниво на једну развојну машину и покренути их потпуно локално.
Building Computer Use Agents (CUA)
Изјава о одрицању одговорности: Овај документ је преведен коришћењем услуге за аутоматски превод Co-op Translator. Иако тежимо тачности, имајте у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати ауторитативним извором. За критичне информације препоручује се професионални људски превод. Нисмо одговорни за било каква неспоразума или погрешна тумачења која произилазе из коришћења овог превода.