🤖

Microsoft 365 Agents SDK 0.2-alpha の変更点

に公開

はじめに

0.1 リリースからしばらく更新がなかった Microsoft 365 Agents SDK ですが、最近 0.2-alpha が NuGet で利用できるようになりました。特に公式な更新情報はありませんが、0.1 から 0.2-alpha にアップデートした際の変更点をまとめます。2025/04/16 時点の最新版は 0.2.314-alpha です。

変更点

パッケージ名の変更

状態管理に利用する IStorage を実装する関連のライブラリが Microsoft.Agents.Memory から Microsoft.Agents.Storage に変更されました。Microsoft.Agents.Memory は削除されており、0.1 も使用できない状態です。また、Microsoft.Agents.BotBuilder も Microsoft.Agents.Builder に変更されています。こちらは削除されずに deprecated フラグが付与されています。ライブラリ名の変更に合わせて名前空間も変更されています。

クラス名の変更

ボットのエントリ ポイントを示す IBot インターフェースが IAgent インターフェースに変更されました。IAgent インターフェースを実装するクラスとして AgentApplication クラスが追加されており、エージェントに特化した動作が可能です。従来のボットで利用していた ActivityHandler クラスも残されており、引き続き利用できます。

また、ボットを初期化するための処理が AddAgent 拡張メソッドにまとめられています。IHostApplicationBuilder インターフェースの拡張メソッドとして定義されているため、注意が必要です。

認証方法の変更

以前は README.md に記載されていた設定方法が削除され、サンプルに移動しています。詳細は AspNetExtensions.cs の実装を参照してください。

https://github.com/microsoft/Agents-for-net/blob/59b78b3802795f0f12daf0547928df2f76f13f88/src/samples/Shared/AspNetExtensions.cs

状態管理クラスの変更

これまでは UserState クラスや ConversationState クラスから状態を取得する際に CreateProperty メソッドを使用していました。これは非推奨となり、GetValue メソッドを利用するように変更されました。IStatePropertyAccessor インターフェースを経由しなくなったため、よりシンプルになりましたが、値を変更した場合は SetValue メソッドを呼び出さないと保存されません。また、UserState クラスや ConversationState クラスは明示的に LoadAsync メソッドを使って初期化する必要があります。これに合わせて OnTurnBeginAsync メソッドと OnTurnEndAsync メソッドが追加されています。これにより、初期化と保存の処理を明確に記述できます。

-     public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
-     {
-         await this.conversationState.LoadAsync(turnContext, false, cancellationToken);
-         base.OnTurnAsync(turnContext, cancellationToken);
-         await this.conversationState.SaveChangesAsync(turnContext, false, cancellationToken);
-     }
+     protected override async Task OnTurnBeginAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
+     {
+         await this.conversationState.LoadAsync(turnContext, false, cancellationToken);
+     }
+
+     protected override async Task OnTurnEndAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
+     {
+         await this.conversationState.SaveChangesAsync(turnContext, false, cancellationToken);
+     }

以前にダイアログが進まない問題を取り上げましたが、この書き方であれば確実に発生しなくなります。

https://zenn.dev/karamem0/articles/2025_02_05_090000

おわりに

今回の変更から、ボットという名称からエージェントへの移行を強く推進していることがうかがえます。破壊的な変更が多いことには要注意ですが、利便性が向上している点も多く、今後の発展に期待できます。

Discussion