Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Migrating Semantic Kernel Agents to Microsoft Agent Framework in ASP.NET Core

2026年10月26日に「Dev.to」が公開したITニュース「Migrating Semantic Kernel Agents to Microsoft Agent Framework in ASP.NET Core」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

MicrosoftのAIエージェント開発ツールSemantic Kernelは保守モードに入り、後継のMicrosoft Agent Framework (MAF)への移行が推奨される。MAFはKernelを廃止し、アーキテクチャを簡素化。新機能は全てMAFで提供されるため、初心者も新しい標準への移行が重要だ。

ITニュース解説

AIエージェントとは、ユーザーの指示や与えられた情報に基づいて、自動的にタスクを実行するプログラムのことだ。これまで、.NET開発者がAIエージェントを構築する際に主要なツールキットとして利用してきたのが「Semantic Kernel(セマンティック・カーネル)」だった。Semantic Kernelは長年にわたり、.NET環境でのAIエージェント開発の標準的な存在として機能してきた。

しかし、2026年4月にMicrosoftは「Microsoft Agent Framework(MAF)」バージョン1.0をリリースした。これはSemantic Kernelのエンタープライズ向け機能と、複数エージェント連携パターンで知られる「AutoGen」の概念を統合したものだ。現在、MAFはバージョン1.26に達しており、Semantic Kernelは「メンテナンスモード」に移行している。これは、Semantic Kernelが今後、重大なバグ修正やセキュリティパッチのみを受け取り、グラフワークフロー、ネイティブなエージェント間通信、耐久性のある実行、より高度なミドルウェアといったすべての新しい機能開発はMAFに集中されることを意味する。

既存のシステムで稼働しているSemantic Kernelエージェントがある場合でも、すぐに書き直す必要はないが、移行を先延ばしにすればするほど、機能的なギャップは広がり、将来的な移行作業がより複雑になる可能性が高まる。この状況を受けて、Semantic KernelベースのエージェントをMAFへ移行することの重要性が高まっている。

従来のSemantic Kernelでは、「Kernel」という中心的なオブジェクトが、AIモデルとの対話(チャットサービス)、外部ツールの利用(プラグイン)、処理の途中に割り込む機能(フィルター)、過去の会話履歴の保持(メモリ)といった、AIエージェントのほぼすべての機能を一手に引き受けていた。これは開発をシンプルにする一方で、エージェントの機能が複雑になるにつれて、Kernelが多岐にわたる責任を負い、見通しが悪くなる可能性があった。

Microsoft Agent Frameworkは、この「Kernel」に集中していた責任を、より専門化された複数のコンポーネントに分割した。これにより、各コンポーネントが明確な役割を持ち、システム全体の柔軟性、拡張性、保守性が向上する。

MAFにおける主要なコンポーネントの役割は以下の通りだ。 AIモデルへのアクセスは「IChatClient」というインターフェースを通じて行われる。「Microsoft.Extensions.AI」ライブラリの一部で、Azure OpenAIやOllamaのような具体的なAIモデルとデータを受け渡しする窓口となる。AIモデルの種類が変わっても、エージェント側は同じ方法で対話できる。

エージェント自身の振る舞いを定義するのが「AIAgent」だ。最も一般的には「ChatClientAgent」という形で実装される。AIAgentには、「あなたは親切な天気予報アシスタントです」といった具体的な指示を与えたり、エージェントが利用できるツールを登録したりする。IChatClientと連携し、AIモデルとの会話を管理しながらタスクを実行する。

エージェントが外部の機能を利用するための「ツール」は「AIFunction」として表現される。Semantic Kernelでは「プラグイン」と呼ばれ、専用のクラスや属性が必要だったが、MAFではよりシンプルになった。一般的なC#のメソッド(静的メソッドなど)として実装し、「AIFunctionFactory.Create」でAIFunctionとして登録できる。メソッドには「Description」属性を付けて、その機能が何をするものかをAIエージェントに伝える。

会話の連続性を管理するのは「AgentSession」だ。これはエージェント自身が作成する。多ターンにわたる会話の流れや履歴をAgentSessionが保持し、前の会話の文脈を考慮した応答を可能にする。Semantic Kernelでは開発者が「AgentThread」として会話履歴を管理していたが、MAFではエージェントがセッションの作成と管理を担うことで、よりシンプルに扱えるようになった。

このように、MAFでは従来の「Kernel」が必須ではなくなり、各機能がより独立したコンポーネントとして提供される。開発者はまず、使用するAIモデルに対応するチャットクライアントを作成し、そのクライアントの拡張メソッドである「.AsAIAgent(...)」を呼び出すことで、簡単にAIAgentを構築できる。

具体的なコードの変更点を見てみよう。例えば、都市の天気情報を取得できるエージェントの場合、Semantic Kernelでは「Kernel」オブジェクトを構築し、天気情報を取得するメソッドを持つクラスをKernelにプラグインとして登録し、Agentを作成して会話スレッドを作成し呼び出していた。これがMAFでは、AIモデルに接続する「AzureOpenAIClient」を直接作成し、「.AsIChatClient()」で「IChatClient」としてラップする。次に、このIChatClientに対して「.AsAIAgent(...)」を呼び出すだけでAIAgentを作成できる。天気予報メソッドは一般的なC#メソッドとして定義し、「AIFunctionFactory.Create(GetWeather)」を使ってAIFunctionとして直接登録する。会話セッションはエージェントの「CreateSessionAsync()」で作成し、エージェントの実行は「RunAsync」メソッドで行う。Semantic Kernelで必要だった「Kernel」オブジェクトも専用プラグインクラスも不要となり、より直感的でシンプルなコードでエージェントを構築できるようになった。

ASP.NET CoreのようなWebアプリケーションフレームワークにエージェントを組み込む場合、「Dependency Injection(DI)」という仕組みが重要になる。DIは、アプリケーションが必要なコンポーネント(IChatClientやAIAgent)を自動的に提供してくれる仕組みだ。MAFでは、IChatClientとAIAgentをASP.NET Coreのサービスとして登録できる。例えば、「builder.Services.AddSingleton<IChatClient>(...)」でIChatClientを登録し、「builder.Services.AddKeyedSingleton<AIAgent>("WeatherAgent", ...)"」のように、特定の名前を付けてAIAgentを登録できる。これにより、Web APIのコントローラーなどで必要なAIAgentのインスタンスを簡単に受け取って利用できる。エージェントがリクエストごとに異なる状態を持つ必要がある場合は、「AddScoped」を使ってリクエストごとに新しいインスタンスを作成する設定も可能だ。

会話の管理や、AIモデルとのやり取りに関する詳細な設定もMAFではシンプルに扱える。多ターンにわたる会話の場合、「AgentSession」を会話の開始時に一度だけ作成し、そのセッションをその後のすべてのやり取りで再利用することで、会話の文脈を維持できる。また、AIモデルからの回答が長い場合に、テキストが生成される途中で少しずつ受け取って表示する「ストリーミング」機能も、「agent.RunStreamingAsync(...)」を使うことで簡単に実現できる。AIモデルの出力トークン数制限など、AIモデルの推論に関するオプションは、「ChatClientAgentRunOptions」というオブジェクトを使って設定できる。

既存のSemantic KernelエージェントをMAFへ移行する際の具体的な手順は、以下のようになる。まずMAF関連のパッケージを追加し、Semantic Kernelの「[KernelFunction]」属性を使っていたメソッドを、通常のC#メソッドとして抽出し、「[Description]」属性のみを持たせるように変更する。Semantic Kernelの「Kernel」と「ChatCompletionAgent」を構築していた部分を、IChatClientの「.AsAIAgent(...)」呼び出しに置き換え、抽出したメソッドを「AIFunctionFactory.Create」でAIFunctionとして渡す。会話スレッドの作成は「await agent.CreateSessionAsync()」に変更し、エージェントの実行メソッドは「InvokeAsync」や「InvokeStreamingAsync」から「RunAsync」や「RunStreamingAsync」に切り替える。ASP.NET CoreのDI設定も、Kernelベースからキー付きのAIAgent登録に更新する。これらの変更後には、必ず既存のテストを実行し、新しいMAFエージェントが期待通りに動作することを確認することが非常に重要だ。

ただし、全てのSemantic KernelエージェントをすぐにMAFへ移行する必要があるわけではない。もし既存のSemantic Kernelエージェントが安定して動作しており、新しい機能が不要であれば、緊急性はない。Semantic Kernelは今後もクリティカルな修正やセキュリティパッチは受け取り続けるため、Microsoftの最新のサポート状況を確認し、次の機能開発サイクルに合わせて計画的に移行を進めるのが賢明だ。

Semantic KernelからMicrosoft Agent Frameworkへの移行は、AIエージェント開発の中心が「Kernel」という単一のオブジェクトから、より分離され、役割が明確なコンポーネントへと進化することを意味する。これにより、外部ツール(機能)の登録が簡素化され、将来的な機能拡張や、より高度なAIエージェント間の連携(ワークフロー)への対応が容易になるという大きなメリットがある。移行作業は多くが機械的なコードの置き換え作業であり、まずは比較的小さなエージェントから移行を試み、その成功を実運用で確認してから、残りのエージェントへと順次移行を進めるのが効果的なアプローチだ。

関連コンテンツ

関連IT用語

関連ITニュース