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.BotBuilder
も Microsoft.Agents.Builder
に変更されています。こちらは削除されずに deprecated
フラグがついています。ライブラリ名の変更に合わせて名前空間も変更されています。
クラス名の変更
ボットのエントリ ポイントを示す IBot
インターフェースが IAgent
インターフェースに変更されました。IAgent
インターフェースを実装するクラスとして AgentApplication
クラスが追加されており、エージェントに特化した動きができるようになっています。従来のボットで利用していた ActivityHandler
クラスも残されており、引き続き使うことができます。
またボットを初期化するために書いていた処理が AddAgent
拡張メソッドにまとめられています。IHostApplicationBuilder
インターフェースの拡張メソッドとして定義されているので注意が必要です。
認証方法の変更
以前は README.md にあった設定方法が削除されて sample に移動しています。詳しくは 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);
+ }
以前にダイアログが進まない問題を取り上げましたがこの書き方であれば確実に発生しなくなります。
おわりに
ボットという名前を捨ててエージェントに移行しようという強い意志を感じました。破壊的変更がまだまた多いので注意ですが便利になっているところもあり今後に期待したいです。
Discussion