关于botbuilder-applicationinsights用户话语日志及自定义字段添加的技术问询
没问题!你完全可以扩展现有Dialog日志的字段,也能轻松启用botbuilder-applicationinsights自带的用户话语日志功能,我给你拆解一下具体怎么做:
一、添加用户话语或自定义键值对到Dialog日志
你有两种灵活的方式来扩展日志内容:
- 扩展默认Dialog事件属性:在处理Dialog步骤的代码里,直接把用户话语和自定义键值对加入到Telemetry事件的属性字典中,这样就能和现有的InstanceId、DialogId等字段一起记录。示例代码如下:
// 在Dialog的某个Step逻辑中 var telemetryClient = turnContext.TurnState.Get<ITelemetryClient>(); var eventProperties = new Dictionary<string, string> { { "InstanceId", dialogContext.InstanceId }, { "DialogId", dialogContext.ActiveDialog.Id }, { "StepName", "UserInputProcessingStep" }, // 替换为你的步骤名称 { "UserUtterance", turnContext.Activity.Text }, // 新增用户话语字段 { "CustomAttribute", "CustomValue" }, // 自定义键值对,按需添加 { "UserSessionDuration", "5m30s" } }; telemetryClient.TrackEvent("DialogStepCompleted", eventProperties);
- 创建自定义Telemetry事件:如果默认的Dialog事件结构满足不了你的需求,也可以单独创建自定义事件,把所有需要的维度都包含进去,这种方式更适合需要独立分类分析的场景。
二、启用botbuilder-applicationinsights的用户话语自动日志
这个功能是框架内置的,只需要简单配置就能开启:
- 配置Telemetry中间件:在Bot的初始化代码中,添加
TelemetryInitializerMiddleware并开启个人信息日志(这是记录用户话语的关键):
// 初始化Application Insights客户端 var telemetryClient = new TelemetryClient(new TelemetryConfiguration("你的InstrumentationKey")); // 配置Telemetry中间件,启用用户话语日志 var telemetryMiddleware = new TelemetryInitializerMiddleware( telemetryClient, logPersonalInformation: true // 必须设为true才会记录用户话语 ); // 将中间件添加到Bot Adapter中 adapter.Use(telemetryMiddleware);
- 查看日志:启用后,Application Insights的事件列表里会自动生成
MessageReceived(用户发消息)和MessageSent(Bot回复)事件,其中UserMessage字段就是用户的话语内容。
三、关于扩展字段 vs 直接记录的选择
- 如果需要关联Dialog会话全流程数据(比如追踪一个Dialog会话中用户的每一步输入和操作),优先选择扩展现有Dialog事件的属性,这样所有相关数据都在同一个事件条目里,后续查询分析更连贯。
- 如果用户话语或自定义数据是独立的分析维度(比如单独统计用户高频提问),或者你需要更清晰的事件分类,那单独记录自定义事件也完全可行,两种方式甚至可以结合使用。
内容的提问来源于stack exchange,提问作者Wickkiey
相关产品推荐
相关产品推荐

