![]()
Frem til nå i kurset har du bygget agenter som kjører på din bærbare PC, inne i en notatbok, drevet av az login og noen miljøvariabler. Det er akkurat den riktige måten å lære på. Det er ikke riktig måte å kjøre en agent som tusenvis av kunder er avhengige av kl. 3 på natten.
Denne leksjonen handler om gapet mellom “det fungerer på min maskin” og “det fungerer, pålitelig og rimelig, i produksjon.” Vi lukker det gapet ved å bruke Microsoft Foundry og Microsoft Foundry Agent Service, og vi gjør det ved å bygge en ekte kundestøtteagent som har verktøy, gjenfinning, minne, evaluering og overvåking.
Denne leksjonen vil dekke:
Etter å ha fullført denne leksjonen, vil du vite hvordan du:
Denne leksjonen forutsetter at du har fullført de tidligere leksjonene og er komfortabel med:
Du vil også trenge:
az login).requirements.txt.En prototype-agent og en produksjonsagent deler samme kjerne-løkke — resonnere, kalle verktøy, respondere. Det som endrer seg er alt som omslutter denne løkka. Modellen utgjør kanskje 20 % av en produksjonsagent; de resterende 80 % er den operative skjelettet.
| Bekymring | Prototype | Produksjon |
|---|---|---|
| Hosting | Kjører i din notatbok | Kjører som en vert tjeneste, versjonert og rullet ut |
| Identitet | Din az login token |
Administrert identitet med scoped RBAC |
| Status | I minnet, mistes ved omstart | Eksternalisert (trådlagring, minnetjeneste) |
| Feil | Du ser tracebacken | Forsøk på nytt, fallback, dead-letter, varsler |
| Kostnad | “Det koster noen få cent” | Sporet per forespørsel, rutet, cachet, budsjettert |
| Kvalitet | Du vurderer output med øyet | Evaluert automatisk før hver utgivelse |
| Tillitt | Du godkjenner hver handling | Policy + menneske-i-løkka for risikofylte handlinger |
Husk denne tabellen. Hver seksjon nedenfor tilsvarer en av disse radene.
Det finnes tre mønstre du vil bruke, ofte i kombinasjon.
Agentobjektet lever inne i din applikasjonsprosess. Koden din kaller modell-leverandøren direkte; resonnementsløkka kjører i tjenesten din. Dette er det hver tidligere leksjon har gjort.
Agenten er registrert som en ressurs i Microsoft Foundry. Foundry hoster resonnementsløkka, lagrer tråder, håndhever innholdsikkerhet og RBAC, og gjør agenten synlig i Foundry-portalen. Appen din blir en tynn klient som oppretter tråder og leser svar.
Flere agenter (og verktøy) settes sammen til en graf med eksplisitt kontrollflyt — sekvensielle steg, forgreninger, menneskelig godkjenningsnoder og varige sjekkpunkter som kan pause og gjenoppta. Dette er Microsoft Agent Frameworks Workflows-funksjonalitet anvendt på distribusjonsskala.
flowchart TB
subgraph P1[Klient-hostet]
A1[Din app-prosess] --> M1[Modellleverandør]
end
subgraph P2[Hostet agent]
A2[Tynn klient] --> F2[Foundry agenttjeneste]
F2 --> M2[Modell + Verktøy + Thread-lager]
end
subgraph P3[Agent arbeidsflyt]
A3[Orkestrator] --> S1[Triage-agent]
S1 --> S2[Resolver-agent]
S2 --> H[Menneskelig godkjenningsnode]
H --> S3[Handlingsagent]
end
Å distribuere en agent er ikke et engangs-push. Det er en løkke, og det ligner mye på en programvareutgivelsessyklus fordi det er akkurat det det er.
flowchart LR
Create[Opprett / Forfatter] --> Version[Versjon]
Version --> Evaluate[Evaluer offline]
Evaluate -->|passer port| Deploy[Distribuer hostet]
Evaluate -->|feiler port| Create
Deploy --> Observe[Observer online]
Observe --> Improve[Samle feil]
Improve --> Create
Deploy --> Retire[Pensjoner gammel versjon]
Hovedideen, tatt med fra Leksjon 10: offline evaluering er en port, ikke en ettertanke. En ny agentversjon sendes ikke ut med mindre den oppfyller dine evalueringsgrenser. Online observabilitet mater deretter tilbake reelle feil i din offline testsett. Det er hele løkka.
Å skalere en agent er annerledes enn å skalere en tilstandsfrie web-API, fordi hver forespørsel kan utløse flere kostbare modell- og verktøysanrop. Fire teknikker bærer mesteparten av belastningen.
Tilstandsfrie forespørsler. Ikke behold noen per-bruker tilstand i prosessminnet ditt. Vedvar samtaletråder i Foundrys trådlagring eller en minnetjeneste så enhver instans kan håndtere enhver forespørsel. Dette lar deg skalere horisontalt — legg til instanser, uten klissete økter.
Modellruting. Ikke alle forespørsler trenger din mest kapable (og dyreste) modell. Ruter enkle forespørsler — intensjonsklassifisering, korte faktuelle svar — til en liten, rask modell, og reserver den store modellen til ekte resonnering. Foundrys Model Router kan gjøre dette for deg, eller du kan implementere en lettvint klassifiserer selv. Du vil bygge DIY-versjonen i labben.
Respons-caching. Mange supportsøk er nesten-duplikater (“hvordan tilbakestiller jeg passordet mitt?”). Cache svar på vanlige spørsmål og server dem uten å treffe modellen i det hele tatt. Selv en moderat cache-treffrate kutter kostnad og latenstid betydelig.
Samtidighet og tilbakestrøm. Modell-leverandører har grenseverdier. Begrens samtidigheten din, bruk forsøk på nytt med eksponentiell backoff, og feil grasiøst (et køet “vi jobber med det”-svar slår en 500).
flowchart LR
Q[Brukerspørsmål] --> C{Cache-treff?}
C -->|ja| R[Returner bufret svar]
C -->|nei| Router{Kompleksitet?}
Router -->|enkel| SLM[Liten modell]
Router -->|kompleks| LLM[Stor modell]
SLM --> Out[Svar]
LLM --> Out
Out --> Store[Cache + spor]
Du kan ikke drifte det du ikke kan se. Som dekket i Leksjon 10, avgir Microsoft Agent Framework OpenTelemetry traces nativer — hvert modellkall, verktøyutløsning, og orkestreringssteg blir et span. I produksjon eksporterer du disse spanene til Microsoft Foundry (eller en hvilken som helst OTel-kompatibel backend) slik at du kan:
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")
# agentutførelse spores automatisk inne i dette området
Attributter som customer.tier og routed.model er det som forvandler en vegg av sporingsdata til svarbare spørsmål (“blir bedriftskunder rutet til den lille modellen for ofte?”).
Kostnad i produksjonsagenter domineres av tokens. Tre spaker, i rekkefølge av effekt:
Evalueringsporter og kostnadskontroll er de samme disipliner sett fra to vinkler: evaluering forteller deg kvalitetsgulvet, ruting og caching holder deg så nær gulvets kostnad som mulig.
Styring. Vertede agenter arver Foundrys RBAC, innholdssikkerhet og revisjonslogging. Gi hver agent en administrert identitet med minst nødvendig privilegium — lese-tilgang til kunnskapsbasen, scoped tilgang til tickets-API, ikke mer.
Menneske-i-løkka. Noen handlinger er for konsekvensrike til å automatisere direkte — utstede tilbakebetaling, slette konto, eskalere til et juridisk team. Microsoft Agent Framework støtter godkjenningspåkrevde verktøy: agenten foreslår handlingen, utførelsen pauses, et menneske godkjenner eller avviser, og arbeidsflyten fortsetter. Du så primitiven i Leksjon 6; her distribuerer du den.
MCP i produksjon. MCP lar agenten din konsumere eksterne verktøy gjennom en standardgrensesnitt. I produksjon, behandle hver MCP-server som en uautorisert grense: fastpin serverversjon, kjør den med en scoped identitet, valider output, og eksponer aldri hemmeligheter til den. En MCP-server er en avhengighet, og avhengigheter blir patchet, auditert, og gebyrbegrenset.
flowchart TB
subgraph Dev[Utviklingsarkitektur]
D1[Notatbok] --> D2[Agentrammeverk]
D2 --> D3[Modellleverandør]
D2 --> D4[Lokale verktøy]
end
subgraph Deploy[Distribusjonsarkitektur]
E1[CI-pipeline] --> E2[Evalueringsport]
E2 -->|godkjent| E3[Foundry Agent-tjeneste]
E3 --> E4[Versjonert vert agent]
end
subgraph Run[Kjøretidsarkitektur]
F1[Klientapp] --> F2[Vert agent]
F2 --> F3[Modellruter]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Minnetjeneste]
F2 --> F6[MCP-verktøy]
F2 --> F7[OTel -> Foundry sporing]
F2 --> F8[Menneskelig godkjenning]
end
De tre diagrammene — utvikling, distribusjon, kjøring — er den samme agenten på tre stadier av dens liv. Labben som følger leder deg gjennom å bygge den.
Åpne code_samples/16-python-agent-framework.ipynb og gå gjennom den fra start til slutt. Du vil sette sammen en Contoso kundestøtteagent med alle produksjonsbekymringer integrert:
Notatboken er organisert slik at hver produksjonsbekymring er en selvstendig, kjørbar seksjon. Kjernen i den er rute-pluss-cache forespørselsbehandleren:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Server fra cache når vi kan.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Ruter etter kompleksitet for å kontrollere kostnader.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Kjør agenten inne i en trace-span for observasjon.
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 og returner.
response_cache.set(normalize(query), response.text)
return response.text
Evalueringsporten som vokter en utgivelse ser slik ut:
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 # distribuer kun hvis porten godkjennes
Les hver linje — notatboken holder prmitivene bevisst små slik at ingenting er skjult bak et rammeverkskall.
Evalueringsporten ovenfor kjører offline mot agentobjektet ditt. Når agenten er distribuert som en Hosted Agent, trenger du en sjekk til, enda billigere: svarer den distribuerte endepunktet faktisk?
Å distribuere “vellykket” beviser bare at kontrollplanet aksepterte definisjonen — det beviser ikke at agenten svarer. En manglende avhengighet, feil modellruting eller en utløpt tilkobling kan gi en grønn distribusjon som ikke returnerer noe. En smoke test oppdager det på sekunder, ved hver distribusjon, uten kostnaden av en full evaluering.
Dette depotet leverer en klar-til-bruk smoke-test pipeline bygget på AI Smoke Test GitHub Action:
tests/lesson-16-smoke-tests.json inneholder prompts og påstander for Contoso support agent (fundamenterte policy-svar, en ordreoppslag, holde seg til tema, og multi-sving tråd-kontinuitet). Kataloger for andre leksjonsagenter ligger ved siden av denne — se tests/README.md..github/workflows/smoke-test.yml logger inn med Azure OIDC og POSTer hver prompt til agentens Responses-endepunkt, og feiler jobben ved ethvert påstandssvikt.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Kjør den fra Actions-fanen når agenten din er distribuert, og oppgi endepunktet for Foundry-prosjektet ditt og agentnavnet. Den fødererte identiteten trenger Azure AI User-rollen på Foundry-prosjektets omfang. Tenk på lagene som en pyramide: røyktester (er den tilgjengelig og svarer?) kjører ved hver distribusjon, offline evaluering (god nok til å levere?) kjører før godkjenning, og online evaluering (hvordan gjør den det ute i praksis?) kjører kontinuerlig.
Test forståelsen din før du går videre til oppgaven.
1. Omtrent hvor mye av en produksjonsagent er “modellen,” og hva består resten av?
2. Når ville du valgt en Hosted Agent fremfor en klient-hostet agent?
3. Hvorfor må en skalerbar agent være tilstandsløs i sin egen prosessminne?
4. Hvilket problem løser modellruting, og hvordan relaterer det til evaluering?
5. Hva er en “evaluering port” og hvor i livssyklusen sitter den?
6. Hvorfor bør en MCP-server behandles som en utrygg grense i produksjon?
7. Hvilken enkeltendring har vanligvis størst innvirkning på produksjonsagentkostnad, og hvorfor?
8. Hvilken rolle spiller span-attributter som customer.tier og routed.model i observability?
Ta kundeserviceagenten fra labben og tilpass den for et spesifikt scenario: en abonnementsfakturastøtteagent for et SaaS-selskap.
Innsendingen din bør:
get_subscription_status, get_invoice, og issue_credit (kreditter over $50 krever menneskelig godkjenning).Skriv et kort avsnitt (i en markdown-celle) som forklarer hvilken modellruterregel du valgte og hvordan du vil validere den med ekte trafikk. Det finnes ikke noe enkelt riktig svar — du blir vurdert på om produksjonsbekymringene er koblet sammen på en koherent måte.
I denne leksjonen tok du en agent fra prototype til produksjon med Microsoft Foundry:
Neste leksjon tar den motsatte reisen: i stedet for å skalere agenter opp til skyen, vil du bringe dem ned på en enkelt utviklermaskin og kjøre dem helt lokalt.
Building Computer Use Agents (CUA)
Ansvarsfraskrivelse: Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiske oversettelser kan inneholde feil eller unøyaktigheter. Det opprinnelige dokumentet på originalspråket skal betraktes som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for eventuelle misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.