![]()
До цього моменту в курсі ви створювали агентів, які працюють на вашому ноутбуці, всередині блокнота, керованого az login і кількома змінними середовища. Це саме правильний спосіб навчання. Проте це не правильний спосіб запуску агента, від якого залежать тисячі клієнтів о 3 годині ночі.
Цей урок стосується розриву між “все працює на моєму комп’ютері” і “це працює надійно та економно у виробництві”. Ми закриваємо цей розрив за допомогою Microsoft Foundry та Microsoft Foundry Agent Service, створюючи реального агента підтримки клієнтів із інструментами, пошуком, пам’яттю, оцінкою та моніторингом.
Цей урок охоплює:
Після завершення цього уроку ви знатимете, як:
Цей урок передбачає, що ви пройшли попередні уроки і комфортно працюєте з:
Вам також знадобиться:
az login).requirements.txt.Прототипний агент та виробничий агент мають спільний основний цикл — міркування, виклик інструментів, відповідь. Змінюється все, що оточує цей цикл. Модель — це приблизно 20% виробничого агента; решта 80% — це операційний каркас.
| Питання | Прототип | Виробництво |
|---|---|---|
| Розміщення | Працює у вашому блокноті | Працює як хостингова служба, версіонується та розгортається |
| Ідентичність | Ваш токен az login |
Керована ідентичність з обмеженим RBAC |
| Стан | В пам’яті, втрачається при перезапуску | Зовнішній (сховище потоків, сервіс пам’яті) |
| Збої | Ви бачите трейсбек | Повтори, резервні варіанти, dead-letter, оповіщення |
| Вартість | “Це кілька центів” | Відстежується за запит, маршрутизована, кешована, бюджетована |
| Якість | Ви оцінюєте візуально | Автоматично оцінюється перед кожним релізом |
| Довіра | Ви схвалюєте кожну дію | Політика + людський контроль для ризикованих дій |
Пам’ятайте цю таблицю. Кожен розділ нижче відповідає одній з цих рядків.
Є три патерни, які ви часто використовуватимете у комбінації.
Об’єкт агента живе в вашому процесі застосунку. Ваш код напряму викликає провайдера моделей; цикл розмірковування виконується у вашій службі. Це саме те, що робив кожен попередній урок.
Агент реєструється як ресурс у Microsoft Foundry. Foundry розміщує цикл розмірковування, зберігає потокові повідомлення, забезпечує безпеку контенту та RBAC, робить агента видимим у порталі Foundry. Ваш застосунок стає тонким клієнтом, який створює потоки та читає відповіді.
Декілька агентів (та інструментів) поєднані у граф з явним контролем потоку — послідовні кроки, розгалуження, вузли людського схвалення, та стійкі контрольні точки, які можуть призупинятися і відновлюватися. Це можливість Workflows Microsoft Agent Framework, застосована на рівні розгортання.
flowchart TB
subgraph P1[Client-Hosted]
A1[Your App Process] --> M1[Model Provider]
end
subgraph P2[Hosted Agent]
A2[Thin Client] --> F2[Foundry Agent Service]
F2 --> M2[Model + Tools + Thread Store]
end
subgraph P3[Agent Workflow]
A3[Orchestrator] --> S1[Triage Agent]
S1 --> S2[Resolver Agent]
S2 --> H[Human Approval Node]
H --> S3[Action Agent]
end
Розгортання агента — це не одноразове push. Це цикл, і він дуже схожий на цикл випуску програмного забезпечення, тому що це саме він.
flowchart LR
Create[Create / Author] --> Version[Version]
Version --> Evaluate[Evaluate offline]
Evaluate -->|passes gate| Deploy[Deploy hosted]
Evaluate -->|fails gate| Create
Deploy --> Observe[Observe online]
Observe --> Improve[Collect failures]
Improve --> Create
Deploy --> Retire[Retire old version]
Ключова ідея, взята з Урок 10: офлайн оцінка — це ворота, а не післямова. Нова версія агента не випускається, якщо не проходить ваші пороги оцінки. Онлайн спостережуваність повертає реальні збої назад у ваш офлайн тестовий набір. Це весь цикл.
Масштабування агента відрізняється від масштабування безстанного веб-API, бо кожен запит може викликати кілька дорогих звернень до моделі та інструментів. Чотири техніки беруть на себе більшість навантаження.
Обробка без стану. Не зберігайте стан користувача у пам’яті процесу. Зберігайте потоки розмов у сховищі Foundry або сервісі пам’яті, щоб будь-який екземпляр міг обробити будь-який запит. Це дозволяє масштабуватися горизонтально — додавати екземпляри, без “липких” сесій.
Маршрутизація моделей. Не кожен запит потребує вашої найпотужнішої (і найдорожчої) моделі. Направляйте прості запити — класифікація наміру, короткі фактичні відповіді — на маленьку, швидку модель, а велику модель залишайте для справжнього розмірковування. Foundry має вбудований Model Router, або ви можете реалізувати легку класифікацію самостійно. Ви створите таку версію в лабораторії.
Кешування відповідей. Багато запитів служби підтримки є близькими дублями (“як скинути пароль?”). Кешуйте відповіді на поширені запитання і видавайте їх без звернення до моделі. Навіть скромний відсоток попадання у кеш значно знижує вартість і затримку.
Паралельність та зворотній тиск. Провайдери моделей мають обмеження швидкості. Обмежуйте паралельність, використовуйте повтори з експоненційним збільшенням затримки, і відмовляйтеся з гідністю (черговий “ми працюємо над цим” кращий за 500).
flowchart LR
Q[User query] --> C{Cache hit?}
C -->|yes| R[Return cached answer]
C -->|no| Router{Complexity?}
Router -->|simple| SLM[Small model]
Router -->|complex| LLM[Large model]
SLM --> Out[Response]
LLM --> Out
Out --> Store[Cache + trace]
Ви не можете керувати тим, чого не бачите. Як було описано в Уроці 10, Microsoft Agent Framework нативно робить OpenTelemetry трасування — кожен виклик моделі, інструменту та крок оркестрації стає спаном. У виробництві ви експортуєте ці спани в 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")
# agent execution is traced automatically inside this span
Атрибути як customer.tier та routed.model перетворюють гору трасувань у питання з відповідями (“чи часто корпоративних клієнтів спрямовують до маленької моделі?”).
Вартість у виробничих агентах переважно складається з токенів. Три важелі за ступенем впливу:
Ворота оцінки та контроль вартості — це одна дисципліна, подивлена з двох боків: оцінка каже про базову якість, маршрутизація й кешування тримають вас якнайближче до вартості цього рівня.
Управління. Hosted Agents успадковують RBAC, безпеку контенту та аудит Foundry. Кожному агенту призначайте керовану ідентичність з мінімальними правами — доступ тільки для читання до бази знань, обмежений доступ до API тикетів, нічого зайвого.
Людина у циклі. Деякі дії надто важливі для повної автоматизації — видача відшкодування, видалення облікового запису, ескалація до юридичного відділу. Microsoft Agent Framework підтримує інструменти із необхідним затвердженням: агент пропонує дію, виконання призупиняється, людина схвалює або відхиляє, і робочий процес відновлюється. Ви бачили примітив у Уроці 6; тут ви його розгортаєте.
MCP у виробництві. MCP дозволяє вашому агенту використовувати зовнішні інструменти через стандартний інтерфейс. У виробництві трактуйте кожен MCP сервер як недовірену межу: фіксуйте версію сервера, запускайте з обмеженою ідентичністю, перевіряйте його результати, і ніколи не розкривайте йому секрети. MCP сервер — це залежність, а залежності патчаться, проходять аудит і мають обмеження швидкості.
flowchart TB
subgraph Dev[Development Architecture]
D1[Notebook] --> D2[Agent Framework]
D2 --> D3[Model Provider]
D2 --> D4[Local tools]
end
subgraph Deploy[Deployment Architecture]
E1[CI pipeline] --> E2[Evaluation gate]
E2 -->|pass| E3[Foundry Agent Service]
E3 --> E4[Versioned hosted agent]
end
subgraph Run[Runtime Architecture]
F1[Client app] --> F2[Hosted agent]
F2 --> F3[Model Router]
F2 --> F4[Azure AI Search RAG]
F2 --> F5[Memory service]
F2 --> F6[MCP tools]
F2 --> F7[OTel -> Foundry tracing]
F2 --> F8[Human approval]
end
Ці три діаграми — розробка, розгортання, середовище виконання — це один агент на трьох етапах його життя. Лабораторна робота, що слідує, проведе вас крізь його створення.
Відкрийте code_samples/16-python-agent-framework.ipynb і пройдіть його повністю. Ви зберете агента підтримки клієнтів Contoso з усіма виробничими аспектами:
Блокнот організовано так, що кожен виробничий аспект є самостійною, запускаємою секцією. Серцем є обробник запитів із маршрутизацією і кешуванням:
async def handle_support_request(query: str, customer_id: str) -> str:
# 1. Serve from cache when we can.
cached = response_cache.get(normalize(query))
if cached:
return cached
# 2. Route by complexity to control cost.
model = "gpt-5-nano" if is_simple(query) else "gpt-5-mini"
# 3. Run the agent inside a trace span for observability.
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. Cache and return.
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 # only deploy if the gate passes
Читайте уважно кожен рядок — блокнот свідомо лишає примітиви невеликими, щоб нічого не було сховано за викликами фреймворку.
Ворота оцінки вище запускаються офлайн на вашому об’єкті агента. Після розгортання агента як Hosted Agent потрібно ще одну, навіть дешевшу перевірку: чи агент на розгорнутій точці дійсно відповідає?
«Успішне» розгортання лише доводить, що контрольна площина прийняла визначення — воно не доводить, що агент відповідає. Відсутність залежності, неправильна маршрутизація моделі або прострочене з’єднання може залишити зелене розгортання, яке нічого не повертає. Smoke-тест ловить це за секунди, при кожному розгортанні, без витрат на повну оцінку.
Цей репозиторій постачає готову піплайн smoke-тестів на базі GitHub Action AI Smoke Test:
tests/lesson-16-smoke-tests.json містить промпти і твердження для агента підтримки Contoso (засновані відповіді на політичні питання, пошук замовлень, утримання теми, і підтримання послідовності багатокрокових звернень). Каталоги агентів інших уроків розміщені поруч — дивіться tests/README.md..github/workflows/smoke-test.yml увійде через Azure OIDC і надішле кожен промпт до кінцевої точки 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
Запустіть це з вкладки Дії після розгортання вашого агента, подавши кінцеву точку проекту Foundry та ім’я агента. Федеральна ідентичність повинна мати роль Azure AI User в межах області проекту Foundry. Уявіть шари як піраміду: димові тести (досяжний і відповідає?) запускаються при кожному розгортанні, офлайн-оцінка (достатньо гарний для релізу?) виконується перед промоцією, а онлайн-оцінка (як він працює в реальних умовах?) запускається безперервно.
Перевірте свої знання перед переходом до завдання.
1. Приблизно яка частина виробничого агента — це «модель», а що є рештою?
2. Коли ви оберете Hosted Agent замість агента, розміщеного на клієнті?
3. Чому масштабований агент повинен бути безстанним у власній пам’яті процесу?
4. Яку проблему вирішує маршрутизація моделей і як це пов’язано з оцінкою?
5. Що таке «evaluation gate» і де він розташований у життєвому циклі?
6. Чому MCP сервер у production слід розглядати як ненадійний кордон?
7. Яка одна зміна зазвичай має найбільший вплив на вартість виробничого агента і чому?
8. Яку роль відіграють атрибути span, такі як customer.tier та routed.model, у спостережливості?
Візьміть агента підтримки клієнтів з лабораторної роботи і адаптуйте його для конкретного сценарію: агент підтримки передплати для SaaS компанії.
Ваше завдання:
get_subscription_status, get_invoice і issue_credit (кредити понад $50 потребують затвердження людиною).Напишіть короткий абзац (у маркдаун-комірці), пояснюючи, яке правило маршрутизації моделі ви обрали і як ви його перевірите на реальному трафіку. Правильної єдиної відповіді немає — оцінюють, наскільки чітко пов’язані продакшн-проблеми в одне ціле.
У цьому уроці ви перевели агента з прототипу у production з Microsoft Foundry:
Наступний урок іде протилежним шляхом: замість масштабування агентів у хмарі ви перенесете їх назовні на один комп’ютер розробника і запустите цілком локально.
Створення агентів для комп’ютерного використання (CUA)
Створення локальних AI агентів
Відмова від відповідальності: Цей документ було перекладено за допомогою сервісу штучного інтелекту для перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ рідною мовою слід вважати авторитетним джерелом. Для критично важливої інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникли внаслідок використання цього перекладу.