Перейти к содержимому
Миграция с Semantic Kernel и AutoGen на Microsoft Agent Framework
6 мин чтения

Миграция с Semantic Kernel и AutoGen на Microsoft Agent Framework

microsoft-agent-frameworksemantic-kernelautogenai-agentsmulti-agent-systemsworkflowmigration

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. Не без нюансов, само собой. Но направление — очень сильное. И, кажется, это как раз тот случай, когда миграцию лучше начинать не в последний момент.