Análisis de los datos de telemetría del bot
SE APLICA A: SDK v4
Análisis del comportamiento del bot
Puede usar la siguiente colección de consultas para analizar el comportamiento del bot. Puede usar la colección para crear consultas personalizadas en Log Analytics de Azure Monitor y crear paneles de visualización de supervisión y Power BI.
Requisitos previos
Resulta útil tener un conocimiento básico de los conceptos siguientes:
- Consultas de Kusto
- Cómo usar Log Analytics en Azure Portal para escribir consultas de registros de Azure Monitor
- Conceptos básicos de las consultas de registros en Azure Monitor
Sugerencia
Si crea el bot mediante herramientas como Copilot Studio o Composer, querrá usar la versión de diálogo adaptable de cada consulta cuando esté disponible.
Paneles
Los paneles de Azure ofrecen una excelente manera de ver y compartir la información generada a partir de las consultas. Puede crear paneles personalizados para ayudar a supervisar la actividad de los bots mediante la asociación de las consultas con los iconos que agregue al panel. Para más información sobre los paneles y cómo asociar las consultas con ellos, consulte Creación y compartición de paneles de datos de Log Analytics. En el resto de este artículo se muestran ejemplos de algunas de las consultas que puede encontrar útiles para supervisar el comportamiento de los bots.
Ejemplos de consultas de Kusto
Nota:
Se recomienda dinamizar en diferentes dimensiones, como punto, canal y configuración regional para todas las consultas de este artículo.
Número de usuarios por período
En este ejemplo se genera un gráfico de líneas que muestra el número de usuarios distintos que se comunicaron con el bot al día durante los últimos 14 días. El período de tiempo se puede cambiar fácilmente asignando valores diferentes a las variables queryStartDate
, queryEndDate
e interval
.
Importante
Solo obtendrá un recuento correcto de usuarios únicos en esta consulta si son usuarios autenticados y los resultados también pueden depender de las funcionalidades del canal.
// number of users per period
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| summarize uc=dcount(user_Id) by bin(timestamp, groupByInterval)
| render timechart
Sugerencia
El operador summarize de Kusto se usa para generar una tabla que agrega el contenido de la tabla de entrada.
La función Bin es una función escalar de Kusto que, cuando se usa junto con summarize operator
, agrupará los resultados de la consulta en el valor especificado. En el ejemplo anterior, se agrupa por día; Kusto también acepta h=horas, m=minutos, s=segundos, ms=milisegundos, microsecond=microsegundos.
El operador render permite representar fácilmente gráficos, como timechart, un gráfico de líneas en el que el eje x es un valor de fecha y hora y se puede usar cualquier otra columna para el eje y. Mantiene el espaciado del eje x de forma automática, incluso si los datos no tienen todas las horas especificadas. Si no se usa ninguna instrucción render, el valor predeterminado es table
.
Número de ejemplo de resultados de consulta por período de usuarios
Actividad por período
En este ejemplo se muestra cómo medir el volumen de actividad por dimensión deseada, como un recuento del número de conversaciones, diálogos o mensajes por día durante los últimos 14 días. El período de tiempo se puede cambiar fácilmente asignando valores diferentes a las variables querystartdate
, queryEndDate
e interval
. La dimensión deseada se define mediante la extend
cláusula del ejemplo siguiente, metric
se puede establecer en InstanceId, DialogId o activityId.
Asigne metric a la dimensión que desea mostrar:
- InstanceId mide el número de Conversaciones.
- DialogId mide el número de Diálogos.
- ActivityId mide el número de Mensajes.
// Measures the number of activity's (conversations, dialogs, messages) per period.
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| where DialogId != '' and InstanceId != '' and user_Id != ''
| extend metric = InstanceId // DialogId or ActivityId
| summarize Count=dcount(metric) by bin(timestamp, groupByInterval)
| order by Count desc nulls last
| render timechart
Sugerencia
El operador extend de Kusto se usa para crear columnas calculadas y anexarlas al conjunto de resultados.
Resultados de consulta de actividad por período de ejemplo
Actividad por usuario y por período
En este ejemplo se muestra cómo contar el número de actividades por usuario y por período. Esta consulta explora en profundidad la actividad por consulta de período para centrarse en la actividad por usuario por período. Las actividades incluyen diálogos, conversaciones o mensajes. Esta consulta mide la interacción del usuario con el bot, que puede ayudar a encontrar posibles problemas, como:
- Los días con una gran cantidad de actividad por parte de un solo usuario pueden significar un ataque o una prueba
- Los días con poca interacción pueden indicar problemas de estado del servicio.
Sugerencia
Puede eliminar by user_Id para obtener el volumen de actividad general del bot, que se puede dinamizar sobre la hora y los diálogos, mensajes o conversaciones.
// number of users per period per dialogs
let queryStartDate = ago(14d);
let queryEndDate = now();
let interval = 6h;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| where DialogId != '' and InstanceId != '' and user_Id != ''
| extend metric = ActivityId // InstanceId // DialogId // or InstanceId for conversation count
| summarize Count=dcount(metric) by user_Id, bin(timestamp, groupByInterval)
| order by Count desc nulls last
Resultados de consultas de actividad por usuario por período de ejemplo
user_Id | timestamp | Recuento |
---|---|---|
User-8107ffd2 | 2019-09-03T00:00:00Z | 14 |
User-75f2cc8f | 2019-08-30T00:00:00Z | 13 |
User-75f2cc8d | 2019-09-03T00:00:00Z | 13 |
User-3060aada | 2019-09-03T00:00:00Z | 10 |
Finalización de diálogos
Una vez que se establece el cliente de telemetría para un diálogo, el diálogo (y sus elementos secundarios) emitirá algunos datos de telemetría predeterminados, como started (iniciado) y completed (completado). Este ejemplo se puede utilizar para medir los diálogos completados con respecto a los diálogos iniciados. Si el número de diálogos iniciados es mayor que el número completado, algunos de los usuarios no completan el flujo de diálogo. Puede usar esta consulta para ayudarle a identificar y solucionar cualquier posible lógica de diálogo. También se puede usar para identificar qué cuadros de diálogo se usan con mayor frecuencia y con menos frecuencia.
Sugerencia
Si crea el bot mediante herramientas como Copilot Studio o Composer, querrá usar la versión de diálogo adaptable de cada consulta.
Finalización del cuadro de diálogo en cascada
// % Completed Waterfall Dialog: shows completes relative to starts
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name=="WaterfallStart"
| extend DialogId = customDimensions['DialogId']
| extend InstanceId = tostring(customDimensions['InstanceId'])
| join kind=leftouter (
customEvents
| where name=="WaterfallComplete"
| extend InstanceId = tostring(customDimensions['InstanceId'])
) on InstanceId
| summarize started=countif(name=='WaterfallStart'), completed=countif(name1=='WaterfallComplete') by tostring(DialogId)
| where started > 100 // filter for sample
// Show starts vs. completes
| project tostring(DialogId), started, completed
| order by started desc, completed asc nulls last
| render barchart with (kind=unstacked, xcolumn=DialogId, ycolumns=completed, started, ysplit=axes)
Sugerencia
El operador join de Kusto se usa para combinar las filas de dos tablas para formar una nueva tabla, haciendo coincidir los valores de las columnas especificadas de cada tabla.
El operador project se usa para seleccionar los campos que desea que aparezcan en la salida. De forma similar a extend operator
, que agrega un campo nuevo, project operator
puede elegir entre el conjunto de campos existente o agregar un nuevo campo.
Diálogos adaptables iniciados y completados
// % Completed adaptive dialog: shows completes relative to starts. This type is the default dialog type when using Copilot Studio or Composer.
customEvents
| where name=="AdaptiveDialogStart" or name == "AdaptiveDialogComplete"
| extend DialogId = tostring(customDimensions['DialogId'])
| summarize started=countif(name=='AdaptiveDialogStart'), completed=countif(name=='AdaptiveDialogComplete') by DialogId
| project DialogId, started, completed
| order by started desc, completed asc nulls last
| render barchart with (kind=unstacked, xcolumn=DialogId, ycolumns=completed, started, ysplit=axes)
Resultados de consulta de finalización de cuadros de diálogo de ejemplo
No finalización de diálogos
Este ejemplo se puede usar para contar el número de flujos de diálogo que se iniciaron pero que nunca se completaron debido a la cancelación o el abandono durante el período de tiempo especificado. Puede usarlo para revisar diálogos incompletos y examinar si se cancelaron activamente debido a confusión del usuario o abandonado debido a la distracción del usuario o la pérdida de interés.
Cuadros de diálogo en cascada no completados
// Show incomplete dialogs when using waterfall dialogs.
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name == "WaterfallStart"
| extend DialogId = customDimensions['DialogId']
| extend instanceId = tostring(customDimensions['InstanceId'])
| join kind=leftanti (
customEvents
| where name == "WaterfallComplete"
| extend instanceId = tostring(customDimensions['InstanceId'])
) on instanceId
| summarize cnt=count() by tostring(DialogId)
| order by cnt
| render barchart
Diálogos adaptables no completados
// Show incomplete dialogs for adaptive dialogs; this type is the default dialog type when using Copilot Studio or Composer.
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where name == "AdaptiveDialogStart"
| extend DialogId = tostring(customDimensions['DialogId'])
| join kind=rightanti (
customEvents
| where name == "AdaptiveDialogComplete"
| extend DialogId = tostring(customDimensions['DialogId'])
) on name, DialogId
| summarize cnt=count() by DialogId
| order by cnt
| render barchart
Sugerencia
El operador order de Kusto (igual que sort operator
) se usa para ordenar las filas de la tabla de entrada en el orden de una o varias columnas. Nota: Si desea excluir valores NULL de los resultados de cualquier consulta, puede filtrarlos en la where
instrucción; por ejemplo, podría agregar "and isnotnull(Timestamp)", o para devolver valores NULL al principio o al final, agregue o nulls first
nulls first
al final de la instrucción order.
Resultados de la consulta de incompletación de cuadros de diálogo de ejemplo
Exploración en profundidad de la secuencia del diálogo
Inicio, paso o finalización de la cascada del diálogo en la conversación
En este ejemplo se muestra la secuencia de pasos del diálogo, agrupados por conversación (instanceId), lo que puede resultar útil para determinar qué pasos conducen a la interrupción del diálogo.
La ejecución de esta consulta, escriba el valor del elemento deseado DialogId
en lugar de <SampleDialogId.>
// Drill down: Show waterfall start/step/complete for specific dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
let DialogActivity=(dlgid:string) {
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| extend StepName = customDimensions['StepName']
| extend InstanceId = customDimensions['InstanceId']
| where DialogId == dlgid
| project timestamp, name, StepName, InstanceId
| order by tostring(InstanceId), timestamp asc
};
// For example see SampleDialogId behavior
DialogActivity("<SampleDialogId>")
Sugerencia
Esta consulta se escribió con una función definida por la consulta, que es una función definida por el usuario que se define y utiliza en el ámbito de una sola consulta y se define mediante una instrucción let. Esta consulta se escribió sin usar query-defined function
:
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| extend StepName = customDimensions['StepName']
| extend InstanceId = customDimensions['InstanceId']
| where DialogId == "<SampleDialogId>"
| project timestamp, name, StepName, InstanceId
| order by tostring(InstanceId), timestamp asc
Resultados de la consulta de ejemplo
timestamp | nombre | StepName | InstanceId |
---|---|---|---|
2019-08-23T20:04... | WaterfallStart | nulo | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | GetPointOfInterestLocations | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | ProcessPointOfInterestSelection | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | GetRoutesToDestination | ...79c0f03d8701 |
2019-08-23T20:05... | WaterfallStep | ResponseToStartRoutePrompt | ...79c0f03d8701 |
2019-08-23T20:05... | WaterfallComplete 1 | nulo | ...79c0f03d8701 |
2019-08-28T23:35... | WaterfallStart | nulo | ...6ac8b3211b99 |
2019-08-28T23:35... | WaterfallStep 2 | GetPointOfInterestLocations | ...6ac8b3211b99 |
2019-08-28T19:41... | WaterfallStart | nulo | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStep 2 | GetPointOfInterestLocations | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStart | nulo | ...8137d76a5cbb |
1 Completado
2 Abandonado
Interpretación: los usuarios parecen abandonar la conversación en el paso GetPointOfInterestLocations.
Nota:
Los diálogos en cascada ejecutan una secuencia (inicio, varios pasos, completado). Si una secuencia muestra el inicio y no muestra el completado, significa que el diálogo se interrumpió debido a que el usuario abandonó o canceló el diálogo. En este análisis detallado, se puede ver este comportamiento (consulte los pasos completados frente a los abandonados).
Total agregado de los pasos inicio/paso/completado/cancelado de la cascada
En este ejemplo se muestran los totales agregados del número total de veces que se ha iniciado una secuencia de diálogo, el número total combinado de pasos de cascada, cuántos se han completado correctamente, cuántos se han cancelado y la diferencia entre WaterfallStart y el total combinado de WaterfallComplete más WaterfallCancel le proporcionará el número total de abandonados.
// Drill down: Aggregate view of waterfall start/step/complete/cancel steps totals for specific dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
let DialogSteps=(dlgid:string) {
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = customDimensions['DialogId']
| where DialogId == dlgid
| project name
| summarize count() by name
};
// For example see SampleDialogId behavior
DialogSteps("<SampleDialogId>")
Resultados de consulta de agregado en cascada de ejemplo
name | count |
---|---|
WaterfallStart | 21 |
WaterfallStep | 47 |
WaterfallComplete | 11 |
WaterfallCancel | 1 |
Interpretación: de 21 invocaciones de secuencia de diálogos, solo 11 ha finalizado, 9 fueron abandonados y el usuario canceló uno.
Duración media del diálogo
En este ejemplo se mide la cantidad media de tiempo que los usuarios emplean en un diálogo determinado. El bot puede beneficiarse de simplificar los diálogos que tardan mucho tiempo en completarse un usuario.
// Average dialog duration
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name=="WaterfallStart"
| extend DialogId = customDimensions['DialogId']
| extend instanceId = tostring(customDimensions['InstanceId'])
| join kind=leftouter (customEvents | where name=="WaterfallCancel" | extend instanceId = tostring(customDimensions['InstanceId'])) on instanceId
| join kind=leftouter (customEvents | where name=="WaterfallComplete" | extend instanceId = tostring(customDimensions['InstanceId'])) on instanceId
| extend duration = case(not(isnull(timestamp1)), timestamp1 - timestamp,
not(isnull(timestamp2)), timestamp2 - timestamp, 0s) // Abandoned aren't counted. Alternate: now()-timestamp
| extend seconds = round(duration / 1s)
| summarize AvgSeconds=avg(seconds) by tostring(DialogId)
| order by AvgSeconds desc nulls last
| render barchart with (title="Duration in Dialog")
Resultados de la consulta de duración media de ejemplo
Promedio de pasos del diálogo
En este ejemplo se muestra la "longitud" de cada diálogo invocado, calculada por desviación media, mínima, máxima y estándar. Esto puede ayudar a analizar la calidad del diálogo. Por ejemplo:
- Los diálogos con demasiados pasos deben evaluarse para simplificar las oportunidades.
- Los diálogos con un intervalo ancho entre mínimo/máximo/media podrían significar que los usuarios se detienen intentando completar las tareas. Es posible que tenga que evaluar la posibilidad de que haya rutas más cortas para completar las tareas o bien maneras de reducir la complejidad del diálogo.
- Los diálogos con una desviación estándar grande sugieren rutas complejas o experiencia rota (abandonar/cancelar).
- Los diálogos con pocos pasos pueden ser así porque nunca se completaron. El análisis de las tasas de finalización y abandono puede ayudar a tomar esa determinación.
// min/max/std/avg steps per dialog
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend DialogId = tostring(customDimensions['DialogId'])
| extend StepName = tostring(customDimensions['StepName'])
| extend InstanceId = tostring(customDimensions['InstanceId'])
| where name == "WaterfallStart" or name == "WaterfallStep" or name == "WaterfallComplete"
| order by InstanceId, timestamp asc
| project timestamp, DialogId, name, InstanceId, StepName
| summarize cnt=count() by InstanceId, DialogId
| summarize avg=avg(cnt), minsteps=min(cnt),maxsteps=max(cnt), std=stdev(cnt) by DialogId
| extend avgsteps = round(avg, 1)
| extend avgshortbysteps=maxsteps-avgsteps
| extend avgshortbypercent=round((1.0 - avgsteps/maxsteps)*100.0, 1)
| project DialogId, avgsteps, minsteps, maxsteps, std, avgshortbysteps, avgshortbypercent
| order by std desc nulls last
Resultados de la consulta de los pasos medios de ejemplo
Id. de diálogo | Promedio de pasos | Pasos mínimos | Pasos máximos | std | Promedio breves por pasos | Promedio breves por porcentaje |
---|---|---|---|---|---|---|
FindArticlesDialog | 6.2 | 2 | 7 | 2,04 | 0,8 | 11,4 % |
CreateTicket | 4.3 | 2 | 5 | 1.5 | 0.7 | 14 % |
CheckForCurrentLocation | 3.9 | 2 | 5 | 1,41 | 1.1 | 22 % |
BaseAuth | 3.3 | 2 | 4 | 1,03 | 0.7 | 17,5 % |
incorporación | 2.7 | 2 | 4 | 0,94 | 1.3 | 32,5 % |
__Interpretation: por ejemplo, FindArticlesDialog tiene una amplia distribución entre min/max y debe investigarse y posiblemente rediseñado y optimizado.
Actividad del canal por métrica de actividad
En este ejemplo se mide la cantidad de actividad que recibe el bot por canal en el período especificado. Para ello, se obtiene el recuento de una de las siguientes métricas: mensajes entrantes, usuarios, conversaciones o diálogos. Esto puede ser útil para el análisis de estado del servicio o para medir la popularidad de los canales.
// number of metric: messages, users, conversations, dialogs by channel
let queryStartDate = ago(14d);
let queryEndDate = now();
let groupByInterval = 1d;
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| extend InstanceId = tostring(customDimensions['InstanceId'])
| extend DialogId = tostring(customDimensions['DialogId'])
| extend ActivityId = tostring(customDimensions['activityId'])
| extend ChannelId = tostring(customDimensions['channelId'])
| where DialogId != '' and InstanceId != '' and user_Id != ''
| extend metric = user_Id // InstanceId or ActivityId or user_Id
| summarize Count=count(metric) by ChannelId, bin(timestamp, groupByInterval)
| order by Count desc nulls last
| render barchart with (title="Users", kind=stacked) // or Incoming Messages or Conversations or Users
Sugerencia
Considere la posibilidad de probar estas variaciones:
- Ejecute la consulta sin el depósito de marca de tiempo:
bin(timestamp, groupByInterval)
. - También puede usar
dcount
para distintos usuarios ycount
para todas las actividades de eventos de usuario. Esto también funciona para los usuarios de repetición.
Resultados de la consulta channel-activity-by-activity de ejemplo
Interpretación: las pruebas del emulador solían ser más populares, pero una vez que fuimos en directo, DirectLineSpeech, es el canal más popular.
Total intents by popularidad
Este ejemplo se aplica a bots habilitados para LUIS. Muestra un resumen de todas las intenciones por popularidad y la puntuación de certeza de la detección de las intenciones correspondientes.
Nota:
Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.
Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.
- En la práctica, la vista se debe separar para cada métrica.
- Las rutas de las intenciones más populares se deben optimizar para la experiencia del usuario.
- Las puntuaciones medias y bajas indican un reconocimiento deficiente y una posible falta de intención del usuario real.
// show total intents
let queryStartDate = ago(14d);
let queryEndDate = now();
customEvents
| where timestamp > queryStartDate
| where timestamp < queryEndDate
| where name startswith "LuisResult"
| extend intentName = tostring(customDimensions['intent'])
| extend intentScore = todouble(customDimensions['intentScore'])
| summarize ic=count(), ac=avg(intentScore)*100 by intentName
| project intentName, ic, ac
| order by ic desc nulls last
| render barchart with (kind=unstacked, xcolumn=intentName, ycolumns=ic,ac, title="Intents Popularity")
Resultados de consulta de intenciones por popularidad de ejemplo
Interpretación: por ejemplo, la intención más popular, la confirmación solo se detecta con un 23 % de confianza en promedio.
Sugerencia
Los gráficos de barras son una entre más de una docena de opciones disponibles con las consultas de Kusto. Otras opciones son: gráfico de anomalías, gráfico de áreas, gráfico de columnas, gráfico de líneas o gráfico de dispersión. Para obtener más información, consulte el tema operador render.
Esquema de instrumentación de análisis del bot
En las tablas siguientes se muestran los campos más comunes en los que el bot registrará los datos de telemetría.
Entorno general
Campos comunes de análisis de registros en la instrumentación de Application Insights.
Campo | Descripción | Valores de ejemplo |
---|---|---|
nombre | Tipo de mensaje | BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure |
customDimensions | SDK de análisis del bot | activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop |
timestamp | Hora del evento | 2019-09-05T18:32:45.287082Z |
instance_Id | Id. de la conversación | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | Id. de turno | 084b2856947e3844a5a18a8476d99aaa |
user_Id | Identificador de usuario de canal único | emulator7c259c8e-2f47... |
client_IP | Dirección IP del cliente | 127.0.0.1 (puede que no esté presente debido a un bloqueo de privacidad) |
client_city | Ciudad del cliente | Redmond (si se detecta, puede que no esté presente) |
Nota:
Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.
La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.
Nota:
Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.
Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.
Dimensiones personalizadas
La mayoría de los datos de actividad específicos del bot se almacenan en el campo customDimensions.
Campo | Descripción | Valores de ejemplo |
---|---|---|
activityId | Id. del mensaje | <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | Tipo de mensaje | message, conversationUpdate, event, invoke |
channelId | Identificador del canal | emulator, directline, msteams, webchat |
fromId | Identificador de origen | <id> |
fromName | Nombre de usuario del cliente | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
locale | Configuración regional de origen del cliente | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Identificador del destinatario | <id> |
recipientName | Nombre del destinatario | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
text | Texto del mensaje | find a coffee shop |
Dimensiones personalizadas: LUIS
Nota:
Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.
Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.
La instrumentación de LUIS almacena sus datos en los siguientes campos de dimensiones personalizadas.
Campo | Descripción | Valores de ejemplo |
---|---|---|
intención | intención detectada por LUIS | pointOfInterestSkill |
intentScore | Puntuación del reconocimiento de LUIS | 0,98 |
Entidades | Entidades detectadas por LUIS | FoodOfGrocery = [["coffee"]], KEYWORD= ["coffee shop"] |
Pregunta | Pregunta detectada por LUIS | find a coffee shop |
sentimentLabel | Opinión detectada por LUIS | positiva |
Dimensiones personalizadas: QnAMaker
Nota:
Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos o bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.
La respuesta a preguntas personalizadas, una característica de Lenguaje de Azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Comprensión del lenguaje natural.
La instrumentación de QnAMaker almacena sus datos en los siguientes campos de dimensiones personalizadas.
Sugerencia
Para habilitar el registro de información personal como preguntas y respuestas, el parámetro de información personal de registro debe establecerse en true en el constructor de la clase QnA Maker .
Campo | Descripción | Valores de ejemplo |
---|---|---|
question | Pregunta detectada por QnA | what can you do? |
answer | Respuesta de QnA | You have questions, I may have answers. |
articleFound | QnA | true |
questionId | Id. de pregunta de QnA | 488 |
knowledgeBaseId | Id. de KB de QnA | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Matriz de preguntas coincidentes | ["¿Puede explicarme qué es su rol?","¿Puede decirme un poco sobre usted?","¿Puede decirme acerca de usted?","Podría ayudarme","hmmm para qué puede hacer?","cómo puede ayudarme","Cómo puede ayudarme?","¿Cómo puede ayudarme?","¿Cómo puede ayudar?","así que ¿cómo puedo usarlo en mis proyectos?", "Habla conmigo sobre tu capacidad", "¿Qué eres capaz?", ...] |
Consulte también
- Para ver un tutorial sobre cómo escribir consultas de registro, consulte Introducción a las consultas de registros en Azure Monitor.
- Visualización de datos de Azure Monitor
- Obtenga información sobre la Adición de telemetría al bot.
- Más información sobre las consultas de registros en Azure Monitor.
- Lista completa de eventos de Application Insights de Bot Framework
- Creación y uso compartido de paneles de datos de Log Analytics