适用于: SDK v4
本文介绍如何使用检测中间件来调试机器人。 有了此功能,Bot Framework Emulator 就可以调试出入机器人的流量并查看机器人的当前状态。 可以使用跟踪消息将数据发送给 Emulator,然后检查任意给定聊天轮次中机器人的状态。
在创建机器人快速指南 中,我们使用 EchoBot(使用 Bot Framework v4 在本地构建)来演示如何调试并检查机器人的消息状态。 也可使用 IDE 来调试机器人,或者使用 Bot Framework Emulator 进行调试,但若要调试状态,则需为机器人添加检测中间件。 提供了用于 C#、JavaScript、Java 和 Python 的检测机器人示例。
重要
Bot Framework SDK 和 Bot Framework Emulator 已在 GitHub 上存档。 项目不再更新或维护。 自 2025 年 12 月 31 日起,Bot Framework SDK 的支持票证将不再提供服务。
若要使用所选的 AI 服务、业务流程和知识生成代理,请考虑使用 Microsoft 365 代理 SDK。 代理 SDK 对 C#、JavaScript 或 Python 具有语言支持。 可以在 aka.ms/agents 了解有关代理 SDK 的详细信息。 如果现有的机器人是使用 Bot Framework SDK 生成的,则可以将机器人更新到代理 SDK。 查看 Bot Framework SDK 到代理 SDK 迁移指南的核心更改和更新。
如果要构建设计为在 Microsoft Teams 中工作的协作代理,请考虑使用 Teams SDK。 它为在 Teams 环境中运行的代理提供 Teams 特定的 API、自适应卡支持和内置 AI 协同调度功能。 可以在 Teams SDK(Teams AI 库)中了解详细信息。
如果要查找基于 SaaS 的代理平台,请考虑 Microsoft Copilot Studio。
先决条件
- 具备机器人中间件和管理状态方面的知识
- 了解如何调试 SDK 优先机器人以及如何使用模拟器进行测试和调试
- 安装 Bot Framework Emulator
- 安装开发隧道(如果你想调试已在 Azure 中配置为使用其他通道的机器人)
- 用于 C#、JavaScript、Java 或 Python 的检测机器人样本的副本
将 Emulator 更新到最新版本
在使用机器人检测中间件调试机器人之前,请将 Emulator 更新到 4.15 版本或更高版本。 查看最新版本以了解更新。
若要查看 Emulator 的版本,请在菜单中选择“帮助”,然后选择“关于”。 此时就会看到 Emulator 的当前版本。
更新机器人代码
检测状态和检测中间件在 Startup.cs 文件中配置,然后由适配器使用。
Startup.cs
});
services.AddSingleton<ConversationState>();
// Create the Bot Framework Authentication to be used with the Bot Adapter.
AdapterWithInspection.cs
{
public class AdapterWithInspection : CloudAdapter
{
public AdapterWithInspection(BotFrameworkAuthentication auth, IConfiguration configuration, InspectionState inspectionState, UserState userState, ConversationState conversationState, ILogger<IBotFrameworkHttpAdapter> logger)
: base(auth, logger)
{
// Inspection needs credentials because it will be sending the Activities and User and Conversation State to the emulator
var credentials = new MicrosoftAppCredentials(configuration["MicrosoftAppId"], configuration["MicrosoftAppPassword"]);
Use(new InspectionMiddleware(inspectionState, userState, conversationState, credentials));
OnTurnError = async (turnContext, exception) =>
{
// Log any leaked exception from the application.
logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");
// Send a message to the user
await turnContext.SendActivityAsync("The bot encountered an error or bug.");
await turnContext.SendActivityAsync("To continue to run this bot, please fix the bot source code.");
// Send a trace activity, which will be displayed in the Bot Framework Emulator
await turnContext.TraceActivityAsync("OnTurnError Trace", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
};
}
在 EchoBot.cs 文件中更新机器人类。
EchoBot.cs
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
var conversationStateProp = _conversationState.CreateProperty<CustomState>("customState");
var convProp = await conversationStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);
var userStateProp = _userState.CreateProperty<CustomState>("customState");
var userProp = await userStateProp.GetAsync(turnContext, () => new CustomState { Value = 0 }, cancellationToken);
await turnContext.SendActivityAsync(MessageFactory.Text($"Echo: {turnContext.Activity.Text} conversation state: {convProp.Value} user state: {userProp.Value}"), cancellationToken);
convProp.Value++;
userProp.Value++;
}
在本地测试机器人
更新代码后,即可在本地运行机器人并使用两个 Emulator 来测试调试功能:一个用于发送和接收消息,另一个用于在调试模式下检测消息的状态。 若要在本地测试机器人:
在终端中切换到你的机器人所在的目录,并执行以下命令,以在本地运行你的机器人:
dotnet run打开 Emulator。 选择“打开机器人”。 在“机器人 URL”中填写
http://localhost:3978/api/messages以及 MicrosoftAppId 和 MicrosoftAppPassword 的值。 如果使用 JavaScript 机器人,则可在机器人的 .env 文件中找到这些值。 如果使用 C# 机器人,则可在 appsettings.json 文件中找到这些值。 对于 Java 机器人,可以在 application.properties 文件中找到这些值。 选择“连接” 。现在,打开另一个 Emulator 窗口。 这第二个 Enulator 窗口将充当调试器。 请按上一步的说明操作。 勾选“在调试模式下打开”,然后单击“连接”。
此时,你将在调试 Emulator 中看到带有唯一标识符 (
/INSPECT attach <identifier>) 的命令。 从调试模拟器复制带有该标识符的整个命令,并将其粘贴到第一个模拟器的聊天框中。注意
将检测中间件添加到机器人的代码中后,每次在调试模式下启动 Emulator 时,都会生成一个唯一标识符。
现在可以将消息发送到第一个 Emulator 的聊天框中,并在调试 Emulator 中检测消息。 若要检测消息的状态,请单击调试模拟器中的“机器人状态”,然后在右侧的 JSON 窗口中展开“values”。 你将在调试 Emulator 中看到机器人的状态:
检测在 Azure 中配置的机器人的状态
如果您想检查已在 Azure 中配置并连接到通道(如 Teams)的机器人的状态,则需要安装并运行 Dev Tunnels。
运行 devtunnel
目前,你已将 Emulator 更新到最新版本,并在机器人的代码中添加了检测中间件。 下一步是运行 devtunnel,并配置本地机器人。 在运行 devtunnel 之前,需要在本地运行机器人。
若要在本地运行机器人:
在终端中进入你的机器人文件夹,并将 npm 注册源设置为使用 最新构建版本
在本地运行您的机器人程序。 你会看到你的机器人显示一个端口号,例如
3978。打开另一个命令提示符,并转到机器人的项目文件夹。 运行下面的命令:
devtunnel host -a -p 3978devtunnel 现已连接到你在本地运行的机器人。 复制安全 (HTTPS) 公共 URL。
更新机器人资源
现在,本地机器人已连接到 devtunnel,可以在 Azure 中配置机器人资源以使用 devtunnel URL。
转到 Azure 中的机器人资源。 在左侧菜单上,选择“设置”下的“配置”。
将消息传送终结点设置为复制的 devtunnel URL 地址。 根据需要在 IP 地址后添加 /api/messages。 例如,
https://0qg12llz-3978.usw2.devtunnels.ms/api/messages。选择“启用流式传输终结点”。
选择应用以保存所做的更改。
提示
如果“应用”未启用,则可取消勾选“启用流式处理终结点”并选择“应用,”,然后再次勾选“启用流式处理终结点”并选择“保存”。 需确保“启用流式处理终结点”已选中且终结点配置已保存。
请转到机器人的资源组。
选择“部署”,然后选择以前成功部署的机器人资源。 从左侧菜单中选择“模板”,获取与机器人关联的 Web 应用的 MicrosoftAppId 和 MicrosoftAppPassword。
使用 MicrosoftAppId 和 MicrosoftAppPassword 更新机器人的配置文件(C# 的 appsettings.json 或 JavaScript 的 .env)。
启动模拟器,选择打开机器人,然后在Bot URL中输入
http://localhost:3978/api/messages。 在 Microsoft 应用 ID 和 Microsoft 应用密码 中填写与您添加到我们的机器人配置文件中的 MicrosoftAppId 和 MicrosoftAppPassword 相同的值。 然后选择“连接” 。正在运行的机器人现已连接到 Azure 中的机器人资源。 若要在Web 聊天中测试 Azure 中的机器人,请转到机器人资源,选择“在Web 聊天中测试”,然后将消息发送到机器人。
启用调试模式
在 Emulator 中,选择“调试”,然后选择“开始调试”。
在Bot URL中输入 devtunnel URL(别忘了添加/api/messages,例如
https://4jj51x75-51865.usw2.devtunnels.ms/api/messages)。- 在“Microsoft 应用 ID”中,输入你的机器人的应用 ID。
- 在“Microsoft 应用密码”中,输入机器人应用的密钥。
- 确保还勾选“在调试模式下打开”。
- 选择“连接” 。
启用调试模式后,Emulator 将生成 UUID。 UUID 是一个独一无二的 ID,每次在 Emulator 中启动调试模式时,就会生成它。
复制 UUID 并将其粘贴到您的频道聊天框中的“在 Web 聊天中测试”聊天框中。 你会在聊天框中看到“已连接到会话,所有流量都将被复制以供检查”这条消息。
你可以通过在已配置通道的聊天框中发送消息来开始调试你的机器人。 你的本地模拟器会自动在消息中更新所有调试详情。 若要检测机器人的消息状态,请单击“机器人状态”,然后在右侧的 JSON 窗口中展开“values”。
后续步骤
- 了解如何使用会话记录文件调试机器人。
- 了解如何调试技能或技能使用方。