Microsoft Agent Framework: агенти, інструменти та воркфлоу на практиці
Microsoft Agent Framework — це відкритий SDK для побудови AI-агентів і мультиагентних систем. Він об’єднав два попередні проєкти Microsoft: Semantic Kernel і AutoGen. Розробляють його ті самі команди, і офіційно фреймворк позиціонується як прямий наступник обох.
Версія 1.0 вийшла у загальний доступ 3 квітня 2026 для .NET і Python. На Build 2026 стабільними стали Agent Harness, конектори до GitHub Copilot SDK та Claude Agent SDK, а також патерни мультиагентної оркестрації. SDK для Go поки в публічному превʼю — там ще немає декларативних агентів, RAG, CodeAct і функціональних воркфлоу.
Три складові
Фреймворк ділиться на три категорії:
- Agents — окремі агенти, які викликають LLM, користуються інструментами й MCP-серверами. Підтримуються Microsoft Foundry, Anthropic, Azure OpenAI, OpenAI, Ollama та інші провайдери.
- Harness — «агент з батарейками» для довгих багатокрокових задач: планування, todo-трекінг, компакція контексту, доступ до файлів і памʼяті, апрув інструментів у режимі «більше не питати», спостережуваність.
- Workflows — графові воркфлоу, які зʼєднують агентів і функції з типобезпечною маршрутизацією, чекпоінтами та human-in-the-loop.
Плюс базові блоки: клієнти моделей, сесія для стану, провайдери контексту для памʼяті, middleware для перехоплення дій агента, MCP-клієнти.
Мінімальний агент
pip install agent-framework
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
client = FoundryChatClient(
project_endpoint="https://your-service.services.ai.azure.com/api/projects/your-project",
model="gpt-5.4-mini",
credential=AzureCliCredential(),
)
agent = client.as_agent(
name="HelloAgent",
instructions="Ти дружній асистент. Відповідай коротко.",
)
result = await agent.run("Яке найбільше місто Франції?")
print(result)
Одна деталь, на якій легко спіткнутися: фреймворк не читає .env автоматично. Або викликайте load_dotenv() самі, або задавайте змінні в оточенні.
Інструменти
Function tool — це звичайна функція. Описи параметрів для моделі задаються через Annotated і Field з Pydantic:
from typing import Annotated
from pydantic import Field
def get_weather(
location: Annotated[str, Field(description="Місто, для якого потрібна погода.")],
) -> str:
"""Отримати погоду для вказаного міста."""
return f"У місті {location} хмарно, максимум 15°C."
Якщо потрібен явний контроль над імʼям і схемою — є декоратор @tool:
from agent_framework import tool
@tool(name="weather_tool", description="Дає інформацію про погоду", approval_mode="never_require")
def get_weather(location: Annotated[str, Field(description="Місто")]) -> str:
return f"У місті {location} хмарно, максимум 15°C."
Далі функція просто передається агенту:
from agent_framework import Agent
from agent_framework.openai import OpenAIChatClient
agent = Agent(
client=OpenAIChatClient(),
name="WeatherAgent",
instructions="Ти помічник, який відповідає про погоду.",
tools=[get_weather],
)
Крім власних функцій доступні code interpreter, file search, web search, а також MCP-сервери — і локальні, і ті, що виконує рантайм провайдера. Важливий нюанс: набір інструментів залежить від провайдера. Function tools і локальний MCP працюють майже скрізь, а от code interpreter чи file search — ні. У документації є матриця сумісності, і її варто перевірити до того, як закладати архітектуру.
Агент як інструмент іншого агента
Найпростіший спосіб зробити композицію — перетворити агента на інструмент через .as_tool():
main_agent = Agent(
client=OpenAIChatClient(),
instructions="Ти корисний асистент.",
tools=[weather_agent.as_tool()],
)
result = await main_agent.run("Чи брати парасольку в Амстердамі?")
Коли агент, а коли воркфлоу
Агент вирішує сам, які кроки робити — LLM визначає послідовність. Воркфлоу — це заздалегідь заданий граф, де агенти є лише вузлами.
| Агент | Воркфлоу |
|---|---|
| Задача відкрита або діалогова | Процес має чіткі кроки |
| Потрібне автономне планування | Потрібен контроль порядку виконання |
| Досить одного виклику LLM з інструментами | Треба скоординувати кількох агентів |
Для воркфлоу є два API. Функціональний (@workflow і @step, поки експериментальний, тільки Python) дозволяє писати звичайні async-функції зі звичайним if/else та asyncio.gather. Графовий (WorkflowBuilder з екзекʼюторами й ребрами) потрібен, коли важлива типобезпечна маршрутизація повідомлень і паралельне виконання суперкроками. Обидва дають однакові події, стрімінг, HITL і чекпоінти. Готові патерни оркестрації: Sequential, Concurrent, Handoff, GroupChat, Magentic.
Варто запамʼятати
У документації є фраза, яку я б повісив на стіну кожної команди, що будує агентів:
Якщо задачу можна вирішити звичайною функцією — напишіть функцію, а не агента.
Semantic Kernel і AutoGen залишаються відкритими й отримуватимуть критичні фікси, але новий функціонал іде тільки в Agent Framework. Стратегія міграції від Microsoft — переносити спершу прості одноагентні сценарії, зберігаючи наявні контракти інструментів, а стан, памʼять, мультиагентні воркфлоу й деплой мігрувати поетапно з можливістю відкату.
Sources: Microsoft Agent Framework Overview, Tools Overview, Function Tools, Workflows