![]()
До този момент в курса сте създали агенти, които работят на вашия лаптоп, в рамките на бележник, управлявани чрез az login и няколко променливи на околната среда. Това е точно правилният начин за учене. Но не е правилният начин да пускате агент, на когото хиляди клиенти разчитат в 3 сутринта.
Този урок е за пропастта между “работи на моята машина” и “работи надеждно и достъпно в продукция.” Запълваме тази пропаст чрез Microsoft Foundry и Microsoft Foundry Agent Service, като създаваме реален агент за клиентска поддръжка с инструменти, извличане, памет, оценка и мониторинг.
Този урок обхваща:
След приключване на урока ще знаете как да:
Този урок предполага, че сте завършили по-ранните уроци и сте комфортни с:
Също така ще ви трябват:
az login).requirements.txt.Прототипен агент и продукционен агент споделят същия основен цикъл — разсъждава, извиква инструменти, отговаря. Променя се всичко обвиващо този цикъл. Моделът е може би 20% от продукционния агент; останалите 80% са оперативният скелет.
| Грижа | Прототип | Продукция |
|---|---|---|
| Хостинг | Работи във вашия бележник | Работи като хоствана услуга, с версиониране и разгръщане |
| Идентичност | Вашият az login токен |
Управлявана идентичност с ограничен RBAC |
| Състояние | В паметта, губи се при рестарт | Външно съхранено (съхранение на нишки, служба за памет) |
| Грешка | Виждате трасето | Опити, резервни планове, мъртви писма, сигнали |
| Разход | “Струва няколко стотинки” | Следи се на заявка, маршрутизира се, кешира се, бюджетира се |
| Качество | Визуална проверка на изхода | Оценка автоматично преди всяко пускане |
| Доверие | Одобрявате всяко действие | Политика + човек в цикъла при рискови действия |
Запомнете тази таблица. Всеки раздел по-долу съответства на един от тези редове.
Има три патерна, които ще използвате, често в комбинация.
Агентът живее в процеса на вашето приложение. Вашият код директно извиква доставчика на модели; цикълът на разсъждение работи във вашата услуга. Това е какво са правили всички предишни уроци.
Агентът е регистриран като ресурс в Microsoft Foundry. Foundry хоства цикъла на разсъждение, съхранява нишките, налага безопасността на съдържанието и RBAC, и прави агента видим в портала Foundry. Вашето приложение става лек клиент, който създава нишки и чете отговори.
Няколко агенти (и инструменти) се комбинират в граф с явен контрол на потока — последователни стъпки, разклоняване, възли за одобрение от човек и трайни контролни точки, които могат да поставят на пауза и да подновят процеса. Това е възможността за Workflows на Microsoft Agent Framework, приложена в мащаба на разгръщане.
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
Разгръщането на агент не е еднократно push действие. Това е цикъл и много наподобява цикъла на пускане на софтуер, защото това точно е.
flowchart LR
Create[Създай / Автор] --> Version[Версия]
Version --> Evaluate[Оцени офлайн]
Evaluate -->|преминава проверката| Deploy[Разгръщане хоствано]
Evaluate -->|не преминава проверката| Create
Deploy --> Observe[Наблюдавай онлайн]
Observe --> Improve[Събирай грешки]
Improve --> Create
Deploy --> Retire[Изведи от употреба стара версия]
Основната идея, пренесена от Урок 10: оценката офлайн е праг, а не мисъл след това. Новата версия на агента не се пуска, ако не минава вашите оценъчни прагове. Онлайн наблюдаемостта пък връща реалните грешки обратно към вашия офлайн тестов набор. Това е целият цикъл.
Мащабирането на агент е различно от мащабиране на безсъстоячен уеб API, защото всяка заявка може да задейства множество скъпи извиквания към модели и инструменти. Четири техники поемат основния товар.
Обработка на безсъстоячни заявки. Не пазете състояние на потребителя в оперативната памет на процеса. Съхранявайте нишките на разговора в хранилището с нишки на Foundry или в услуга за памет, така че всеки екземпляр да може да обработва всяка заявка. Това ви позволява хоризонтално мащабиране — добавяте екземпляри, без “лепкави” сесии.
Маршрутизиране на модел. Не всяка заявка изисква най-мощния (и най-скъп) ви модел. Насочвайте прости заявки — класификация на намерения, кратки фактически отговори — към малък, бърз модел и запазвайте големия модел за истинско разсъждение. 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. В продукция експортирате тези spans към 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-4.1-mini")
# изпълнението на агента се проследява автоматично вътре в този интервал
Атрибути като customer.tier и routed.model превръщат масив от трасета във въпроси, на които може да се отговори („маршрутират ли често корпоративни клиенти към малкия модел?“).
В продукционните агенти разходите се доминират от токените. Три лоста, по степен на влияние:
Оценъчните прагове и контролът на разходите са една и съща дисциплина гледана от две страни: оценката ви казва подовото качество, маршрутирането и кеширането ви държат възможно най-близо до разходния праг.
Управление. Хостваните агенти наследяват Foundry RBAC, безопасност на съдържанието и одитно регистриране. Дайте на всеки агент управлявана идентичност с най-малките нужни привилегии — само четене на базата знания, ограничен достъп до 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
Тези три диаграми — разработка, разгръщане, работа — показват един и същ агент в три етапа от живота му. Следващата лаборатория ви въвежда в създаването му.
Отворете 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-4.1-mini" if is_simple(query) else "gpt-4.1"
# 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 # разгръщайте само ако пропускателят е успешен
Прочетете всеки ред — бележникът държи примитивите умишлено малки, за да не се крие нищо зад повикване на framework.
Оценъчният праг по-горе се изпълнява офлайн спрямо вашия агент обект. След като агентът е разгърнат като Hosted Agent, ви трябва още една, дори по-евтина проверка: дали разгърнатата точка за достъп всъщност отговаря?
Разгръщането „успешно“ само доказва, че контролната площ е приела дефиницията — не доказва, че агентът отговаря. Липсваща зависимост, грешно маршрутизиране на модел или изтекла връзка могат да оставят зелено разгъване, което не връща нищо. Тестът за задимяване хваща това за секунди, при всяко разгръщане, без разходите на пълна оценка.
Този репозитория предлага готов pipeline за тест за задимяване, базиран на AI Smoke Test GitHub Action:
tests/lesson-16-smoke-tests.json съдържа подсказки и твърдения за агента за поддръжка на Contoso (отворени отговори за политики, проверка на поръчки, оставане в темата и многоредова консистенция на нишката). Каталози за агенти на други уроци са в същата директория — вижте tests/README.md..github/workflows/smoke-test.yml влиза с Azure OIDC и изпраща всяка подсказка до Responses endpoint на агента, проваляйки джоба при всяко пропускане на твърдение.- 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. Кога бихте избрали Хостван Агент пред клиент-хостиран агент?
3. Защо мащабируемият агент трябва да бъде безсъстоянието в собствената си процесна памет?
4. Какъв проблем решава маршрутизирането на моделите и как се свързва с оценката?
5. Какво е „оцeнителна врата“ и къде се намира в жизнения цикъл?
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. Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.