Microsoftは、Blazor AIの新しいコンポーネントを発表した。これは、従来のチャットインターフェースだけに頼るのではなく、アプリケーションのインターフェース内にインテリジェントエージェントとのインタラクションを統合したいBlazorアプリケーション開発者を対象とした実験的なパッケージである。このコンポーネントは、ストリーミング応答、ツール呼び出し、承認要求、共有状態、生成型インターフェース体験を表示するための状態モデルとUI要素を提供する。
この実験には、.NET 11 RC1 SDKの使用と、実験的パッケージMicrosoft.AspNetCore.Components.AIの追加が必要である。ChatPageコンポーネントは、メッセージ一覧、入力フィールド、ストリーミングインジケーター、再試行機能を備えたすぐに使えるエントリーポイントを提供する。プログラムレベルでは、UIAgentがインタラクションの状態を管理し、Microsoft.Extensions.AIのIChatClientをラップして、ストリーミング応答の更新を監視および再レンダリング可能なコンテンツブロックに変換する。
チャットから完全なアプリケーションインターフェースへ
このパッケージはテキストの表示にとどまらない。ContentBlockは、識別情報、役割、ライフサイクル状態、変更通知を備えたインタラクションの一部を表す。会話コンテンツ、ツール呼び出し、承認、フロントエンド操作に対応する専用ブロックも用意されている。カスタムレイアウトを必要とする場合、パッケージはAgentBoundary、MessageList、MessageInput、BlockRendererなどの低レベル要素を提供する。
アプリケーションは、天気ツールなど、サーバーが実行するツールを使用し、その呼び出しと結果をカスタムRazorコンポーネントに変換することもできる。同様に、フロントエンドツールによって、ナビゲーション、ウィンドウを開く操作、インターフェースの色の変更など、アプリケーションが管理する機能を実行できる。人間による判断が必要な操作については、ユーザーが承認または拒否するまで、FunctionApprovalBlockによってインタラクションが停止される。
AG-UIによるリモートエージェントへの接続
Blazor AIコンポーネントは任意のIChatClientと連携できる。また、AG-UI .NET SDKパッケージのAGUIChatClientを介してリモートエージェントに接続することも可能である。AG-UIは、特定のUIコンポーネントを強制することなく、エージェントとユーザー向けアプリケーション間の通信を統一する、イベントベースのオープンプロトコルとして機能する。
AgenticUIのサンプルは、Blazor Web App、ASP.NET Coreで構築されたエージェントサーバー、Aspire AppHostを組み合わせた構成を示しており、Microsoft FoundryとMicrosoft Agent Frameworkを使用している。イベントはHTTPとServer-Sent Eventsを介して送信され、Blazorアプリケーションは独自の表示レイヤーを維持する。
実際には何が変わるのか
このコンポーネントによって、アプリケーションはエージェントの出力をどのように表示するかを管理できる。開発者は、ツール呼び出しをカスタムカードとして表示したり、ユーザーとエージェントの間で構造化された状態を同期したり、提案を適用前に確認可能な変更として表示したり、新しい状態が届くたびに進行中の計画を更新したりできる。また、モデルが提供する推論の要約の処理もサポートする。ただし、それらはモデルが送信する要約であり、内部的な思考の連鎖ではないことが強調されている。
このレイヤーによって、Blazorの役割はチャットの表示から、ユーザーとエージェントが協働するワークスペースの構築へと拡張されるが、アプリケーションの責任がなくなるわけではない。画像、ファイル、音声の入力や、モデル固有のメディア処理は、引き続きアプリケーションとAIサービスの仕事である。また、コンポーネントはまだ実験的なため、APIや利用体験は、dotnet/aspnetcoreリポジトリに寄せられるフィードバックに基づいて変更される可能性がある。
開発者にとってのまとめ
Microsoftは、独立したチャットボットを追加するのではなく、明確な構造とワークフローを持つアプリケーションにエージェントを統合する必要がある開発者を対象としている。主な価値は、カスタマイズ可能なBlazorモデル内で、ストリーミング、ツール、状態、承認を統一することにある。同時に、表示方法とインターフェースの動作に関する最終的な決定権はアプリケーションに残される。