![]()
Până în acest punct al cursului ai construit agenți care rulează pe laptopul tău, în interiorul unui notebook, controlați prin az login și câteva variabile de mediu. Aceasta este exact metoda corectă de a învăța. Nu este însă metoda corectă pentru a rula un agent de care mii de clienți depind la ora 3 dimineața.
Această lecție tratează decalajul dintre „funcționează pe mașina mea” și „funcționează, fiabil și accesibil, în producție”. Închidem acest decalaj folosind Microsoft Foundry și Microsoft Foundry Agent Service, construind un agent real de suport pentru clienți care include uneltele, recuperarea, memoria, evaluarea și monitorizarea.
Această lecție va acoperi:
După parcurgerea acestei lecții vei ști cum să:
Această lecție presupune că ai parcurs lecțiile anterioare și ești confortabil cu:
Vei avea nevoie și de:
az login).requirements.txt.Un agent prototip și unul de producție împart același ciclu principal — raționament, apelare unelte, răspuns. Se schimbă tot ce este în jurul acestui ciclu. Modelul constituie poate 20% dintr-un agent de producție; restul de 80% este scheletul operațional.
| Aspect | Prototip | Producție |
|---|---|---|
| Găzduire | Rulează în notebook-ul tău | Rulează ca serviciu găzduit, versionat și implementat |
| Identitate | Tokenul tău az login |
Identitate gestionată cu RBAC restrâns |
| Stare | În memorie, pierdută la restart | Externalizată (thread store, serviciu de memorie) |
| Eșec | Vezi traceback-ul | Reîncercări, fallback-uri, coadă pentru mesaje ratate, alerte |
| Cost | „Este câțiva cenți” | Urmărit pe cerere, rutat, cache-uit, bugetat |
| Calitate | Verifici manual ieșirea | Evaluată automat înainte de fiecare lansare |
| Încredere | Aprobi fiecare acțiune | Politică + uman în buclă pentru acțiuni riscante |
Reține acest tabel. Fiecare secțiune de mai jos corespunde uneia dintre aceste linii.
Există trei modele pe care le vei folosi, adesea împreună.
Obiectul agentului trăiește în procesul aplicației tale. Codul tău apelează direct furnizorul modelului; ciclul de raționament rulează în serviciul tău. Aceasta este ceea ce a făcut fiecare lecție anterioară.
Agentul este înregistrat ca resursă în Microsoft Foundry. Foundry găzduiește ciclul de raționament, stochează firele de conversație, impune siguranța conținutului și RBAC și face agentul vizibil în portalul Foundry. Aplicația ta devine un client subțire care creează fire și citește răspunsuri.
Mai mulți agenți (și unelte) sunt compuși într-un graf cu control explicit al fluxului — pași secvențiali, ramificări, noduri de aprobare umană și puncte durabile de control care permit pauză și reluare. Aceasta este capacitatea Workflows din Microsoft Agent Framework aplicată la scară de implementare.
flowchart TB
subgraph P1[Găzduit de client]
A1[Procesul aplicației dvs.] --> M1[Furnizor de model]
end
subgraph P2[Agent găzduit]
A2[Client subțire] --> F2[Serviciu Agent Foundry]
F2 --> M2[Model + Instrumente + Magazin de thread-uri]
end
subgraph P3[Flux de lucru al agentului]
A3[Orchestrator] --> S1[Agent de triere]
S1 --> S2[Agent de rezolvare]
S2 --> H[Nod de aprobare umană]
H --> S3[Agent de acțiune]
end
Implementarea unui agent nu este un simplu push. Este un ciclu, asemănător cu un ciclu de lansare software pentru că exact asta este.
flowchart LR
Create[Creează / Autor] --> Version[Versiune]
Version --> Evaluate[Evaluează offline]
Evaluate -->|trece poarta| Deploy[Distribuie găzduit]
Evaluate -->|eșuează poarta| Create
Deploy --> Observe[Observă online]
Observe --> Improve[Colectează eșecuri]
Improve --> Create
Deploy --> Retire[Retrage versiunea veche]
Ideea-cheie, preluată din Lecția 10: evaluarea offline este o poartă, nu o reflecție tardivă. O nouă versiune a agentului nu se lansează dacă nu trece pragurile tale de evaluare. Observabilitatea online aduce înapoi în setul tău de teste offline eșecurile din lumea reală. Acesta este întregul ciclu.
Scalarea unui agent este diferită de scalarea unui API web fără stare, deoarece fiecare cerere poate declanșa multiple apeluri costisitoare model și unelte. Patru tehnici suportă cea mai mare încărcare.
Gestionarea cererilor fără stare. Nu păstra stare per utilizator în memoria procesului tău. Persistă firele de conversație în depozitul de fire Foundry sau un serviciu de memorie astfel încât orice instanță poate deservi orice cerere. Aceasta este ceea ce permite scalarea orizontală — adaugă instanțe, fără sesiuni sticky.
Rutararea modelului. Nu fiecare cerere are nevoie de cel mai capabil (și costisitor) model al tău. Direcționează cererile simple — clasificarea intențiilor, răspunsuri factuale scurte — către un model mic, rapid, și păstrează modelul mare pentru raționamente reale. Foundry oferă un Model Router pentru asta, sau poți implementa un clasificator ușor singur. Vei construi versiunea DIY în laborator.
Caching al răspunsurilor. Multe întrebări de suport sunt aproape duplicate („cum îmi resetez parola?”). Cache-uiește răspunsurile la întrebările frecvente și serveste-le fără să apelezi modelul deloc. Chiar și o rată moderată de cache hit taie costurile și latența semnificativ.
Concurența și presiunea înapoi. Furnizorii de modele au limite de rată. Limitează-ți concurența, folosește reîncercări cu backoff exponențial și eșuează elegant (un răspuns în coadă „ocupat” bate un 500).
flowchart LR
Q[Interogare utilizator] --> C{A fost găsit în cache?}
C -->|da| R[Returnează răspunsul din cache]
C -->|nu| Router{Complexitate?}
Router -->|simplă| SLM[Model mic]
Router -->|complexă| LLM[Model mare]
SLM --> Out[Răspuns]
LLM --> Out
Out --> Store[Cache + urmărire]
Nu poți opera ce nu vezi. Așa cum s-a acoperit în Lecția 10, Microsoft Agent Framework emite urme OpenTelemetry nativ — fiecare apel de model, invocare unealtă și pas de orchestrare devine o span. În producție exporți aceste span-uri către Microsoft Foundry (sau orice backend compatibil OTel) astfel încât să poți:
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")
# execuția agentului este urmărită automat în interiorul acestei perioade
Atribute precum customer.tier și routed.model transformă un perete de urme într-un set de întrebări răspunzătoare („clienții enterprise sunt direcționați prea des către modelul mic?”).
Costul în agenții de producție este dominat de tokeni. Trei pârghii, în ordinea impactului:
Porțile de evaluare și controlul costurilor sunt aceeași disciplină văzută din două unghiuri: evaluarea îți spune plafonul de calitate, rutarea și caching-ul te mențin cât mai aproape de costul acestui plafon.
Guvernanță. Hosted Agents moștenesc RBAC-ul, siguranța conținutului și logarea auditului din Foundry. Oferă fiecărui agent o identitate gestionată cu privilegiul minim necesar — acces doar în citire la baza de cunoștințe, acces limitat la API-ul de ticketing, nimic mai mult.
Uman în buclă. Unele acțiuni sunt prea grave pentru a fi automatizate complet — emiterea unei rambursări, ștergerea unui cont, escaladarea către echipa juridică. Microsoft Agent Framework suportă unelte care necesită aprobarea umană: agentul propune acțiunea, execuția se oprește, un om aprobă sau respinge, apoi fluxul de lucru reia. Ai văzut această primitivă în Lecția 6; aici o implementezi.
MCP în producție. MCP permite agentului tău să consume unelte externe printr-o interfață standard. În producție, tratează fiecare server MCP ca o frontieră neîncredere: blochează versiunea serverului, rulează-l cu o identitate restrânsă, validează ieșirile, și nu expune niciodată secrete către el. Un server MCP este o dependență și dependențele sunt patchuite, auditate și limitate pe rată.
flowchart TB
subgraph Dev[Arhitectură de Dezvoltare]
D1[Caiet de note] --> D2[Cadru Agent]
D2 --> D3[Furnizor Model]
D2 --> D4[Instrumente Locale]
end
subgraph Deploy[Arhitectură de Implementare]
E1[Pipeline CI] --> E2[Poartă de evaluare]
E2 -->|trece| E3[Serviciu Agent Foundry]
E3 --> E4[Agent găzduit versiune]
end
subgraph Run[Arhitectură de rulare]
F1[Aplicație client] --> F2[Agent găzduit]
F2 --> F3[Router Model]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Serviciu memorie]
F2 --> F6[Instrumente MCP]
F2 --> F7[OTel -> trasare Foundry]
F2 --> F8[Aprobare umană]
end
Acele trei diagrame — dezvoltare, implementare, runtime — sunt același agent în trei etape ale vieții sale. Laboratorul de mai jos te va ghida în construirea lui.
Deschide code_samples/16-python-agent-framework.ipynb și parcurge-l integral. Vei asambla un agent de suport clienți Contoso cu fiecare grijă de producție integrată:
Notebook-ul este organizat astfel încât fiecare grijă de producție să fie o secțiune separată, rulabilă. Inima lui este handler-ul de cereri cu rutare-plus-caching:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Servește din cache când putem.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Rutează după complexitate pentru a controla costul.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Rulează agentul în interiorul unui span de trasare pentru observabilitate.
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. Cachează și returnează.
response_cache.set(normalize(query), response.text)
return response.text
Poarta de evaluare care păzește o lansare arată așa:
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 # implementează doar dacă poarta trece
Citește fiecare linie — notebook-ul păstrează primitivele deliberat mici astfel încât nimic să nu fie ascuns în spatele unui apel de framework.
Poarta de evaluare de mai sus rulează offline pe obiectul tău agent. Odată ce agentul este implementat ca Hosted Agent, ai nevoie de o verificare suplimentară, chiar mai ieftină: endpointul implementat răspunde efectiv?
Implementarea „cu succes” dovedește doar că planul de control a acceptat definiția — nu dovedește că agentul răspunde. O dependență lipsă, o rutare greșită a modelului sau o conexiune expirată pot lăsa o implementare verde care nu returnează nimic. Un test smoke prinde asta în secunde, la fiecare implementare, fără costul unei evaluări complete.
Acest depozit furnizează un pipeline pregătit pentru teste smoke construit pe AI Smoke Test GitHub Action:
tests/lesson-16-smoke-tests.json conține prompturi și assert-uri pentru agentul de suport Contoso (răspunsuri de politică fundamentate, căutare comenzi, menținerea subiectului, continuitatea firelor multi-turn). Cataloagele pentru agenții altor lecții sunt alăturate — vezi tests/README.md..github/workflows/smoke-test.yml se autentifică cu Azure OIDC și POST-ează fiecare prompt către endpointul Responses al agentului, eșuând jobul la orice assert nereușit.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Rulează-l din fila Actions odată ce agentul tău este implementat, furnizând endpoint-ul proiectului Foundry și numele agentului. Identitatea federată are nevoie de rolul Azure AI User la nivelul proiectului Foundry. Gândește-te la straturi ca la o piramidă: teste rapide (este accesibil și răspunde?) rulează la fiecare implementare, evaluarea offline (este suficient de bun pentru a fi lansat?) rulează înainte de promovare, iar evaluarea online (cum se descurcă în condiții reale?) rulează continuu.
Testează-ți înțelegerea înainte de a trece la sarcină.
1. Aproximativ cât dintr-un agent de producție este „modelul” și ce reprezintă restul?
2. Când ai alege un Agent Găzduit în locul unui agent găzduit pe client?
3. De ce trebuie un agent scalabil să fie fără stare în memoria procesului său propriu?
4. Ce problemă rezolvă rutarea modelului și cum se leagă de evaluare?
5. Ce este un „poartă de evaluare” și unde se află în ciclul de viață?
6. De ce trebuie un server MCP să fie tratat ca o frontieră neîncrezătoare în producție?
7. Care este singura schimbare care de obicei are cel mai mare impact asupra costului unui agent de producție și de ce?
8. Ce rol joacă atributele span-ului precum customer.tier și routed.model în observabilitate?
Ia agentul de suport clienți din laborator și întărește-l pentru un scenariu specific: agent de suport facturare pentru un abonament pentru o companie SaaS.
Livrarea ta trebuie să:
get_subscription_status, get_invoice și issue_credit (creditele peste 50$ necesită aprobare umană).Scrie un paragraf scurt (într-o celulă markdown) explicând regula de rutare a modelului pe care ai ales-o și cum ai valida-o cu trafic real. Nu există un răspuns unic corect – ești evaluat pe coerența legăturii dintre preocupările de producție.
În această lecție ai mutat un agent de la prototip la producție cu Microsoft Foundry:
Următoarea lecție face călătoria inversă: în loc să scalezi agenții în cloud, îi vei aduce în jos pe o singură mașină de dezvoltare și îi vei rula complet local.
Construirea Agenților de Utilizare a Calculatorului (CUA)
Declinare a responsabilității: Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. În timp ce ne străduim pentru acuratețe, vă rugăm să rețineți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa nativă trebuie considerat sursa autorizată. Pentru informații critice, se recomandă traducerea profesională realizată de un om. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care decurg din utilizarea acestei traduceri.