Как перенести проекты с Semantic Kernel и AutoGen на Microsoft Agent Framework RC: миграция AI-агентов, workflow и мультиагентных систем
Microsoft вывела Microsoft Agent Framework в статус Release Candidate для .NET и Python. Если говорить без канцелярита: API уже стабилизирован, ключевые возможности для версии 1.0 собраны, и сейчас — пожалуй, самый удачный момент, чтобы перевести существующие решения с Semantic Kernel или AutoGen на новую платформу. Особенно если вы строите AI-агентов и автоматизацию не «для демо на пять минут», а для реальной нагрузки, командной работы и корпоративной эксплуатации.
И да, это не просто очередное переименование. Microsoft Agent Framework задуман как единая основа для разработки агентных приложений: от одного аккуратного помощника до сложной оркестрации, где несколько агентов спорят, передают задачи друг другу и не разваливаются на первом же повороте.
Что такое Microsoft Agent Framework
Microsoft Agent Framework — это open-source фреймворк для создания, оркестрации и развёртывания AI-агентов. По сути, он приходит на смену Semantic Kernel и AutoGen, предлагая унифицированную модель разработки для .NET и Python.
Ключевые возможности выглядят так:
- Быстрый старт — простого агента можно поднять буквально в несколько строк кода.
- Function tools — агент получает доступ к вашему коду через типобезопасные определения инструментов.
- Графовые workflow — можно собирать последовательные, параллельные, handoff- и group chat-сценарии со streaming, checkpointing и human-in-the-loop.
- Поддержка разных провайдеров — Microsoft Foundry, Azure OpenAI, OpenAI, GitHub Copilot, Anthropic Claude, AWS Bedrock, Ollama и другие.
- Интероперабельность — есть поддержка A2A, AG-UI и MCP.
Для команд, которым важны архитектура AI-агентов, масштабируемость и предсказуемая модель разработки, это, честно говоря, шаг в правильную сторону. Не идеальный мир, конечно, но уже очень близко к промышленному подходу.
Почему миграция с Semantic Kernel и AutoGen сейчас имеет смысл
Если у вас уже есть проекты на Semantic Kernel или AutoGen, переход на Agent Framework выглядит не как болезненный разрыв, а скорее как логичное продолжение. Microsoft уже опубликовала официальные инструкции по миграции:
Практический смысл тут простой. Вместо разрозненных подходов вы получаете единую платформу для разработки, где проще строить мультиагентные системы, подключать инструменты, управлять диалогами и готовить решение к enterprise-сценариям. А в корпоративной среде это важно — иногда даже важнее, чем «ещё один красивый ответ модели».
Плюс, если смотреть чуть дальше кода, миграция помогает заранее выстроить вещи, о которых часто вспоминают слишком поздно: безопасность AI-агентов, контроль доступа, управляемость workflow и соответствие внутренним требованиям. Потом переделывать всё это — удовольствие, мягко говоря, сомнительное.
Первый агент: минимальный пример
Старт действительно короткий. Ниже — базовый пример создания агента на Python и .NET.
Python
pip install agent-framework --pre
import asyncio
from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential
async def main():
agent = AzureOpenAIResponsesClient(
credential=AzureCliCredential(),
).as_agent(
name="HaikuBot",
instructions="You are an upbeat assistant that writes beautifully.",
)
print(await agent.run("Write a haiku about Microsoft Agent Framework."))
if __name__ == "__main__":
asyncio.run(main())
.NET
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
dotnet add package Azure.Identity
using System.ClientModel.Primitives;
using Azure.Identity;
using Microsoft.Agents.AI;
using OpenAI;
using OpenAI.Responses;
// Replace <resource> and gpt-4.1 with your Azure OpenAI resource name and deployment name.
var agent = new OpenAIClient(
new BearerTokenPolicy(new AzureCliCredential(), "https://ai.azure.com/.default"),
new OpenAIClientOptions() { Endpoint = new Uri("https://<resource>.openai.azure.com/openai/v1") })
.GetResponsesClient("gpt-4.1")
.AsAIAgent(name: "HaikuBot", instructions: "You are an upbeat assistant that writes beautifully.");
Console.WriteLine(await agent.RunAsync("Write a haiku about Microsoft Agent Framework."));
Собственно, всё. Агент уже работает. Дальше можно наращивать функциональность: подключать function tools, добавлять сессии для многошаговых сценариев, включать streaming, а при необходимости — связывать это с агентной памятью и RAG. И вот тут начинается самое интересное, потому что «просто чатик» быстро превращается в прикладную систему.
Мультиагентные workflow: когда одного агента уже мало
Один агент — это удобно. Но в реальных продуктах, особенно в enterprise AI, чаще нужен не одиночка, а связка ролей: один пишет, второй проверяет, третий маршрутизирует, четвёртый ходит в систему данных. Такая вот маленькая цифровая редакция, если угодно.
В Agent Framework для этого есть workflow-движок. Он позволяет строить orchestration-паттерны: последовательные, параллельные, handoff и group chat-сценарии, причём со streaming-поддержкой из коробки.
Ниже — пример последовательного workflow, где один агент создаёт маркетинговый слоган, а второй даёт короткую рецензию.
Python
pip install agent-framework-orchestrations --pre
import asyncio
from typing import cast
from agent_framework import Message
from agent_framework.azure import AzureOpenAIChatClient
from agent_framework.orchestrations import SequentialBuilder
from azure.identity import AzureCliCredential
async def main() -> None:
client = AzureOpenAIChatClient(credential=AzureCliCredential())
writer = client.as_agent(
instructions="You are a concise copywriter. Provide a single, punchy marketing sentence based on the prompt.",
name="writer",
)
reviewer = client.as_agent(
instructions="You are a thoughtful reviewer. Give brief feedback on the previous assistant message.",
name="reviewer",
)
# Build sequential workflow: writer -> reviewer
workflow = SequentialBuilder(participants=[writer, reviewer]).build()
# Run and collect outputs
outputs: list[list[Message]] = []
async for event in workflow.run("Write a tagline for a budget-friendly eBike.", stream=True):
if event.type == "output":
outputs.append(cast(list[Message], event.data))
if outputs:
for msg in outputs[-1]:
name = msg.author_name or "user"
print(f"[{name}]: {msg.text}")
if __name__ == "__main__":
asyncio.run(main())
.NET
dotnet add package Microsoft.Agents.AI.Workflows --prerelease
using System.ClientModel.Primitives;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.Workflows;
using Microsoft.Extensions.AI;
using OpenAI;
// Replace <resource> and gpt-4.1 with your Azure OpenAI resource name and deployment name.
var chatClient = new OpenAIClient(
new BearerTokenPolicy(new AzureCliCredential(), "https://ai.azure.com/.default"),
new OpenAIClientOptions() { Endpoint = new Uri("https://<resource>.openai.azure.com/openai/v1") })
.GetChatClient("gpt-4.1")
.AsIChatClient();
ChatClientAgent writer = new(chatClient,
"You are a concise copywriter. Provide a single, punchy marketing sentence based on the prompt.",
"writer");
ChatClientAgent reviewer = new(chatClient,
"You are a thoughtful reviewer. Give brief feedback on the previous assistant message.",
"reviewer");
// Build sequential workflow: writer -> reviewer
Workflow workflow = AgentWorkflowBuilder.BuildSequential(writer, reviewer);
List<ChatMessage> messages = [new(ChatRole.User, "Write a tagline for a budget-friendly eBike.")];
await using StreamingRun run = await InProcessExecution.RunStreamingAsync(workflow, messages);
await run.TrySendMessageAsync(new TurnToken(emitEvents: true));
await foreach (WorkflowEvent evt in run.WatchStreamAsync())
{
if (evt is AgentResponseUpdateEvent e)
{
Console.Write(e.Update.Text);
}
}
Такой подход особенно полезен там, где нужна чёткая агентная оркестрация: генерация, проверка, маршрутизация, согласование, эскалация человеку. Короче, не магия — инженерия. И это хорошо.
На что обратить внимание при миграции в enterprise-среде
Сама по себе замена SDK — только часть работы. Если проект уже живой, стоит смотреть шире:
- Архитектура — как будут разделены роли агентов, инструменты, память, маршруты вызовов.
- Безопасность — какие права есть у агентов, как ограничены tool calls, как логируются действия.
- Память и контекст — где хранится история, как подключается RAG, как контролируется качество извлечения.
- Соответствие требованиям — особенно если речь идёт о regulated-среде, внутренних политиках и аудите.
Вот здесь многие и спотыкаются. Не на коде даже, а на стыке эксплуатации, governance и безопасности. Поэтому при переносе проектов разумно сразу учитывать AI compliance и соответствие требованиям, а не оставлять это «на потом». Потом обычно приходит слишком быстро.
Что делать дальше
Release Candidate — это уже не сырая идея, а почти финальная платформа. Если вы работаете с Semantic Kernel или AutoGen, сейчас хороший момент протестировать миграцию, проверить совместимость сценариев и дать обратную связь до выхода версии 1.0.
Подробности доступны в официальной документации и в репозитории GitHub. Пакеты можно установить через NuGet для .NET и PyPI для Python.
Если коротко: Microsoft Agent Framework уже выглядит как серьёзная база для разработки AI-агентов, мультиагентных систем и enterprise AI automation. Не без нюансов, само собой. Но направление — очень сильное. И, кажется, это как раз тот случай, когда миграцию лучше начинать не в последний момент.
