SuperAPI AI 工具集

agents-sdk-dotnet-activityhandler-migration

编程与开发

查看项目

更新于 10-16 12:51

技能介绍

用途

本技能用于把一个使用 Microsoft 365 Agents SDK、基于 ActivityHandler 兼容层(或 TeamsActivityHandler)的 .NET 机器人升级到现代的 AgentApplication 路由模式。

适用范围有明确限制:仅适用于已经使用 Microsoft.Agents.* 包的 DotNet 项目。如果项目仍在使用 Microsoft.Bot.* 包,应先用 bf-to-agents-sdk-dotnet-migration 技能完成迁移。

两种入口

  • 独立使用:机器人已使用 Microsoft.Agents.* 包、命名空间和 appsettings,重点处理机器人类、Program.cs 和端点映射。
  • 作为第二步:在 bf-to-agents-sdk-dotnet-migration 之后使用,此时包、命名空间和 appsettings 已转换完成,本技能负责 AgentApplication 的转换。

不需要改动的部分

技能要求先核实以下内容是否正确,除非已损坏否则不要修改:机器人类中的命名空间(应已是 Microsoft.Agents.*,只需移除兼容命名空间)、appsettings.json(应已包含 Connections 与 TokenValidation 段)、builder.Services.AddAgentAspNetAuthentication(...)(应已存在,保留)、AspNetExtensions.cs(示例提供的认证辅助文件,保持原样)、Program.cs 中的自定义依赖注入(保留 dialogs、adapters、自定义服务,但需移除 ConversationState 与 UserState)。

处理器映射

ActivityHandler 的各覆写方法对应到 AgentApplication 的注册方式,包括:OnMessageActivityAsync 对应 OnActivity(ActivityTypes.Message, handler, rank: RouteRank.Last);OnMembersAddedAsync 对应 OnConversationUpdate(ConversationUpdateEvents.MembersAdded, handler);OnMembersRemovedAsync 对应 MembersRemoved 事件;OnMessageUpdateActivityAsync 对应 ActivityTypes.MessageUpdate;OnMessageDeleteActivityAsync 对应 ActivityTypes.MessageDelete;OnReactionsAddedAsync 对应 OnMessageReactionsAdded;OnReactionsRemovedAsync 对应 OnMessageReactionsRemoved;OnEventAsync 对应 OnEvent(eventName, handler) 或 OnActivity(ActivityTypes.Event, handler);OnTurnAsync 对应 OnBeforeTurn / OnAfterTurn;其他安装、会话结束类活动也有对应注册方式。

关键差异:处理器签名从 (ITurnContext<T>, CT) 变为 (ITurnContext, ITurnState, CT);membersAdded、membersRemoved、messageReactions 不再是独立参数,需通过 turnContext.Activity.* 访问。

自适应卡与搜索 invoke

  • adaptiveCard/action:把基于 verb 的 switch 改为按 verb 注册 AdaptiveCards.OnActionExecute。AdaptiveCards 是 AgentApplication 上的属性,无需 RegisterExtension。处理器直接接收 action.data,返回 AdaptiveCardInvokeResponse,不再需要 CreateInvokeResponse() 包装。
  • application/search:改为按 dataset 注册 AdaptiveCards.OnSearch,处理器返回 IList<AdaptiveCardsSearchResult>,框架自动包装为 application/vnd.microsoft.search.searchResponse 格式。dataset 名称来自卡片的 choices.data.dataset。

机器人类与状态管理

技能给出带 Dialogs 与不带 Dialogs 两种机器人类改写示例,均要求移除 Compat 命名空间引用,保留其余 Microsoft.Agents.* 引用。使用 Dialogs 时不再向机器人注入 ConversationState,而是把 turnState.Conversation 传给 Dialog.RunAsync;signin 类 invoke 使用名称模式路由,可同时匹配 signin/verifyState 与 signin/tokenExchange。

状态管理方面,移除 OnTurnBeginAsync / OnTurnEndAsync 中手动加载与保存状态的覆写,以及为此注入的 ConversationState、UserState 字段,AgentApplication 会自动处理状态。若自定义 CloudAdapter 子类仅为错误时调用 DeleteStateAsync 而注入 ConversationState,应把该逻辑移到 AgentApplication 的 OnTurnError 处理器。仍以 ConversationState 或 UserState 作为构造参数的自定义类可暂时不改,但需作为后续事项提醒客户改为从 ITurnState.Conversation 或 ITurnState.User 获取状态。

预发布包注意事项

若需要 beta 包,技能要求明确告知用户:该迁移使用预发布(-beta)Agents SDK 包,属于 nightly 构建,不适合生产环境,部署前应升级到稳定版本。

关于 Teams 专用处理器

对包含 Teams 专用处理器(消息扩展、任务模块等)的 TeamsActivityHandler 机器人,原文指向 Step 1-d,但资料在此处截断,该部分具体内容暂未提供。