🤖

Microsoft 365 Agents SDK 0.2-alpha の変更点

に公開

はじめに

0.1 リリースからずっと音沙汰のなかった Microsoft 365 Agents SDK ですが、ちょっと前から 0.2-alpha が NuGet で使えるようになっています。特に更新情報はないのですが 0.1 から 0.2-alpha にアップデートしてみたので変更点を書いておきます。なお 2025/4/16 時点の最新版は 0.2.314-alpha です。

変更点

パッケージ名の変更

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

クラス名の変更

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

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

認証方法の変更

以前は README.md にあった設定方法が削除されて sample に移動しています。詳しくは 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