Compartir a través de


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:

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

Gráfico de ejemplo del número de usuarios por período.

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:

// 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

Gráfico de ejemplo de actividad por período.

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

Gráfico de ejemplo de diálogos iniciados y diálogos completados.

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

Gráfico de resumen de ejemplo para diálogos incompletos.

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

Gráfico de ejemplo de duración del cuadro de diálogo.

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 y count 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

Gráfico de ejemplo del uso del canal.

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

Gráfico de ejemplo de popularidad de intenciones.

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