![]()
Do tego momentu w kursie tworzyłeś agentów działających na twoim laptopie, wewnątrz notatnika, uruchamianych przez az login i garść zmiennych środowiskowych. To dokładnie właściwy sposób na naukę. To nie jest właściwy sposób na uruchomienie agenta, od którego zależy 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ę używając Microsoft Foundry i Microsoft Foundry Agent Service, tworząc rzeczywistego agenta obsługi klienta, który ma narzędzia, wyszukiwanie, pamięć, ocenę i monitorowanie.
Ta lekcja obejmie:
Po ukończeniu tej lekcji będziesz potrafił:
Ta lekcja zakłada, że ukończyłeś wcześniejsze lekcje i czujesz się komfortowo z:
Będziesz również potrzebować:
az login).requirements.txt.Agent prototypowy i produkcyjny mają tę samą podstawową pętlę — rozumowanie, wywołanie narzędzi, odpowiedź. Zmienia się wszystko wokół tej pętli. Model to około 20% produkcyjnego agenta; pozostałe 80% to szkielet operacyjny.
| Aspekt | Prototyp | Produkcja |
|---|---|---|
| Hostowanie | Działa w twoim notatniku | Działa jako usługa hostowana, wersjonowana i wdrażana |
| Tożsamość | Twój token az login |
Zarządzana tożsamość z RBAC o ograniczonym zasięgu |
| Stan | Pamięć wewnętrzna, tracony po restarcie | Zewnętrzny (magazyn wątków, serwis pamięci) |
| Awaria | Widoczny traceback | Ponowienia, odzyskiwanie, dead-letter, alerty |
| Koszt | “To kilka centów” | Śledzony na żądanie, trasowany, cache’owany, budżetowany |
| Jakość | Oceniasz wzrokowo rezultat | Automatyczna ocena przed każdą wersją |
| Zaufanie | Zatwierdzasz każde działanie | Polityka + człowiek w pętli dla ryzykownych działań |
Zapamiętaj tę tabelę. Każda sekcja poniżej odpowiada jednemu z tych wierszy.
Istnieją trzy wzorce, których będziesz używać, często w kombinacji.
Obiekt agenta żyje wewnątrz twojego procesu aplikacji. Twój kod wywołuje dostawcę modelu bezpośrednio; pętla rozumowania działa w twojej usłudze. Tak robiliśmy to we wszystkich poprzednich lekcjach.
Agent jest zarejestrowany jako zasób w Microsoft Foundry. Foundry hostuje pętlę rozumowania, przechowuje wątki, wymusza bezpieczeństwo treści i RBAC, a także udostępnia agenta w portalu Foundry. Twoja aplikacja staje się cienkim klientem, który tworzy wątki i odczytuje odpowiedzi.
Wiele agentów (i narzędzi) jest komponowanych w graf z explicytnym przepływem sterowania — kolejne kroki, rozgałęzienia, zatwierdzenia ludzkie i trwałe punkty kontrolne, które mogą się zatrzymać i wznowić. To jest funkcja Workflows Microsoft Agent Framework zastosowana na skalę wdrożenia.
flowchart TB
subgraph P1[Hostowane przez 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łania]
end
Wdrażanie agenta to nie jednorazowy push. To pętla i bardzo przypomina cykl wydawniczy oprogramowania, ponieważ dokładnie taki jest.
flowchart LR
Create[Utwórz / Autor] --> Version[Wersja]
Version --> Evaluate[Oceń offline]
Evaluate -->|przechodzi bramkę| Deploy[Wdróż hostowane]
Evaluate -->|nie przechodzi bramki| Create
Deploy --> Observe[Obserwuj online]
Observe --> Improve[Zbieraj błędy]
Improve --> Create
Deploy --> Retire[Wycofaj starą wersję]
Kluczowa idea, przejęta z Lekcji 10: ewaluacja offline jest bramką, a nie pomyłką z tyłu głowy. Nowa wersja agenta nie jest wydana, chyba że spełni twoje progi ewaluacji. Online obserwowalność przepuszcza rzeczywiste błędy z powrotem do zestawu testowego offline. To jest cała pętla.
Skalowanie agenta różni się od skalowania bezstanowego API webowego, ponieważ każde żądanie może wywołać wiele kosztownych wywołań modeli i narzędzi. Cztery techniki dźwigają większość obciążenia.
Obsługa bezstanowych żądań. Nie przechowuj żadnego stanu użytkownika w pamięci procesu. Przechowuj wątki rozmów w magazynie wątków Foundry lub w serwisie pamięci, tak aby każda instancja mogła obsłużyć każde żądanie. To pozwala skalować horyzontalnie — dodajesz instancje, bez sesji przyklejonych.
Trasowanie modelu. Nie każde żądanie wymaga najbardziej zaawansowanego (i najdroższego) modelu. Kieruj proste żądania — klasyfikację intencji, krótkie odpowiedzi faktograficzne — do małego, szybkiego modelu, a duży zostaw na prawdziwe rozumowanie. Foundry ma Model Router do tego, lub możesz sam zaimplementować lekki klasyfikator. W laboratorium zbudujesz wersję DIY.
Cache’owanie odpowiedzi. Wiele zapytań wsparcia to niemal duplikaty (“jak zresetować hasło?”). Pamiętaj odpowiedzi na najczęstsze pytania i serwuj je bez wywoływania modelu wcale. Nawet umiarkowany współczynnik trafień cache znacząco redukuje koszt i opóźnienie.
Współbieżność i backpressure. Dostawcy modeli mają limity szybkości. Ograniczaj współbieżność, stosuj ponowienia z wykładniczym opóźnieniem i łagodnie obsługuj błędy (kolejkowana odpowiedź “pracujemy nad tym” jest lepsza niż błąd 500).
flowchart LR
Q[Zapytanie użytkownika] --> C{Trafienie w pamięć podręczną?}
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 + ślad]
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, narzędzia i krok orkiestracji stają się segmentem. W produkcji eksportujesz te segmenty do Microsoft Foundry (lub dowolnego backendu kompatybilnego z OTel), aby móc:
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 w tym zakresie
Atrybuty takie jak customer.tier i routed.model zamieniają ścianę śladów w pytania z odpowiedziami (“czy klienci korporacyjni zbyt często są kierowani do małego modelu?”).
Koszty w agentach produkcyjnych dominują tokeny. Trzy dźwignie, według wpływu:
Bramki ewaluacji i kontrola kosztów to ta sama dyscyplina oglądana z dwóch stron: ewaluacja mówi ci o podstawie jakości, trasowanie i cache’owanie trzymają cię możliwie blisko kosztu tej podstawy.
Zarządzanie. Hosted Agents dziedziczą RBAC Foundry, bezpieczeństwo treści i logowanie audytu. Przydziel każdemu agentowi zarządzaną tożsamość z najmniejszym potrzebnym uprawnieniem — dostęp tylko do odczytu bazy wiedzy, ograniczony dostęp do API ticketów, nic więcej.
Człowiek w pętli. Niektóre działania są zbyt poważne, by je automatyzować całkowicie — zwrot pieniędzy, usunięcie konta, eskalacja do zespołu prawnego. Microsoft Agent Framework wspiera narzędzia wymagające zatwierdzenia: agent proponuje działanie, wykonywanie zatrzymuje się, człowiek zatwierdza lub odrzuca, a przepływ wznowiony. Widziałeś tę prymitywę w Lekcji 6; tutaj ją 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 granicę nieufną: ustal wersję serwera, uruchom z ograniczoną tożsamością, weryfikuj wyjścia i nigdy nie udostępniaj mu sekretów. Serwer MCP to zależność, a zależności są patchowane, audytowane i limitowane.
flowchart TB
subgraph Dev[Architektura rozwoju]
D1[Notatnik] --> D2[Framework agenta]
D2 --> D3[Dostawca modelu]
D2 --> D4[Narzędzia lokalne]
end
subgraph Deploy[Architektura wdrożenia]
E1[Pipeline CI] --> E2[Brama ewaluacji]
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 modelu]
F2 --> F4[Azure AI Search 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, czas działania — pokazują tego samego agenta na trzech etapach życia. Następne laboratorium poprowadzi cię przez budowę.
Otwórz code_samples/16-python-agent-framework.ipynb i przejdź przez niego od początku do końca. Stworzysz agenta wsparcia klienta Contoso z wszelkimi elementami produkcyjnymi:
Notatnik jest zorganizowany tak, że każda kwestia produkcyjna to samodzielna, wykonalna sekcja. Sercem jest obsługa żądań łącząca trasowanie 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
Bramka ewaluacji strzegąca wydania wygląda tak:
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żdy wiersz — notatnik celowo utrzymuje prymitywy małe, by nic nie było ukryte za wywołaniem frameworka.
Bramka ewaluacji powyżej działa offline przeciwko twojemu obiektowi agenta. Po wdrożeniu jako Hosted Agent potrzebujesz jeszcze jednej, jeszcze tańszej kontroli: czy wdrożony endpoint faktycznie odpowiada?
„Pomyślne” wdrożenie tylko dowodzi, że płaszczyzna kontrolna zaakceptowała definicję — nie dowodzi, że agent odpowiada. Brakująca zależność, złe trasowanie modelu albo wygasłe połączenie mogą zostawić zielone wdrożenie, które nic nie zwraca. Test dymny wyłapuje to w ciągu sekund, przy każdym wdrożeniu, bez kosztów pełnej ewaluacji.
To repozytorium zawiera gotowy do użycia potok testów dymnych oparty na akcji GitHub AI Smoke Test:
tests/lesson-16-smoke-tests.json zawiera podpowiedzi i asercje dla agenta wsparcia Contoso (fundamenty odpowiedzi na politykę, wyszukiwanie zamówienia, trzymanie się tematu i ciągłość wątków wielokrokowych). Katalogi agentów innych lekcji znajdują się tuż obok — zobacz tests/README.md..github/workflows/smoke-test.yml loguje się przez Azure OIDC i wysyła każde zapytanie do endpointu Responses agenta, przerywając zadanie przy każdej niezgodności asercji.- 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 go z zakładki Actions po wdrożeniu agenta, podając punkt końcowy projektu Foundry oraz nazwę agenta. Tożsamość federowana musi mieć rolę Azure AI User w zakresie projektu Foundry. Pomyśl o warstwach jak o piramidzie: testy dymne (czy jest osiągalny i odpowiada?) uruchamiane są przy każdym wdrożeniu, ocena offline (czy jest wystarczająco dobra do wysłania?) uruchamia się przed promocją, a ocena online (jak radzi sobie w środowisku rzeczywistym?) 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 agenta hostowanego u klienta?
3. Dlaczego skalowalny agent musi być bezstanowy w pamięci własnego procesu?
4. Jakie problemy rozwiązuje routing modelu i jak odnosi się do oceny?
5. Co to jest „brama oceny” i gdzie znajduje się w cyklu życia?
6. Dlaczego serwer MCP powinien być traktowany jako nieufna granica w produkcji?
7. Jaka pojedyncza zmiana zwykle ma największy wpływ na koszt agenta produkcyjnego i dlaczego?
8. Jaką rolę pełnią atrybuty span takie jak customer.tier i routed.model w obserwowalności?
Weź agenta wsparcia klienta z laboratorium i dostosuj go do konkretnego scenariusza: agenta wsparcia rozliczeń subskrypcyjnych dla firmy SaaS.
Twoje zgłoszenie powinno:
get_subscription_status, get_invoice oraz issue_credit (kredyty powyżej 50 USD wymagają zatwierdzenia przez człowieka).Napisz krótki akapit (w komórce markdown) wyjaśniający, którą regułę routingu modelu wybrałeś i jak zweryfikujesz ją na prawdziwym ruchu. Nie ma jednej poprawnej odpowiedzi — oceniane będzie, czy kwestie produkcyjne są spójnie ze sobą powiązane.
W tej lekcji przeniosłeś agenta z prototypu do produkcji z użyciem Microsoft Foundry:
Następna lekcja to droga odwrotna: zamiast skalować agentów w chmurze, przeniesiesz ich na dół na pojedynczą maszynę deweloperską i uruchomisz całkowicie lokalnie.
Budowanie agentów do użycia 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.