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