![]()
Do tego momentu kursu budowałeś agentów, którzy działają na Twoim laptopie, w notatniku, sterowani przez az login i garść zmiennych środowiskowych. To dokładnie właściwy sposób nauki. Nie jest to właściwy sposób uruchamiania agenta, na którym polega tysiące klientów o 3 nad ranem.
Ta lekcja dotyczy luki między “działa na mojej maszynie” a “działa niezawodnie i ekonomicznie w produkcji.” Zamykamy tę lukę, korzystając z Microsoft Foundry i Microsoft Foundry Agent Service, budując prawdziwego agenta wsparcia klienta, który ma narzędzia, wyszukiwanie, pamięć, ocenianie i monitorowanie.
Ta lekcja obejmie:
Po ukończeniu tej lekcji będziesz potrafił:
Ta lekcja zakłada ukończenie wcześniejszych lekcji i komfort w:
Będziesz też potrzebować:
az login).requirements.txt.Agent prototypowy i produkcyjny mają tę samą podstawową pętlę — rozumowanie, wywoływanie narzędzi, reakcja. Zmienia się wszystko wokół tej pętli. Model stanowi może 20% agenta produkcyjnego; pozostałe 80% to operacyjny szkielet.
| Obszar | Prototyp | Produkcja |
|---|---|---|
| Hostowanie | Działa w Twoim notatniku | Działa jako hostingowana usługa, wersjonowana i wdrażana stopniowo |
| Tożsamość | Twój token az login |
Zarządzana tożsamość z przypisanym RBAC |
| Stan | W pamięci, utracony po restarcie | Zewnętrzny (sklep wątków, usługa pamięci) |
| Awaria | Widzisz ślad błędu | Ponowienia prób, zapasowe opcje, dead-letter, alerty |
| Koszt | “To kilka centów” | Śledzony na żądanie, kierowany, cache’owany, budżetowany |
| Jakość | Oceniasz na oko | Oceniany automatycznie przed każdym wydaniem |
| Zaufanie | Zatwierdzasz każdą akcję | Polityka + człowiek w pętli dla działań ryzykownych |
Zapamiętaj tę tabelę. Każda sekcja poniżej odpowiada jednemu z tych wierszy.
Istnieją trzy wzorce, które będziesz używać, często łącznie.
Obiekt agenta żyje w Twoim procesie aplikacji. Twój kod wywołuje dostawcę modelu bezpośrednio; pętla rozumowania działa w Twojej usłudze. To jest to, co robiły wszystkie poprzednie lekcje.
Agent jest zarejestrowany jako zasób w Microsoft Foundry. Foundry hostuje pętlę rozumowania, przechowuje wątki, wymusza bezpieczeństwo treści i RBAC, oraz udostępnia agenta w portalu Foundry. Twoja aplikacja staje się cienkim klientem, który tworzy wątki i odczytuje odpowiedzi.
Wielu agentów (i narzędzi) jest łączonych w graf z wyraźnym przepływem sterowania — kroki sekwencyjne, rozgałęzienia, węzły zatwierdzenia przez człowieka oraz trwałe punkty kontrolne, które mogą zatrzymać i wznowić pracę. To jest funkcjonalność Workflows Microsoft Agent Framework zastosowana na skalę wdrożenia.
flowchart TB
subgraph P1[Hostowane u klienta]
A1[Twój proces aplikacji] --> M1[Dostawca modelu]
end
subgraph P2[Hostowany agent]
A2[Lekki klient] --> F2[Usługa agenta Foundry]
F2 --> M2[Model + narzędzia + magazyn wątków]
end
subgraph P3[Przepływ pracy agenta]
A3[Orkiestrator] --> S1[Agent triage]
S1 --> S2[Agent rozstrzygający]
S2 --> H[Węzeł zatwierdzenia przez człowieka]
H --> S3[Agent działań]
end
Wdrożenie agenta to nie pojedynczy push. To pętla, bardzo podobna do cyklu wydawania oprogramowania, bo dokładnie tym jest.
flowchart LR
Create[Utwórz / Autor] --> Version[Wersja]
Version --> Evaluate[Oceń offline]
Evaluate -->|przechodzi bramę| Deploy[Wdróż hostowane]
Evaluate -->|nie przechodzi bramy| Create
Deploy --> Observe[Obserwuj online]
Observe --> Improve[Zbierz błędy]
Improve --> Create
Deploy --> Retire[Wycofaj starą wersję]
Kluczowa idea, przeniesiona z Lekcji 10: ocena offline jest bramką, a nie dodatkiem. Nowa wersja agenta nie zostanie wypuszczona, jeśli nie spełni progów oceny. Obserwowalność online zwraca błędy z rzeczywistego świata do twojego zestawu testów offline. To jest cała pętla.
Skalowanie agenta różni się od skalowania bezstanowego API sieciowego, ponieważ każde żądanie może wywołać wiele kosztownych wywołań modeli i narzędzi. Cztery techniki niosą większość obciążenia.
Obsługa bezstanowa żądań. Nie przechowuj stanu per-użytkownik w pamięci procesu. Przechowuj wątki rozmów w magazynie wątków Foundry lub usłudze pamięci, aby dowolna instancja mogła obsłużyć każde żądanie. To pozwala skalować poziomo — dodajesz instancje, brak sesji przypisanych do maszyny.
Routowanie modeli. Nie każde żądanie wymaga twojego najwydajniejszego (i najdroższego) modelu. Kieruj proste żądania — klasyfikację intencji, krótkie faktyczne odpowiedzi — do małego, szybkiego modelu, a duży model zostaw dla prawdziwego rozumowania. Foundry’s Model Router zrobi to za ciebie, albo możesz zaimplementować lekki klasyfikator samodzielnie. W labie zbudujesz wersję DIY.
Cache’owanie odpowiedzi. Wiele zapytań o wsparcie jest prawie duplikatami (“jak zresetować hasło?”). Cache’uj odpowiedzi na typowe pytania i serwuj je bez wywoływania modelu. Nawet umiarkowany wskaźnik trafień w cache znacząco obniża koszty i opóźnienia.
Współbieżność i backpressure. Dostawcy modeli mają limity szybkości. Ogranicz współbieżność, stosuj ponowienia z eksponencjalnym opóźnieniem i reaguj łagodnie na błędy (odpowiedź w kolejce “pracujemy nad tym” jest lepsza niż błąd 500).
flowchart LR
Q[Zapytanie użytkownika] --> C{Trafienie w pamięci podręcznej?}
C -->|tak| R[Zwróć odpowiedź z pamięci podręcznej]
C -->|nie| Router{Złożoność?}
Router -->|prosta| SLM[Mały model]
Router -->|złożona| LLM[Duży model]
SLM --> Out[Odpowiedź]
LLM --> Out
Out --> Store[Pamięć podręczna + śledzenie]
Nie możesz zarządzać tym, czego nie widzisz. Jak omówiono w Lekcji 10, Microsoft Agent Framework natywnie emituje ślady OpenTelemetry — każde wywołanie modelu, uruchomienie narzędzia i krok orkiestracji staje się zakresem (span). W produkcji eksportujesz te zakresy do Microsoft Foundry (lub dowolnego backendu kompatybilnego z OTel), aby:
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")
# wykonanie agenta jest automatycznie śledzone wewnątrz tego zakresu
Atrybuty takie jak customer.tier i routed.model zamieniają ścianę śladów w pytania, na które można odpowiedzieć (“czy klienci korporacyjni są zbyt często kierowani do małego modelu?”).
Koszty w agentach produkcyjnych dominują tokeny. Trzy dźwignie, według wpływu:
Bramki oceny i kontrola kosztów to ta sama dyscyplina widziana z dwóch stron: ocena mówi o minimalnej jakości, a routowanie i cache’owanie utrzymują koszty jak najbliżej tego minimum.
Zarządzanie. Hosted Agents dziedziczą RBAC, bezpieczeństwo treści i logowanie audytu Foundry. Przyznaj każdemu agentowi zarządzaną tożsamość z minimalnymi uprawnieniami — dostęp tylko do odczytu bazy wiedzy, dostęp do API obsługi zgłoszeń z ograniczeniami, nic więcej.
Człowiek w pętli. Niektóre akcje są zbyt poważne, żeby automatyzować je w całości — wydawanie zwrotu pieniędzy, usuwanie konta, eskalacja do zespołu prawnego. Microsoft Agent Framework obsługuje narzędzia wymagające zatwierdzenia: agent proponuje akcję, wykonanie jest wstrzymane, człowiek zatwierdza lub odrzuca, a przepływ pracy jest wznawiany. Widziałeś prymityw w Lekcji 6; tutaj go wdrażasz.
MCP w produkcji. MCP pozwala agentowi korzystać z zewnętrznych narzędzi przez standardowy interfejs. W produkcji traktuj każdy serwer MCP jako nienawierzony obszar: przypnij wersję serwera, uruchamiaj go z ograniczoną tożsamością, weryfikuj jego wyniki, nigdy nie ujawniaj mu sekretów. Serwer MCP to zależność, a zależności są łatane, audytowane i ograniczane pod względem częstotliwości.
flowchart TB
subgraph Dev[Architektura rozwojowa]
D1[Notatnik] --> D2[Framework agenta]
D2 --> D3[Dostawca modelu]
D2 --> D4[Narzędzia lokalne]
end
subgraph Deploy[Architektura wdrożeniowa]
E1[Pipeline CI] --> E2[Brama oceny]
E2 -->|zaliczony| E3[Usługa agenta Foundry]
E3 --> E4[Wersjonowany hostowany agent]
end
subgraph Run[Architektura czasu wykonywania]
F1[Aplikacja kliencka] --> F2[Hostowany agent]
F2 --> F3[Router modeli]
F2 --> F4[Wyszukiwanie Azure AI RAG]
F2 --> F5[Usługa pamięci]
F2 --> F6[Narzędzia MCP]
F2 --> F7[OTel -> śledzenie Foundry]
F2 --> F8[Zatwierdzenie przez człowieka]
end
Te trzy diagramy — rozwój, wdrożenie, uruchomienie — to ten sam agent w trzech etapach swojego życia. Laboratorium, które następuje, przeprowadzi cię przez jego budowę.
Otwórz code_samples/16-python-agent-framework.ipynb i przepracuj go od początku do końca. Złożysz agenta wsparcia klienta Contoso z wszystkimi elementami produkcyjnymi:
Notatnik jest zorganizowany tak, że każda kwestia produkcyjna to samodzielna, uruchamialna sekcja. Sercem jest obsługiwacz żądań łączący routowanie i cache’owanie:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Serwuj z pamięci podręcznej, gdy to możliwe.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Kieruj według złożoności, aby kontrolować koszty.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Uruchom agenta wewnątrz zakresu śledzenia dla obserwowalności.
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. Buforuj i zwracaj.
response_cache.set(normalize(query), response.text)
return response.text
Bramką oceny, która pilnuje wydania, jest:
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 # wdrażaj tylko jeśli brama zostanie zaliczona
Przeczytaj każde zdanie — notatnik celowo trzyma prymitywy małe, by nic nie było ukryte za wywołaniem frameworka.
Powyższa bramka oceny działa offline na obiekcie agenta. Po wdrożeniu jako Hosted Agent potrzebujesz jeszcze jednej, jeszcze tańszej kontroli: czy wdrożony punkt końcowy faktycznie odpowiada?
“Pomyślne” wdrożenie dowodzi tylko, że płaszczyzna kontroli zaakceptowała definicję — nie dowodzi, że agent odpowiada. Brakująca zależność, błędne routowanie modelu lub wygasłe połączenie mogą pozostawić zielone wdrożenie, które nic nie zwraca. Test dymny wykrywa to w kilka sekund, przy każdym wdrożeniu, bez kosztów pełnej ewaluacji.
To repozytorium zawiera gotowy potok testów dymnych oparty na GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json zawiera prompt i asercje dla agenta wsparcia Contoso (podstawowe odpowiedzi polityki, wyszukiwanie zamówienia, pozostawanie w temacie i ciągłość wieloetapowej konwersacji). Katalogi dla agentów z innych lekcji znajdują się obok — patrz tests/README.md..github/workflows/smoke-test.yml loguje się za pomocą Azure OIDC i wysyła każdą prośbę HTTP POST na endpoint Odpowiedzi agenta, przerywając zadanie przy wykryciu błędu testu.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Uruchom to z zakładki Actions po wdrożeniu agenta, podając punkt końcowy projektu Foundry i nazwę agenta. Tożsamość federowana musi mieć rolę Azure AI User w zakresie projektu Foundry. Warstwy można sobie wyobrazić jako piramidę: testy dymne (dostępny i reagujący?) uruchamiane są przy każdym wdrożeniu, ocena offline (czy jest wystarczająco dobra, by wdrażać?) uruchamiana jest przed promocją, a ocena online (jak działa w środowisku produkcyjnym?) działa ciągle.
Przetestuj swoją wiedzę zanim przejdziesz do zadania.
1. Około jaką część produkcyjnego agenta stanowi „model”, a co stanowi reszta?
2. Kiedy wybrałbyś Hosted Agent zamiast klienta-hosted agenta?
3. Dlaczego skalowalny agent musi być bezstanowy w pamięci własnego procesu?
4. Jaki problem rozwiązuje trasowanie modeli i jak się ono ma do oceny?
5. Co to jest „brama oceny” i gdzie znajduje się w cyklu życia?
6. Dlaczego serwer MCP powinien być traktowany jako nieniezaufana granica w produkcji?
7. Która pojedyncza zmiana zwykle ma największy wpływ na koszt produkcyjnego agenta i dlaczego?
8. Jaką rolę odgrywają atrybuty powierzchniowe, takie jak customer.tier i routed.model, w obserwowalności?
Weź agenta wsparcia klienta z laboratorium i wzmocnij go pod konkretny scenariusz: agent wsparcia bilingowego dla firmy SaaS.
Twoje zgłoszenie powinno:
get_subscription_status, get_invoice, oraz issue_credit (kredyty powyżej 50$ wymagają zatwierdzenia przez człowieka).Napisz krótki akapit (w komórce markdown) wyjaśniający, którą regułę trasowania modeli wybrałeś i jak zweryfikowałbyś ją na prawdziwym ruchu. Nie ma jednej poprawnej odpowiedzi — oceniana będzie spójność powiązania kwestii produkcyjnych.
W tej lekcji przeniosłeś agenta od prototypu do produkcji z użyciem Microsoft Foundry:
Następna lekcja podąża w przeciwnym kierunku: zamiast skalować agentów w chmurze, przeniesiesz ich na dół na pojedynczą maszynę deweloperską i będziesz uruchamiać je całkowicie lokalnie.
Budowanie agentów do obsługi komputera (CUA)
Tworzenie lokalnych agentów AI
Zastrzeżenie: Niniejszy dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Choć dążymy do dokładności, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub niedokładności. Oryginalny dokument w jego języku źródłowym należy uznawać za autorytatywne źródło. W przypadku informacji krytycznych zalecane jest skorzystanie z profesjonalnego tłumaczenia wykonanego przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.