.NETにおけるAI開発のエコシステムが急速に進化を続ける中、2026年4月、ついにMicrosoft Agent Frameworkがバージョン1.0として正式にリリースされました。
これまでのシリーズでは、大規模言語モデル (LLM) を抽象化し統一されたインターフェースを提供する「Microsoft Extensions for AI (MEAI)」や、セマンティック検索とRAGパターンを実現する「Microsoft.Extensions.VectorData」について解説してきました。
本記事では、これらを基盤として「自ら考え、行動する」AIを実現するための第3の柱であるMicrosoft Agent Frameworkの詳細を紐解きます。
AIエージェントとは何か:チャットボットとの違い
これまで私たちが慣れ親しんできた「チャットボット」は、基本的にユーザーの入力をモデルに渡し、その応答を返すという仕組みでした。
しかし、AIエージェントはそれ以上の存在です。
最大の違いは、エージェントが「自律性」を持っている点にあります。
AIエージェントは、与えられたタスクに対して推論を行い、どのツールを使用すべきかを決定し、実際にそのツールを呼び出して結果を評価し、次のアクションを自ら判断します。
開発者がすべてのステップを明示的にプログラミングしなくても、AIが目的を達成するためのプロセスを動的に組み立てるのです。
例えるなら、MEAIが「同僚との会話」であるのに対し、エージェントは「同僚にToDoリストを渡し、その完遂を任せる」ようなものです。
エージェントは必要に応じて情報を検索し、計算を実行し、データベースを参照するなど、与えられた道具を駆使して任務を遂行します。
Microsoft Agent Framework の導入
Microsoft Agent Frameworkは、.NET環境でプロダクション品質のインテリジェントエージェントを構築するためのSDKです。
単一のエージェントによるシンプルなシナリオから、複数のエージェントが連携する複雑なグラフベースのワークフローまで幅広くサポートしています。
まずは、最もシンプルなエージェントを作成してみましょう。
このフレームワークはMEAIのIChatClientの上に構築されているため、既存のMEAI利用者にとっては非常に親和性が高い設計となっています。
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
// 環境変数からエンドポイントとモデル名を取得
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME")
?? "gpt-5.4-mini";
// AIAgentの作成
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsAIAgent(
instructions: "あなたはジョークを言うのが得意なアシスタントです。",
name: "Joker");
// エージェントの実行
Console.WriteLine(await agent.RunAsync("海賊についてのジョークを教えてください。"));
ここで注目すべきは、.AsAIAgent()という拡張メソッドです。
これにより、IChatClientがエージェントとしてラップされ、セッション管理やツール利用、メモリ機能が統合されます。
このコードを実行すると、エージェントは指定された役割に従って応答を生成します。
海賊が一番好きな文字は何だと思いますか?……「R(アール)」だと思われがちですが、実は「C(シー:海)」を愛しているんですよ!
ツールによるエージェントの能力拡張
エージェントが真の力を発揮するのは、「ツール」を与えられたときです。
ツールとは、モデルが特定の情報を取得したりアクションを実行したりするために呼び出すことができる関数です。
Microsoft Agent Frameworkでは、MEAIのAIFunctionFactoryをそのまま利用できます。
以下の例では、エージェントに天気を取得する機能を持たせています。
using System.ComponentModel;
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
// ツールとして提供する関数の定義
[Description("指定された場所の天気を取得します。")]
static string GetWeather(
[Description("天気を調べる場所(例:東京)。")] string location)
=> $"{location}の天気は曇り、最高気温は15度の予定です。";
// ツールを搭載したエージェントの構築
AIAgent agent = new AzureOpenAIClient(
new Uri(endpoint),
new DefaultAzureCredential())
.GetChatClient(deploymentName)
.AsAIAgent(
instructions: "あなたは親切なアシスタントです。",
tools: [AIFunctionFactory.Create(GetWeather)]);
Console.WriteLine(await agent.RunAsync("アムステルダムの天気はどうですか?"));
エージェントはユーザーの質問を理解すると、自分がGetWeatherというツールを持っていることを認識し、自ら引数を設定して呼び出します。
開発者が「もし天気について聞かれたらこの関数を呼ぶ」といった条件分岐を書く必要はありません。
モデルが「いつ」「どのツールを」使うべきかを判断するのです。
AgentSession による会話の継続と永続化
実際の対話では、ユーザーは「それについて詳しく教えて」といった、文脈に依存した質問を投げかけます。
Agent Frameworkでは、AgentSessionを使用して会話の履歴を管理します。
// セッションの開始
AgentSession session = await agent.CreateSessionAsync();
// 1回目のやり取り
Console.WriteLine(await agent.RunAsync("海賊のジョークを教えて。", session));
// 2回目のやり取り(前の文脈を保持)
Console.WriteLine(await agent.RunAsync("今のジョークに絵文字を追加して、海賊のオウム風に話して。", session));
さらに、このセッションはシリアライズが可能です。
ステートレスなマイクロサービス環境において、会話状態をデータベースに保存し、後で復元して対話を継続するといった実用的なシナリオも容易に実装できます。
AIContextProvider による長期記憶の実装
セッションが会話の一時的な履歴を保持するのに対し、「長期記憶」を実現するのがAIContextProviderです。
これにより、ユーザーの名前や好み、過去のインタラクションに基づく事実を、セッションをまたいで保持・活用できるようになります。
AIContextProviderには、主に2つの重要なメソッドがあります。
- StoreAIContextAsync:インタラクションの「後」に実行され、会話から情報を抽出して保存します。
- ProvideAIContextAsync:インタラクションの「前」に実行され、保存されている情報をプロンプトに注入します。
以下は、ユーザーの名前を記憶する簡易的なプロバイダーの構成イメージです。
// エージェント作成時にプロバイダーを登録
AIAgent agent = chatClient.AsAIAgent(new ChatClientAgentOptions()
{
ChatOptions = new()
{
Instructions = "あなたは親切なアシスタントです。常にユーザーの名前で呼んでください。"
},
AIContextProviders = [new UserInfoMemory(chatClient.AsIChatClient())]
});
この仕組みを使えば、ユーザーの好みを蓄積するプロバイダーや、VectorDataストアから関連文書を自動的に引き出すプロバイダーなどを組み合わせて、高度にパーソナライズされたエージェントを構築できます。
マルチエージェント・ワークフローのオーケストレーション
単一のエージェントでも強力ですが、現実世界の複雑な課題は、専門化された複数のエージェントを連携させることでより効果的に解決できます。
Microsoft Agent Frameworkは、グラフベースのワークフローシステムを提供しています。
ここでは「執筆者」と「校閲者」の2つのエージェントを組み合わせた「Writer-Critic」パターンを例に挙げます。
| 役割 | 内容 |
|---|---|
| 執筆エージェント | ユーザーの要望に基づき、下書きを作成する |
| 校閲エージェント | 下書きをレビューし、承認するか修正指示を出す |
このワークフローをグラフとして定義すると、校閲エージェントが「承認」を出すまで、執筆と修正のループを自動的に繰り返すことが可能です。
WorkflowBuilder builder = new(writerAgent);
builder
.AddEdge(writerAgent, criticAgent) // 執筆後に校閲へ
.AddEdge(criticAgent, writerAgent, condition: result => !result.IsApproved) // 未承認なら執筆へ戻る
.WithOutputFrom(criticAgent, condition: result => result.IsApproved); // 承認されたら終了
var workflow = builder.Build();
このようなオーケストレーションにより、開発者は個々のエージェントの責務をシンプルに保ちつつ、システム全体として高度なアウトプットを得ることができます。
Human-in-the-loop:人間による介入
AIの自律性は強力ですが、特に機密性の高い操作(データベースへの書き込み、送金、外部へのメール送信など)においては、「人間の承認」を介在させることが不可欠です。
Agent Frameworkは、この「Human-in-the-loop」をネイティブにサポートしています。
エージェントが特定のツールを呼び出そうとした際、処理を一時停止して承認要求を発行できます。
ユーザーがアプリケーションの画面上で内容を確認し、OKを出した場合にのみ、ツールが実行されるというフローをセキュアに実装できます。
まとめ
2026年4月にリリースされたMicrosoft Agent Framework 1.0は、.NETにおけるAIアプリケーション開発を、単なる「対話」から「タスクの自動遂行」へと押し上げました。
これまでに紹介した3つのビルディングブロックを振り返ってみましょう。
- MEAI (IChatClient):あらゆるAIモデルとの対話を可能にする共通基盤。
- VectorData:RAGパターンによる組織内データのセマンティック検索。
- Agent Framework:これらを統合し、自律的な推論、ツール利用、ワークフロー管理を実現。
これらは個別に利用することも可能ですが、組み合わせて使うことで真の価値を発揮します。
例えば、AIContextProviderの中でVectorDataを検索し、その結果をAIAgentに渡すことで、常に最新の知識に基づいた自律的な判断が可能になります。
次回の最終回では、エージェントが外部ツールやリソースをより標準的な方法で発見・利用するための「Model Context Protocol (MCP)」について紹介します。
Microsoft Agent Frameworkを武器に、次世代のインテリジェントなアプリケーション開発にぜひ挑戦してみてください。
