Команда .NET в Microsoft совместно с CopilotKit объявила об официальном SDK-пакете для .NET для протокола AG-UI — стандарта, определяющего способ взаимодействия агентов искусственного интеллекта с приложениями и пользовательскими интерфейсами. Пакет опубликован в репозитории AG-UI вместе с пакетами для TypeScript и Python и доступен через NuGet по лицензии MIT.
Практическое изменение заключается в том, что любая служба .NET теперь может напрямую взаимодействовать через AG-UI, не полагаясь на специализированную реализацию для конкретного фреймворка агентов. Поддержка AG-UI в Microsoft Agent Framework, известном под сокращением MAF, также теперь построена на новых SDK-пакетах.
Что добавляет пакет?
AG-UI призван решить распространённую проблему в долгоживущих приложениях с агентами. Агенты могут постепенно отправлять токены, вызывать инструменты, делегировать задачи субагентам или изменять состояние приложения во время выполнения запроса. Без общего протокола интерфейсам приходится понимать разные форматы событий для каждого фреймворка или службы.
Протокол преобразует эти взаимодействия в типизированные события, среди которых RUN_STARTED, TEXT_MESSAGE_CONTENT, STATE_DELTA и RUN_FINISHED. Клиентская сторона решает, как их отображать — в веб-приложении, терминале, мобильном приложении или платформах обмена сообщениями, таких как Slack и Teams.
Поддержка сервера и клиента
Пакет включает два взаимодополняющих направления. AGUI.Server преобразует агента в конечную точку, совместимую с AG-UI, а AGUI.Client позволяет приложению .NET подключаться к любому агенту, поддерживающему протокол. Интеграция основана на IChatClient — уровне абстракции для чатов в составе Microsoft.Extensions.AI.
На стороне сервера функция ToChatRequestContext разбирает входящий запрос AG-UI на сообщения и параметры, ожидаемые клиентом, после чего AsAGUIEventStreamAsync преобразует поток ответа в события протокола. Это преобразование также отвечает за создание событий начала и завершения выполнения, а также за закрытие открытых блоков текста или рассуждений перед переходом к другому сообщению или вызову инструмента.
Пользователи Microsoft Agent Framework могут полагаться на интеграцию с ASP.NET Core, которая предоставляет функции AddAGUIServer() и MapAGUIServer(), чтобы сократить объём кода настройки конечной точки.
Компоненты SDK и совместимость
Пакет состоит из пяти компонентов, опубликованных через NuGet:
- AGUI.Abstractions: модели протокола для событий, сообщений, инструментов, состояния и прерываний.
- AGUI.Formatting: форматирование данных при передаче, с поддержкой Server-Sent Events по умолчанию.
- AGUI.Protobuf: необязательная поддержка Protobuf, охватывающая подмножество типов событий.
- AGUI.Client: потребление потоков AG-UI.
- AGUI.Server: создание потоков AG-UI.
SSE остаётся форматом по умолчанию и поддерживает все типы событий, упомянутые в SDK, тогда как поддержка Protobuf ограничивается подмножеством.
Что меняется для пользователей Agent Framework?
Базовая модель программирования для существующих пользователей не меняется, формат событий также остаётся совместимым, то есть существующие интерфейсы могут продолжать работать с обновлённым сервером. Однако некоторые названия интерфейсов изменились: AddAGUIServer() и MapAGUIServer() заменили AddAGUI() и MapAGUI(), а пространства имён и классы были перенесены в пакеты AGUI.Client, AGUI.Server и AGUI.Abstractions.
Клиент поддерживает потребление AG-UI из .NET Framework 4.7.2 и более поздних версий, тогда как публикация конечной точки требует актуальной версии .NET.
Почему это объявление важно?
Выпуск предоставляет службам .NET унифицированный путь для взаимодействия с несколькими интерфейсами без повторного создания слоя потоковой передачи событий для каждого приложения. Он также позволяет обмениваться ролями между компонентами, написанными на C#, Python и TypeScript, сохраняя интеграционный слой на основе IChatClient. Это особенно ценно для организаций, которые хотят подключить одного агента к веб-интерфейсам, внутренним приложениям или различным каналам обмена сообщениями.
При этом SDK не устраняет необходимость создавать сервер или выбирать способ отображения событий: он отвечает за протокол, тогда как веб-архитектура и конечная точка остаются ответственностью приложения. Кроме того, поддержка Protobuf не охватывает все события, поэтому SSE по-прежнему является полнофункциональным вариантом по умолчанию.