TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.7K subscribers
Post #7034 3.59K
👨‍💻 Строим AI-агентов на .NET

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
  • 👍 12
  • ❤ 7
  • ❤‍🔥 2
More from @csharpproglib
  1. Sep 21, 2026⚙️ Настоящие атомарные операции Если Volatile решает проблему видимости, то Interlocked ре…
  2. Sep 20, 2026💪 Разминка перед трудовыми буднями Что произойдёт? ❤️ — список станет [1, 3] 🔥 — Invalid…
  3. Sep 19, 2026🧩 Middleware в ASP.NET Core: 3 ловушки Middleware — звено HTTP pipeline: app.Use(async (c…
  4. Sep 18, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта #garbage_collector
  5. Sep 17, 2026🦆 Duck typing в C# — почти как в TypeScript В TypeScript достаточно, чтобы у объекта был…
  6. Sep 17, 2026🧠 Почему .NET-под съедает всю память? kubectl top pod показывает 1 ГБ, а managed heap зан…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →