![]()
До този момент в курса сте изграждали агенти, които работят на вашия лаптоп, в тетрадка, управлявани чрез az login и няколко променливи на средата. Това е точно правилният начин за учене. Но не е правилният начин за работа на агент, на когото хиляди клиенти разчитат в 3 часа през нощта.
Т този урок е за разликата между „работи на моята машина“ и „работи надеждно и на достъпна цена в продукция“. Ние затваряме тази разлика с помощта на Microsoft Foundry и Microsoft Foundry Agent Service, като изграждаме реален агент за клиентска поддръжка с инструменти, извличане, памет, оценка и мониторинг.
Този урок ще обхване:
След завършване на този урок ще знаете как да:
Този урок предполага, че сте преминали през по-ранните уроци и сте запознати със:
Ще имате нужда и от:
az login).requirements.txt.Прототипен агент и продукционен агент споделят същия основен цикъл — разсъждава, вика инструменти, отговаря. Променя се всичко, което е обвито около този цикъл. Моделът е може би 20% от продукционния агент; останалите 80% са оперативният скелет.
| Аспект | Прототип | Продукция |
|---|---|---|
| Хостинг | Работи в тетрадката ви | Работи като хоствана услуга, версионирана и разпространявана |
| Идентичност | Вашият токен az login |
Управлявана идентичност с обхватено RBAC |
| Състояние | В паметта, губи се при рестарт | Екстернализирано (съхранение на нишки, услуга за памет) |
| Грешки | Виждате стека с грешки | Повторни опити, резервни варианти, мъртви писма, аларми |
| Цена | „Няколко стотинки“ | Следи се на заявка, маршрутизира се, кешира се, бюджетират се разходи |
| Качество | Гледате изхода с очи | Автоматично се оценява преди всеки релийз |
| Доверие | Одобрявате всяко действие | Политика + човек в цикъла за рискови действия |
Запазете тази таблица в ума си. Всеки раздел по-долу съответства на един от тези редове.
Има три патерна, които ще използвате често в комбинация.
Агентът живее вътре в вашия процес на приложението. Вашият код вика директно доставчика на модел; цикълът на разсъждение работи във вашата услуга. Това е това, което правехме до момента във всеки урок.
Агентът е регистриран като ресурс в Microsoft Foundry. Foundry хоства цикъла на разсъждение, съхранява нишки, налага сигурност на съдържание и RBAC, и прави агента видим в портала Foundry. Вашето приложение става тънък клиент, който създава нишки и чете отговори.
Множество агенти (и инструменти) се композират в граф с изрично управление на потока — последователни стъпки, разклонения, възли с човешко одобрение и издръжливи контрольни точки, които могат да спират и продължават. Това е възможност на Microsoft Agent Framework Workflows приложена при мащабиране на деплоймънт.
flowchart TB
subgraph P1[Клиентски хостван]
A1[Процес на Вашето приложение] --> M1[Доставчик на модел]
end
subgraph P2[Хостван агент]
A2[Тънък клиент] --> F2[Услуга на Foundry агент]
F2 --> M2[Модел + Инструменти + Магазин за нишки]
end
subgraph P3[Работен процес на агент]
A3[Оркестратор] --> S1[Агент за триаж]
S1 --> S2[Агент разрешител]
S2 --> H[Възел за човешко одобрение]
H --> S3[Агент за действие]
end
Деплоймънтът на агент не е еднократно „пушване“. Той е цикъл и изглежда много като софтуерен релийз цикъл, защото точно това е.
flowchart LR
Create[Създай / Автор] --> Version[Версия]
Version --> Evaluate[Оцени офлайн]
Evaluate -->|преминава шлюза| Deploy[Разположи хоствано]
Evaluate -->|не преминава шлюза| Create
Deploy --> Observe[Наблюдавай онлайн]
Observe --> Improve[Събери грешки]
Improve --> Create
Deploy --> Retire[Изтегли старата версия]
Основната идея, пренесена от Урок 10: офлайн оценката е гейт, а не следваща мисъл. Нова версия на агент не се пуска, освен ако не премине вашите оценъчни прагове. Онлайн наблюдаемостта след това връща реални грешки обратно към офлайн тестовете. Това е целият цикъл.
Мащабирането на агент е различно от мащабирането на безсъстоянен уеб API, защото всяка заявка може да задейства множество скъпи повиквания към модели и инструменти. Четири техники понасят основната тежест.
Обработка на безсъстояни заявки. Не пазете състояние на потребител във вътрешната памет. Съхранявайте нишките от разговори във Foundry thread store или услуга за памет, така че всяка инстанция да може да обработва всяка заявка. Това позволява хоризонтално мащабиране — добавят се инстанции, без sticky сесии.
Маршрутизиране на модели. Не всяка заявка изисква най-мощния (и най-скъпия) ви модел. Маршрутизирайте прости заявки — класификация на намерения, кратки фактически отговори — към малък и бърз модел, а големия модел оставете за истински разсъждения. Foundry Model Router може да направи това вместо вас, или можете да имплементирате лек класификатор сами. В лабораторията ще изградите DIY версия.
Кеширане на отговори. Много запитвания за поддръжка са близнаци („как да рестартирам паролата си?“). Кеширайте отговори на често срещани въпроси и ги сервирайте без да засягате модела изобщо. Дори и умерен кеш хит намалява значително разходите и латентността.
Паралелизъм и обратно налягане. Доставчиците на модел имат лимити за заявките. Ограничете паралелизма, използвайте повторни опити с експоненциално забавяне и нека провалите са грациозни (чаканият отговор „работим по въпроса“ е по-добър от грешка 500).
flowchart LR
Q[Запитване от потребителя] --> C{Намерена ли е кеширана стойност?}
C -->|да| R[Връщане на кеширания отговор]
C -->|не| Router{Сложност?}
Router -->|проста| SLM[Малък модел]
Router -->|сложна| LLM[Голям модел]
SLM --> Out[Отговор]
LLM --> Out
Out --> Store[Кеш + проследяване]
Не можете да управлявате това, което не виждате. Както е описано в Урок 10, Microsoft Agent Framework излъчва OpenTelemetry трасета нативно — всяко повикване на модел, инструмент и стъпка от оркестрацията става span. В продукция ги експортирате към Microsoft Foundry (или какъвто и да е OTel-съвместим бекенд), за да можете:
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")
# изпълнението на агента се проследява автоматично вътре в този интервал
Атрибути като customer.tier и routed.model преобразуват множество трасета във въпроси, на които може да се отговори („дали корпоративните клиенти твърде често се насочват към малкия модел?“).
Разходите в продукционните агенти са доминирани от токени. Три лоста, по степен на въздействие:
Оценъчните гейтове и контролът на разходите са една и съща дисциплина, разгледана от две страни: оценката ви казва дъното по качество, маршрутизирането и кешът ви държат възможно най-близо до това дъно по цена.
Управление. Hosted Agents наследяват RBAC, безопасност на съдържанието и одитния журнал на Foundry. Дайте на всеки агент управлявана идентичност с минималните привилегии — само четене на базата знания, обхватен достъп до API за тикети, нищо повече.
Човек в цикъла. Някои действия са твърде важни, за да се автоматизират напълно — издаване на възстановяване, изтриване на акаунт, ескалация към юридическия екип. Microsoft Agent Framework поддържа инструменти с необходимо одобрение: агентът предлага действието, изпълнението спира, човек одобрява или отказва, работният поток продължава. Виждали сте примитива в Урок 6; тук го деплойвате.
MCP в продукция. MCP позволява на вашия агент да използва външни инструменти чрез стандартен интерфейс. В продукция третирайте всеки MCP сървър като ненадеждна граница: фиксирайте версията на сървъра, пускайте го с обхватена идентичност, валидирайте изхода му и никога не му разкривайте тайни. MCP сървърът е зависимост, а зависимостите се създават пачове, одитират се и имат ограничение на честотата.
flowchart TB
subgraph Dev[Архитектура на разработка]
D1[Бележник] --> D2[Агенска платформа]
D2 --> D3[Доставчик на модел]
D2 --> D4[Локални инструменти]
end
subgraph Deploy[Архитектура на разгръщане]
E1[CI конвейер] --> E2[Портал за оценка]
E2 -->|успешно| E3[Служба за агент на Foundry]
E3 --> E4[Версиониран хостван агент]
end
subgraph Run[Архитектура на изпълнение]
F1[Клиентско приложение] --> F2[Хостван агент]
F2 --> F3[Маршрутизатор на модел]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Услуга за памет]
F2 --> F6[MCP инструменти]
F2 --> F7[OTel -> Проследяване на Foundry]
F2 --> F8[Човешко одобрение]
end
Тези три диаграми — разработка, деплоймънт, runtime — са един и същ агент на три етапа от живота си. Следващата лаборатория ви води през изграждането му.
Отворете code_samples/16-python-agent-framework.ipynb и го преминете напълно. Ще съставите агент за клиентска поддръжка на Contoso с всички производствени компоненти:
Тетрадката е организирана така, че всяка производствена грижа е самостоятелен, изпълним раздел. Сърцето е хендлърът за заявки с маршрутизиране и кеширане:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Обслужвайте от кеша, когато е възможно.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Насочвайте според сложността, за да контролирате разходите.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Стартирайте агента в рамките на трасировъчен спан за наблюдаемост.
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. Кеширайте и връщайте.
response_cache.set(normalize(query), response.text)
return response.text
Оценъчният гейт за релийз изглежда така:
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 # внедряване само ако порталът премине проверки
Прочетете всеки ред — тетрадката държи примитивите умишлено малки, за да не е скрито нищо зад фреймворк повикване.
Оценъчният гейт по-горе се изпълнява офлайн срещу вашия агент обект. След като агентът е деплойнат като Hosted Agent, трябва още една, дори по-евтина проверка: дали деплойнатият endpoint всъщност отговаря?
Успешното деплойване доказва само, че контролният план е приел дефиницията — не доказва, че агентът отговаря. Липсваща зависимост, неправилно маршрутизиране на модел или изтекла връзка може да остави зелено деплойване, което не връща нищо. Smoke тест хваща това за секунди, при всяко деплойване, без разходите на пълна оценка.
Това хранилище предлага готов за използване smoke-тест пайплайн, изградена върху GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json съдържа подсказки и твърдения за агента за поддръжка на Contoso (политически базирани отговори, проверка на поръчка, оставане по темата и многоходова съгласуваност на нишка). Каталози за агенти от други уроци са заедно с него — вижте tests/README.md..github/workflows/smoke-test.yml влиза в Azure OIDC и POST-ва всяка подсказка към endpoint-а Responses на агента, неуспех при всяко провалено твърдение.- name: Smoke-test hosted agent
uses: JFolberth/ai-smoketest@v1
with:
project_endpoint: $
agent_name: ContosoSupportAgent
tests_file: tests/lesson-16-smoke-tests.json
Стартирайте го от раздела Actions, след като вашият агент бъде разположен, като предоставите крайна точка на вашия Foundry проект и име на агента. Федеративната идентичност трябва да има ролята Azure AI User с обхват Foundry проект. Помислете за слоевете като за пирамида: тестовете за задимяване (достъпен ли е и отговаря ли?) се изпълняват при всяко разполагане, офлайн оценката (достатъчно ли е добър, за да се пусне?) се прави преди промоция, а онлайн оценката (как се представя в реална среда?) се извършва непрекъснато.
Тествайте разбирането си преди да преминете към задачата.
1. Приблизително колко от един продукционен агент представлява „моделът“ и какво е останалото?
2. Кога бихте избрали Hosted Agent пред агент, хостван на клиент?
3. Защо мащабируем агент трябва да бъде безсъстояние в паметта на своя процес?
4. Какъв проблем решава маршрутизирането на модела и как е свързано с оценката?
5. Какво представлява „стража за оценка“ и къде в жизнения цикъл е разположен?
6. Защо MCP сървърът трябва да се третира като небезопасна граница в продукция?
7. Коя една промяна обикновено има най-голямо въздействие върху разходите за продукционен агент и защо?
8. Каква роля играят атрибутите на спанове като customer.tier и routed.model в наблюдаемостта?
Вземете агента за клиентска поддръжка от лабораторията и го заздравете за конкретен сценарий: агент за поддръжка на абонаментно фактуриране за SaaS компания.
Вашето подаване трябва да:
get_subscription_status, get_invoice и issue_credit (кредити над $50 изискват одобрение от човек).Напиши кратък параграф (в markdown клетка), обясняващ кой модел-маршрутизиран правил сте избрали и как бихте го валидирали с истински трафик. Няма единствено правилен отговор — оценяват се дали продукционните съображения са свързани по последователен начин.
В този урок преместихте агент от прототип към продукция с Microsoft Foundry:
Следващият урок поема в обратната посока: вместо да мащабирате агенти към облака, ще ги изнесете надолу на една разработваща машина и ще ги изпълнявате изцяло локално.
Създаване на агенти за употреба на компютър (CUA)
Създаване на локални AI агенти
Отказ от отговорност: Този документ е преведен с помощта на AI преводачески услуга Co-op Translator. Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.