Microsoft выпустила третью часть серии «Building Blocks for AI» — на этот раз про Microsoft Agent Framework.
Что это и зачем
Обычный чат-бот принимает запрос и возвращает ответ. Агент идёт дальше: он сам решает, какие инструменты использовать, вызывает их, оценивает результат и продолжает работу. Вам не нужно писать «если пользователь спросит о погоде — вызови функцию X». Модель разбирается сама.
Фреймворк строится поверх
IChatClient из Microsoft Extensions for AI (MEAI) и поддерживает Azure OpenAI, OpenAI, GitHub Models, Foundry Local и Ollama.Первый агент
Установка:
dotnet add package Microsoft.Agents.AI
Простейший агент:
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsAIAgent(
instructions: "You are good at telling jokes.",
name: "Joker");
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
Метод
.AsAIAgent() это аналог .AsIChatClient(), только оборачивает клиент в агента с поддержкой сессий, инструментов и памяти. Стриминг тоже работает из коробки через RunStreamingAsync.Инструменты
Агенты вызывают функции сами, без явных условий в коде. Главное добавить атрибуты
[Description], чтобы модель понимала, когда и как использовать инструмент:[Description("Get the weather for a given location.")]
static string GetWeather(
[Description("The location to get the weather for.")] string location)
=> $"The weather in {location} is cloudy with a high of 15°C.";
AIAgent agent = ...AsAIAgent(
instructions: "You are a helpful assistant",
tools: [AIFunctionFactory.Create(GetWeather)]);Спрашиваем «What is the weather in Amsterdam?» и агент сам вызывает
GetWeather("Amsterdam") и подставляет результат в ответ.Многоходовые разговоры
Сессия сохраняет историю между вызовами:
AgentSession session = await agent.CreateSessionAsync();
await agent.RunAsync("Tell me a joke about a pirate.", session);
await agent.RunAsync("Now add emojis and tell it as a parrot.", session);
Сессию можно сериализовать и восстановить:
JsonElement state = await agent.SerializeSessionAsync(session);
var restored = await agent.DeserializeSessionAsync(state);
Память между сессиями
AIContextProvider позволяет агенту извлекать и помнить факты о пользователе между сессиями. Провайдер работает в два этапа:StoreAIContextAsync запускается после каждого взаимодействия — здесь агент учится из разговора (например, извлекает имя пользователя).ProvideAIContextAsync запускается до — здесь агент получает накопленный контекст перед ответом.Провайдеры стекуются: один хранит имя, другой — предпочтения, третий — подтягивает документы из VectorData.
Граф-воркфлоу и мульти-агенты
Для сложных задач можно соединять агентов через граф:
WorkflowBuilder связывает исполнителей рёбрами:Писатель-критик — агент пишет, второй проверяет, если не ок — отправляет обратно:
WorkflowBuilder builder = new(writerAgent);
builder
.AddEdge(writerAgent, criticAgent)
.AddEdge(criticAgent, writerAgent, condition: result => !result.IsApproved)
.WithOutputFrom(criticAgent, condition: result => result.IsApproved);
Помимо этого доступны параллельное выполнение (fan-out / fan-in), условная маршрутизация, вложенные воркфлоу и циклы с лимитом итераций.
Human-in-the-loop
Для чувствительных операций: запись в БД, финансовые транзакции, отправка сообщений; агент может запрашивать подтверждение человека перед вызовом инструмента. Механизм встроен через
FunctionApprovalRequestContent и FunctionApprovalResponseContent из MEAI.Теперь Microsoft Agent Framework — это единый SDK с понятными абстракциями поверх уже знакомого
IChatClient.➡️ Блог разработчиков
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека шарписта
#sharp_view