![]()
Tähän asti kurssilla olet rakentanut agentteja, jotka toimivat kannettavallasi tietokoneella, muistikirjassa, az login -komennon ja pienen joukon ympäristömuuttujia ohjaamana. Tämä on täysin oikea tapa oppia. Se ei kuitenkaan ole oikea tapa ajaa agenttia, johon tuhannet asiakkaat luottavat kello 3 yöllä.
Tässä oppitunnissa käsitellään kuilua “se toimii omalla koneellani” ja “se toimii luotettavasti ja edullisesti tuotannossa” välillä. Suljemme tämän kuilun käyttämällä Microsoft Foundrya ja Microsoft Foundry Agent Serviceä, ja teemme sen rakentamalla todellisen asiakastukiasiantuntijan, jolla on työkalut, haku, muisti, arviointi ja valvonta.
Tässä oppitunnissa käsitellään:
Oppitunnin suorittamisen jälkeen osaat:
Tämä oppitunti edellyttää, että olet suorittanut aiemmat oppitunnit ja osaat:
Tarvitset myös:
az login).requirements.txt -paketit.Prototyyppiagentti ja tuotantoagentti jakavat saman ytimen — päättely, työkalukutsut, vastaaminen. Muuttuu kaikki se, mikä kietoutuu tämän silmukan ympärille. Malli on ehkä 20 % tuotantoagentista; loput 80 % on operatiivinen runko.
| Huomio | Prototyyppi | Tuotanto |
|---|---|---|
| Isännöinti | Suoritetaan muistikirjassasi | Suoritetaan isännöitynä palveluna, versioituna ja vaiheittain otettuna käyttöön |
| Tunnistus | Sinun az login -tunnuksesi |
Hallittu identiteetti rajatuilla RBAC-oikeuksilla |
| Tila | Muistissa, katoaa uudelleenkäynnistyksessä | Ulkoistettu (thread store, muistipalvelu) |
| Virhe | Näet virheen jäljitteen | Uudelleenyritykset, varatilat, dead-letter, hälytykset |
| Kustannus | “Se on muutama sentti” | Seurataan per pyyntö, reititetään, välimuistitetaan, budjetoidaan |
| Laadukkuus | Katsot lopputulosta silmämääräisesti | Arvioidaan automaattisesti ennen jokaista julkaisua |
| Luottamus | Hyväksyt jokaisen toiminnon | Politiikka + ihmisen hyväksyntä riskialttiissa toimissa |
Pidä tämä taulukko mielessä. Jokainen alla oleva osio vastaa yhtä taulukon riviä.
Käytettävissäsi on kolme mallia, usein yhdistelminä.
Agentti-olio elää sinun sovellusprosessissasi. Koodisi kutsuu mallipalvelua suoraan; päättelysilmukka suoritetaan palvelussasi. Tämä on mitä kaikki aiemmat oppitunnit ovat tehneet.
Agentti on rekisteröity resurssiksi Microsoft Foundryssa. Foundry ylläpitää päättelysilmukkaa, tallentaa ketjuja, valvoo sisällön turvallisuutta ja RBAC:ia sekä tekee agentin näkyväksi Foundryn portaalissa. Sovelluksesi on kevyt asiakas, joka luo ketjuja ja lukee vastauksia.
Useita agenteja (ja työkaluja) yhdistetään kaavioon eksplisiittisellä ohjauksella — peräkkäiset vaiheet, haarautuminen, ihmisen hyväksyntäsolmut ja kestävät tarkistuspisteet, jotka voivat tauottaa ja jatkaa. Tämä on Microsoft Agent Frameworkin Workflows-ominaisuus käytössä käyttöönoton mittakaavassa.
flowchart TB
subgraph P1[Asiakasisännöity]
A1[Sovellusprosessisi] --> M1[Mallin tarjoaja]
end
subgraph P2[Isännöity agentti]
A2[Ohutasiakas] --> F2[Foundry-agenttipalvelu]
F2 --> M2[Malli + Työkalut + Ketjukirjasto]
end
subgraph P3[Agentin työnkulku]
A3[Orkestroija] --> S1[Lajittelun agentti]
S1 --> S2[Ratkaisun agentti]
S2 --> H[Ihmisen hyväksymissolmu]
H --> S3[Toimintoagentti]
end
Agentin käyttöönotto ei ole kertaalleen tehtävä push. Se on sykli, ja muistuttaa paljon ohjelmistojulkaisusykliä, koska sitähän se on.
flowchart LR
Create[Luo / Tekijä] --> Version[Versio]
Version --> Evaluate[Arvioi offline-tilassa]
Evaluate -->|läpäisee portin| Deploy[Ota käyttöön isännöitynä]
Evaluate -->|epäonnistuu portissa| Create
Deploy --> Observe[Tarkkaile verkossa]
Observe --> Improve[Kerää virheet]
Improve --> Create
Deploy --> Retire[Poista vanha versio käytöstä]
Keskeinen idea, peräisin Oppitunnista 10: offline-arviointi on portti, ei jälkikäteen tehtävä lisäys. Uutta agenttiversiota ei julkaista, ellei se ylitä arviointikynnyksiäsi. Online-havaittavuus palauttaa todelliset virheet offline-testisarjaan. Se on koko sykli.
Agentin skaalaus eroaa tilattomasta web-API:sta, koska jokainen pyyntö voi laukaista useita kalliita malli- ja työkalukutsuja. Neljä tekniikkaa kantaa suurimman kuorman.
Tilaton pyyntöjen käsittely. Älä säilytä käyttäjäkohtaista tilaa prosessin muistissa. Tallenna keskusteluketjut Foundryn ketjutallennukseen tai muistipalveluun, jotta mikä tahansa instanssi voi käsitellä minkä tahansa pyynnön. Tämä mahdollistaa horisontaalisen skaalaamisen — lisää instansseja, ei istuntasidonnaisuuksia.
Mallin reititys. Kaikki pyynnöt eivät tarvitse kyvykkäintä (ja kalleinta) malliasi. Ohjaa yksinkertaiset pyynnöt — tarkoituksen luokittelu, lyhyet faktavastaukset — pieneen ja nopeaan malliin ja varaa iso malli aidolle päättelylle. Foundryn Model Router voi tehdä tämän puolestasi, tai voit itse toteuttaa kevyen luokittelijan. Rakennat DIY-version laboratoriossa.
Vastausten välimuistitus. Monet tukikyselyt ovat lähes kopioita (“kuinka vaihdan salasanani?”). Välimuistita yleisimpien kysymysten vastaukset ja palvele niitä ilman, että malli kutsutaan lainkaan. Jopa kohtuullinen välimuistiosuma pienentää merkittävästi kustannuksia ja viivettä.
Samanaikaisuus ja takaisinpainesäätö. Mallipalveluilla on nopeusrajoituksia. Rajaudu samanaikaisuuteen, käytä eksponentiaalisen peruutuksen kanssa uudelleenyrityksiä ja epäonnistumiset hoida tyylikkäästi (jonoitettu “olemme hoidossa” -vastaus on parempi kuin 500 virhe).
flowchart LR
Q[Käyttäjän kysely] --> C{Välimuistiosuma?}
C -->|kyllä| R[Palauta välimuistissa oleva vastaus]
C -->|ei| Router{Monimutkaisuus?}
Router -->|yksinkertainen| SLM[Pieni malli]
Router -->|monimutkainen| LLM[Suuri malli]
SLM --> Out[Vastaus]
LLM --> Out
Out --> Store[Välimuisti + jäljitys]
Et voi ohjata sitä, mitä et näe. Kuten Oppitunnissa 10 käsiteltiin, Microsoft Agent Framework tuottaa OpenTelemetry-jälkiä natiivisti — jokainen mallikutsu, työkalukutsu ja orkestrointivaihe dokumentoidaan yhtenä spanina. Tuotannossa viet nämä spanit Microsoft Foundryyn (tai mihin tahansa OTel-yhteensopivaan backend-järjestelmään), jotta voit:
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")
# agentin suoritus jäljitetään automaattisesti tämän alueen sisällä
Muuttujat kuten customer.tier ja routed.model muuttavat suuren jäljityspinon vastattaviksi kysymyksiksi (“reititetäänkö yritysasiakkaat liian usein pieneen malliin?”).
Tuotantoagenteissa kustannuksiin vaikuttavat eniten tokenit. Kolme vipua vaikutuksen suuruusjärjestyksessä:
Arviointilukot ja kustannusten hallinta ovat samaa kurinalaisuutta katsottuna eri näkökulmista: arviointi kertoo laatutasosta ja reititys sekä välimuistitus pitävät sinut mahdollisimman lähellä tämän tason kustannuksia.
Hallinnointi. Hosted Agents peri löytävät Foundryn RBAC:n, sisällön turvallisuuden ja auditointilokit. Anna jokaiselle agentille hallittu identiteetti, jolla on vähimmät tarvittavat oikeudet — vain lukuoikeus tietokantaan, rajattu pääsy tikettijärjestelmään, eikä enempää.
Ihminen silmukassa. Jotkut toiminnot ovat liian merkittäviä automatisoitavaksi suoraan — hyvityksen myöntäminen, tilin poistaminen, eskalointi lakitiimille. Microsoft Agent Framework tukee hyväksyntää vaativia työkaluja: agentti ehdottaa toimintoa, suoritus pysäytetään, ihminen hyväksyy tai hylkää, ja työnkulku jatkuu. Näit primitiivin Oppitunnissa 6; tässä otat sen käyttöön.
MCP tuotannossa. MCP antaa agentillesi mahdollisuuden käyttää ulkoisia työkaluja standardin rajapinnan kautta. Tuotannossa kohdellaan jokaista MCP-palvelinta luottamattomana rajapintana: kiinnitä palvelimen versio, aja se rajatun identiteetin kanssa, validoi sen tuotokset, älä koskaan paljasta sille salaisuuksia. MCP-palvelin on riippuvuus, ja riippuvuudet päivitetään, auditoidaan ja nopeusrajoitetaan.
flowchart TB
subgraph Dev[Kehitysarkkitehtuuri]
D1[Muistikirja] --> D2[Agenttikehys]
D2 --> D3[Mallin tarjoaja]
D2 --> D4[Paikalliset työkalut]
end
subgraph Deploy[Käyttöönottoarkkitehtuuri]
E1[CI-putki] --> E2[Arviointikynnys]
E2 -->|hyväksy| E3[Foundry-agenttipalvelu]
E3 --> E4[Versioitu isännöity agentti]
end
subgraph Run[Suoritusympäristöarkkitehtuuri]
F1[Asiakasohjelma] --> F2[Isännöity agentti]
F2 --> F3[Mallin reititin]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Muistipalvelu]
F2 --> F6[MCP-työkalut]
F2 --> F7[OTel -> Foundry-seuranta]
F2 --> F8[Ihmisen hyväksyntä]
end
Nuo kolme kaaviota — kehitys, käyttöönotto, ajonaikainen — kuvaavat samaa agenttia sen elämän kolmessa vaiheessa. Seuraava laboratorio ohjaa sinut sen rakentamisessa.
Avaa code_samples/16-python-agent-framework.ipynb ja käy se läpi alusta loppuun. Kootset Contoso-asiakastukiagentin, jossa on kaikki tuotannon vaatimukset toteutettuina:
Muistikirja on järjestetty niin, että jokainen tuotannon vaatimus on itsenäinen ja suoritettava osio. Sydän on reititys- ja välimuistikäsittelijä:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Palvele välimuistista aina kun mahdollista.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Jaa reititys monimutkaisuuden mukaan kustannusten hallitsemiseksi.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Suorita agentti jäljityskehyksen sisällä havainnoitavuuden vuoksi.
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. Talleta välimuistiin ja palauta.
response_cache.set(normalize(query), response.text)
return response.text
Arviointiportti, joka vartioi julkaisua näyttää tältä:
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 # ota käyttöön vain, jos portti menee läpi
Lue jokainen rivi — muistikirja pitää primitiivit tahallaan pieninä, jotta mikään ei ole piilossa kehyksen kutsun takana.
Edellä mainittu arviointilukko suoritetaan offline agenttioliosta vastaan. Kun agentti on otettu käyttöön Hosted Agentina, tarvitset vielä yhden, vielä halvemman tarkistuksen: vastaatko oikeasti otettu päätepiste?
“Onnistunut” käyttöönotto todistaa vain, että ohjaustaso hyväksyi määritelmän — se ei todista agentin vastaavan. Puuttuva riippuvuus, virhe mallin reitityksessä tai umpeutunut yhteys voivat jättää vihreän käyttöönoton, joka ei palauta mitään. Savutesti havaitsee tämän sekunneissa, jokaisella käyttöönotolla, ilman täyden arvioinnin kustannuksia.
Tämä repositorio sisältää valmiin savutestiputken, joka perustuu AI Smoke Test GitHub Actioniin:
tests/lesson-16-smoke-tests.json sisältää kehotteet ja väittämät Contoso-tukiaagentille (tuen politiikasta vastaaminen, tilauksen tarkistus, aiheessa pysyminen ja monivaiheisen ketjun jatkuvuus). Luetteloita muiden oppituntien agenteille on samassa paikassa — katso tests/README.md..github/workflows/smoke-test.yml kirjautuu Azure OIDC:llä ja POSTaa jokaisen kehotteen agentin Responses-päätepisteeseen, epäonnistuu työ kun mikä tahansa väite jää täyttymättä.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Suorita se Actions-välilehdeltä, kun agenttisi on otettu käyttöön, antaen Foundry-projektisi päätepiste ja agentin nimi. Hajautetulla identiteetillä tulee olla Azure AI User -rooli Foundry-projektin laajuudessa. Ajattele kerroksia pyramidina: savutestit (saavutettavissa ja vastaavatko?) ajetaan jokaisen käyttöönoton yhteydessä, offline-arviointi (riittävän hyvä julkaistavaksi?) ajetaan ennen edistämistä, ja online-arviointi (miten se pärjää käytännössä?) ajetaan jatkuvasti.
Testaa ymmärryksesi ennen siirtymistä tehtävään.
1. Kuinka suuri osa tuotantoagentista on suunnilleen “malli” ja mikä on muu osa?
2. Milloin valitsisit Hosted Agentin asiakasisännöidyn agentin sijaan?
3. Miksi skaalautuvan agentin täytyy olla tilaton omassa prosessimuistissaan?
4. Minkä ongelman mallin reititys ratkaisee ja miten se liittyy arviointiin?
5. Mikä on “arviointiloukku” ja missä se sijaitsee elinkaaren vaiheessa?
6. Miksi MCP-palvelinta tulee käsitellä epäluotettavana rajapintana tuotannossa?
7. Mikä yksittäinen muutos yleensä vaikuttaa eniten tuotantoagentin kustannuksiin ja miksi?
8. Mikä rooli leveysattribuuteilla kuten customer.tier ja routed.model on havaittavuudessa?
Ota laboratoriosta asiakastukagentti ja tee siitä kestävä tietylle skenaariolle: tilausten laskutustuki SaaS-yritykselle.
Palautuksesi tulisi:
get_subscription_status, get_invoice ja issue_credit (yli 50 dollarin hyvitykset vaativat ihmisen hyväksynnän).Kirjoita lyhyt kappale (markdown-soluun), jossa selität valitsemasi mallin reitityssäännön ja miten validoisit sen todellisella liikenteellä. Ei ole yhtä oikeaa vastausta — sinua arvioidaan sen perusteella, ovatko tuotantoon liittyvät asiat jäsennelty järkevästi.
Tässä oppitunnissa siirsit agentin prototyypistä tuotantoon Microsoft Foundryn avulla:
Seuraavassa oppitunnissa teet päinvastaisen matkan: skaalauksen sijaan tuot agentit alas yhdelle kehittäjän koneelle ja ajat ne kokonaan paikallisesti.
Building Computer Use Agents (CUA)
Vastuuvapauslauseke: Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, otathan huomioon, että automaattiset käännökset saattavat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäiskielellä on virallinen lähde. Tärkeissä asioissa suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa tämän käännöksen käytöstä aiheutuvista väärinymmärryksistä tai tulkinnoista.