Microsoftの.NETチームはCopilotKitと共同で、AG-UIプロトコル向けの公式.NET SDKパッケージを発表した。AG-UIは、人工知能エージェントがアプリケーションやユーザー向けインターフェースと通信する方法を定める標準である。このパッケージはTypeScriptおよびPython向けパッケージとともにAG-UIリポジトリで公開され、MITライセンスの下でNuGetから利用できる。
実務上の変更点は、任意の.NETサービスが、特定のエージェントフレームワーク専用の実装に依存せず、AG-UIを介して直接通信できるようになったことだ。また、Microsoft Agent Framework(略称MAF)におけるAG-UIサポートも、新しいSDKパッケージを基盤とするようになった。
パッケージが追加するもの
AG-UIは、長時間稼働するエージェントアプリケーションでよく発生する問題への対処を目指している。エージェントは、トークンを段階的に送信したり、ツールを呼び出したり、サブエージェントにタスクを委任したり、リクエストの実行中にアプリケーションの状態を変更したりすることがある。共通プロトコルがなければ、フロントエンドはフレームワークやサービスごとに異なるイベント形式を理解しなければならない。
このプロトコルは、こうしたインタラクションを型付きイベントに変換する。イベントにはRUN_STARTED、TEXT_MESSAGE_CONTENT、STATE_DELTA、RUN_FINISHEDなどがある。クライアント側は、Webアプリケーション、ターミナル、モバイルアプリケーション、SlackやTeamsなどのチャットプラットフォームのいずれであっても、イベントの表示方法を決定する。
サーバーとクライアントのサポート
このパッケージには、相互に補完する2つの経路が含まれている。AGUI.ServerはエージェントをAG-UI互換のエンドポイントに変換し、AGUI.Clientは.NETアプリケーションがプロトコルをサポートする任意のエージェントに接続できるようにする。統合は、Microsoft.Extensions.AIにおけるチャット用の抽象化レイヤーであるIChatClientを基盤としている。
サーバー側では、ToChatRequestContext関数が受信したAG-UIリクエストを、クライアントが想定するメッセージとオプションに分解し、その後AsAGUIEventStreamAsyncがレスポンスストリームをプロトコルイベントに変換する。この変換では、実行の開始および終了イベントの生成に加え、別のメッセージやツール呼び出しに移る前に、開いたままのテキストブロックや推論ブロックを閉じる処理も行われる。
Microsoft Agent Frameworkのユーザーは、AddAGUIServer()およびMapAGUIServer()という2つの関数を提供するASP.NET Core統合を利用して、エンドポイントの設定コードを削減できる。
SDKの構成要素と互換性
このパッケージは、NuGetを通じて公開される5つのコンポーネントで構成されている。
- 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を基盤として維持できる。これは、1つのエージェントをWebインターフェース、社内アプリケーション、異なるチャットチャネルに接続したい企業にとって特に価値がある。
ただし、SDKによってサーバーの構築やイベントの表示方法の選択が不要になるわけではない。SDKが担うのはプロトコルであり、Webアーキテクチャとエンドポイントは引き続きアプリケーションの責任となる。また、Protobufのサポートはすべてのイベントを網羅していないため、完全なデフォルトの選択肢は依然としてSSEである。