Microsoftが提供するオープンソースのマルチ言語フレームワーク「Microsoft Agent Framework (MAF)」に、AIエージェントのオーケストレーションを劇的に進化させる「ワークフロープログラミングモデル」が導入されました。
2026年5月の最新アップデートでは、このモデルに強力な永続性 (Durability) が追加され、エンタープライズレベルのAIアプリケーション構築がより容易になっています。
本記事では、新しく追加された永続的ワークフローの仕組みから、Azure Functionsへのホスティング、さらには人間がプロセスに介入する「ヒューマン・イン・ザ・ループ」の実装まで、最新の開発手法を詳しく紹介します。
ワークフロープログラミングモデルの核となるコンセプト
MAFのワークフローモデルは、複数のエージェントや処理単位をステップバイステップのパイプラインとして構成するための仕組みです。
このモデルの基本となるのは、「Executor (エグゼキューター)」と「WorkflowBuilder (ワークフロービルダー)」の2つの要素です。
Executorによる処理の定義
Executorはワークフローにおける最小の処理単位です。
特定の入力を受け取り、処理を行い、次のステップへ渡す出力を生成します。
開発者は Executor<TInput, TOutput> を継承して、個々のタスクを定義します。
// 注文情報のルックアップを行うExecutor
internal sealed class OrderLookup()
: Executor<OrderCancelRequest, Order>("OrderLookup")
{
public override async ValueTask<Order> HandleAsync(
OrderCancelRequest message,
IWorkflowContext context,
CancellationToken cancellationToken = default)
{
// データベースから注文を検索する処理をシミュレート
await Task.Delay(TimeSpan.FromMilliseconds(100), cancellationToken);
return new Order(
Id: message.OrderId,
OrderDate: DateTime.UtcNow.AddDays(-1),
IsCancelled: false,
CancelReason: message.Reason,
Customer: new Customer(Name: "Jerry", Email: "jerry@example.com"));
}
}
WorkflowBuilderによるグラフの構築
個別のExecutorを定義したら、それらを WorkflowBuilder を使って接続し、有向グラフを構成します。
これにより、シーケンシャルな実行だけでなく、複雑な条件分岐や並列実行もモデル化できるようになります。
// 各ステップを定義
OrderLookup orderLookup = new();
OrderCancel orderCancel = new();
SendEmail sendEmail = new();
// ワークフローを組み立てる (OrderLookup -> OrderCancel -> SendEmail)
Workflow cancelOrder = new WorkflowBuilder(orderLookup)
.WithName("CancelOrder")
.WithDescription("注文のキャンセル処理と通知を行います")
.AddEdge(orderLookup, orderCancel)
.AddEdge(orderCancel, sendEmail)
.Build();
Durable Taskによるワークフローの永続化
標準のインプロセスランナーはメモリ上で動作するため、プロセスの再起動や障害が発生すると進行状況が失われてしまいます。
2026年5月のアップデートで注目すべきは、Durable Taskスタックとの統合です。
これを利用することで、ワークフローは以下の強力な特性を備えるようになります。
| 機能 | メリット |
|---|---|
| 自動チェックポイント | 各ステップ完了後に進行状況が自動保存され、障害発生後も中断した箇所から再開可能です。 |
| 分散実行 | ワークフロー内の各Executorを異なるマシンやコンテナで実行できます。 |
| 長期間の実行 | 数分、数時間、あるいは数日間にわたるプロセスを確実に管理できます。 |
| 可視化 | Durable Task Scheduler (DTS) のダッシュボードから、各ステップの実行時間や入出力を監視できます。 |
永続性を有効にするには、NuGetパッケージ Microsoft.Agents.AI.DurableTask を導入し、汎用ホスト構成時に ConfigureDurableWorkflows を呼び出すだけです。
驚くべきことに、ExecutorやWorkflowBuilderの定義自体を変更する必要はありません。
// 永続的なワークフローをホストする構成例
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureServices(services =>
{
services.ConfigureDurableWorkflows(
options => options.AddWorkflow(cancelOrder),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();
AIエージェントの並列実行 (ファンアウト/ファンイン)
AIエージェントをワークフロー内で直接Executorとして活用することも可能です。
AsAIAgent 拡張メソッドを使用すると、既存のチャットクライアントとプロンプトをワークフローの一環として組み込めます。
さらに、複数のエージェントを同時に実行する「ファンアウト/ファンイン」パターンもサポートされています。
例えば、物理学者エージェントと化学者エージェントに同じ質問を同時に投げ、その回答を後続のExecutorで集計するといった構成が容易に実現できます。
// AIエージェントをExecutorとして定義
AIAgent physicist = chatClient.AsAIAgent("あなたは物理の専門家です。", "Physicist");
AIAgent chemist = chatClient.AsAIAgent("あなたは化学の専門家です。", "Chemist");
// 並列実行を定義する
Workflow workflow = new WorkflowBuilder(parseQuestion)
.WithName("ExpertReview")
.AddFanOutEdge(parseQuestion, [physicist, chemist]) // 並列に分岐
.AddFanInBarrierEdge([physicist, chemist], aggregator) // 両方の完了を待って合流
.Build();
DTSダッシュボード上では、これらのエージェントが並列して実行され、それぞれの推論が個別にチェックポイント保存される様子を確認できます。
プロセスが途中でクラッシュしても、すでに完了したエージェントの推論結果は保持され、再実行のコストを最小限に抑えられます。
Azure Functionsによるサーバーレス・スケーリング
開発したワークフローをクラウドへ展開する際、最も効率的な選択肢となるのが Azure Functions です。
Microsoft.Agents.AI.Hosting.AzureFunctions パッケージを利用すると、ワークフロー定義から自動的にHTTPエンドポイントやオーケストレーター関数が生成されます。
サーバーレスホスティングには、以下の大きな利点があります。
- ゼロ・ボイラープレート:インフラ管理のためのコードを書く必要がなく、ビジネスロジックに集中できます。
- 自動HTTPトリガー:
/api/workflows/{Name}/runのようなエンドポイントが自動生成され、外部から即座に呼び出せます。 - MCPツール対応:フラグを1つ設定するだけで、ワークフローを Model Context Protocol (MCP) ツールとして公開でき、他のAIシステムから発見・利用可能になります。
// Azure Functionsでのホスティング例
using IHost app = FunctionsApplication
.CreateBuilder(args)
.ConfigureFunctionsWebApplication()
.ConfigureDurableWorkflows(workflows => workflows.AddWorkflow(cancelOrder))
.Build();
app.Run();
ヒューマン・イン・ザ・ループの実装
現実のビジネスプロセスでは、AIの判断だけでなく人間の承認が必要な場面が多々あります。
MAFでは RequestPort を使用して、ワークフローを一時停止し、外部からの入力を待機させる「ヒューマン・イン・ザ・ループ (HITL)」を簡単に実装できます。
たとえば、経費精算ワークフローにおいてマネージャーの承認を待つ場合、RequestPort をグラフに配置します。
Azure Functions環境下では、ワークフローは一時停止状態となり、リソースを消費せずに外部システムやUIからの POST 要求(承認/却下)を待ち続けます。
// 人間の承認を待機するポートを定義
RequestPort<ApprovalRequest, ApprovalResponse> managerApproval =
RequestPort.Create<ApprovalRequest, ApprovalResponse>("ManagerApproval");
// ワークフローへ組み込み
builder.AddEdge(createRequest, managerApproval)
.AddEdge(managerApproval, nextStep);
まとめ
Microsoft Agent Frameworkの最新アップデートにより、C#開発者は「柔軟なAIオーケストレーション」と「ミッションクリティカルな堅牢性」を両立させることが可能になりました。
インプロセスでのクイックな開発から始め、コードを書き換えることなくDurable Taskによる永続化やAzure Functionsによるグローバルなスケーリングへと移行できるこのモデルは、AIエージェント開発の標準となる可能性を秘めています。
今回のアップデートの要点は以下の通りです。
- 永続性の確保:Durable Task連携により、プロセスの再起動や障害に強いワークフローを実現。
- 並列実行の簡素化:ファンアウト/ファンインにより、複数のAIエージェントの協調動作を容易に記述。
- クラウドネイティブ対応:Azure Functionsへの統合により、サーバーレスでの展開とMCPツールとしての公開が可能。
- 人間との協調:
RequestPortにより、ワークフローの一時停止と再開を伴う複雑な承認プロセスに対応。
これからAIエージェントを構築する開発者にとって、Microsoft Agent Frameworkは、単なるライブラリ以上の強力なプラットフォームへと進化を遂げました。
ぜひ、GitHubのサンプルコードを手に取り、その可能性を体感してください。
