Analyser les données de télémétrie de votre bot
S'APPLIQUE À : SDK v4
Analyse du comportement du bot
La collection de requêtes suivante peut être utilisée pour analyser le comportement du bot. Vous pouvez utiliser la collection pour créer des requêtes personnalisées dans Azure Monitor Log Analytics et créer des tableaux de bord de supervision et de visualisation Power BI .
Prérequis
Il est utile d’avoir une compréhension de base des concepts suivants :
- Requêtes Kusto
- Utiliser Log Analytics dans le portail Azure pour écrire des requêtes de journal Azure Monitor
- Concepts de base des requêtes de journal dans Azure Monitor
Conseil
Si vous créez votre bot à l’aide d’outils tels que Copilot Studio ou Composer, vous devez utiliser la version de boîte de dialogue adaptative de chaque requête quand elle est disponible.
Tableaux de bord
Les tableaux de bord Azure constituent un excellent moyen d’afficher et de partager les informations issues de vos requêtes. Vous pouvez créer des tableaux de bord personnalisés pour surveiller l’activité de vos bots en associant vos requêtes aux vignettes que vous ajoutez à ces tableaux. Pour plus d’informations sur les tableaux de bord et la manière d’y associer vos requêtes, consultez Créer et partager des tableaux de bord de données Log Analytics. La suite de cet article présente des exemples de requêtes qui peuvent vous être utiles pour surveiller le comportement de vos bots.
Exemples de requêtes Kusto
Remarque
Il est recommandé de pivoter sur différentes dimensions telles que la période, le canal et les paramètres régionaux pour toutes les requêtes de cet article.
Nombre d’utilisateurs par période
Cet exemple produit un graphique en courbes qui montre le nombre d’utilisateurs distincts ayant communiqué quotidiennement avec votre bot au cours des 14 derniers jours. La période peut être aisément modifiée en attribuant des valeurs différentes aux variables queryStartDate
, queryEndDate
et interval
.
Important
Vous obtiendrez uniquement un nombre correct d’utilisateurs uniques dans cette requête s’ils sont authentifiés, et les résultats peuvent également dépendre des fonctionnalités du 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
Conseil
L'opérateur Kusto summarize permet de générer une table qui agrège le contenu de la table d’entrée.
La fonction Bin est une fonction scalaire Kusto qui, combinée à summarize operator
, regroupe les résultats de la requête dans la valeur spécifiée. Dans l’exemple ci-dessus, elle est regroupée par jour. Kusto accepte également h = heures, m = minutes, s = secondes, ms = millisecondes, microseconde = microsecondes.
L’opérateur render vous permet d’afficher facilement des graphiques, tels que le graphique temporel, un graphique en courbes où l’axe X correspond à DateHeure et où toute autre colonne numérique peut être utilisée pour l’axe Y. Il conserve automatiquement l'espacement de l'axe X, même si vos données n’ont pas été spécifiées à chaque fois. Si aucune instruction render n’est utilisée, la valeur par défaut est table
.
Exemples de résultats de requête nombre d’utilisateurs par période
Activité par période
Cet exemple montre comment mesurer le volume d’activité par dimension souhaitée, par exemple le nombre de conversations, de dialogues ou de messages par jour pour les 14 derniers jours. La période peut être aisément modifiée en attribuant des valeurs différentes aux variables querystartdate
, queryEndDate
et interval
. La dimension souhaitée est définie par la extend
clause de l’exemple suivant, metric
peut être définie sur InstanceId, DialogId ou activityId.
Attribuez metric à la dimension que vous souhaitez afficher :
- InstanceId mesure le nombre de conversations
- DialogId mesure le nombre de dialogues
- ActivityId mesure le nombre de messages
// 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
Conseil
L'opérateur Kusto extend permet de créer des colonnes calculées et de les ajouter au jeu de résultats.
Exemples de résultats de requête d’activité par période
Activité par utilisateur par période
Cet exemple montre comment compter le nombre d’activités par utilisateur par période. Cette requête explore l’activité par requête de période pour vous concentrer sur l’activité par utilisateur par période. Les activités incluent des dialogues, des conversations ou des messages. Cette requête mesure l’interaction utilisateur avec votre bot, ce qui peut vous aider à trouver des problèmes potentiels, tels que :
- Les jours avec beaucoup d’activités par un seul utilisateur peuvent signifier une attaque ou un test
- Les jours avec peu d’interaction peuvent indiquer des problèmes d’intégrité du service
Conseil
Vous pouvez supprimer by user_Id pour obtenir le volume d'activité général du bot, qui peut être réorganisé sur le temps et les dialogues, les messages ou les conversations.
// 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
Exemples de résultats de requête par utilisateur
user_Id | timestamp | Count |
---|---|---|
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 |
Achèvement de dialogue
Après avoir défini le client de télémétrie pour un dialogue, le dialogue (et ses enfants) émet des données de télémétrie, telles que démarré et terminé. Cet exemple permet de mesurer les dialogues terminés par rapport aux dialogues démarrés. Si le nombre de dialogues démarrés est supérieur au nombre terminé, certains de vos utilisateurs ne terminent pas le flux de dialogue. Vous pouvez utiliser cette requête pour vous aider à identifier et à dépanner n’importe quelle logique de boîte de dialogue potentielle. Il peut également être utilisé pour identifier les dialogues les plus fréquemment utilisés.
Conseil
Si vous créez votre bot à l’aide d’outils tels que Copilot Studio ou Composer, vous devez utiliser la version de boîte de dialogue adaptative de chaque requête.
Saisie semi-automatique du dialogue en cascade
// % 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)
Conseil
L'opérateur Kusto join permet de fusionner les lignes de deux tables pour former une nouvelle table en mettant en correspondance les valeurs des colonnes spécifiées de chaque table.
L’opérateur project permet de sélectionner les champs que vous souhaitez afficher dans votre sortie. À l’instar de extend operator
qui ajoute un nouveau champ, project operator
peut choisir parmi différents champs existants ou en ajouter un nouveau.
Boîtes de dialogue adaptatives démarrées et terminées
// % 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)
Exemples de résultats de requête d’achèvement de boîte de dialogue
Non-achèvement de dialogue
Cet exemple peut être utilisé pour compter le nombre de flux de dialogue démarrés mais jamais terminés suite à une annulation ou un abandon au cours de la période spécifiée. Vous pouvez l’utiliser pour passer en revue les dialogues incomplets et examiner s’ils ont été annulés activement en raison de confusion de l’utilisateur ou abandonnés en raison de la distraction de l’utilisateur ou de la perte d’intérêt.
Boîtes de dialogue en cascade non terminées
// 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
Boîtes de dialogue adaptatives non terminées
// 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
Conseil
L’opérateur Kusto order (identique à sort operator
) est utilisé pour trier les lignes de la table d’entrée sur une ou plusieurs colonnes. Remarque : Si vous souhaitez exclure des valeurs Null des résultats d’une requête, vous pouvez les filtrer dans votre where
instruction, par exemple vous pouvez ajouter « and isnotnull(Timestamp) » ou renvoyer des valeurs Null au début ou à la fin, ajouter ou nulls first
nulls first
à la fin de l’instruction order.
Exemples de résultats de requête de dialogue incompletion
Exploration de la séquence de dialogue
Début/étape/fin en cascade d'un dialogue dans une conversation
Cet exemple montre la séquence d’étapes de dialogue, regroupées par conversation (instanceId), qui peuvent être utiles pour déterminer quelles étapes entraînent une interruption de dialogue.
L’exécution de cette requête, entrez la valeur de l’élément souhaité DialogId
à la place 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>")
Conseil
Cette requête a été écrite à l’aide d’une fonction définie par la requête, à savoir une fonction définie par l’utilisateur et utilisée dans l’étendue d’une requête unique, et définie via une instruction let. Cette requête est écrite sans 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
Résultats de l’exemple de requête
timestamp | name | StepName | InstanceId |
---|---|---|---|
2019-08-23T20:04... | WaterfallStart | null | ...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 | null | ...79c0f03d8701 |
2019-08-28T23:35... | WaterfallStart | null | ...6ac8b3211b99 |
2019-08-28T23:35... | WaterfallStep 2 | GetPointOfInterestLocations | ...6ac8b3211b99 |
2019-08-28T19:41... | WaterfallStart | null | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStep 2 | GetPointOfInterestLocations | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStart | null | ...8137d76a5cbb |
1 Terminé
2 Abandonné
Interprétation : les utilisateurs semblent abandonner la conversation à l’étape GetPointOfInterestLocations.
Remarque
Les dialogues en cascade exécutent une séquence (démarrer, plusieurs étapes, terminer). Une séquence affichant « start with no complete » indique que le dialogue a été interrompu suite à son abandon ou à son annulation par l'utilisateur. Dans cette analyse détaillée, on peut voir ce comportement (voir les étapes terminées et abandonnées).
Totaux agrégés des étapes en cascade démarrer/étape/terminer/annuler
Cet exemple montre les totaux agrégés du nombre total de démarrages d’une séquence de dialogue. Le nombre total combiné d’étapes en cascade, le nombre d'étapes terminées, annulées, ainsi que la différence entre WaterfallStart et le total combiné WaterfallComplete et WaterfallCancel vous donne le nombre total d'étapes abandonnées.
// 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>")
Exemples de résultats de requête d’agrégation en cascade
nom | count |
---|---|
WaterfallStart | 21 |
WaterfallStep | 47 |
WaterfallComplete | 11 |
WaterfallCancel | 1 |
Interprétation : De 21 appels de séquence de dialogues, seuls 11 ont été terminés, 9 ont été abandonnés et l’un a été annulé par l’utilisateur.
Durée moyenne du dialogue
Cet exemple mesure la durée moyenne que les utilisateurs passent dans un dialogue donné. Votre bot peut tirer parti de la simplification des dialogues qui prennent beaucoup de temps à l’utilisateur.
// 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")
Exemples de résultats de requête de durée moyenne
Étapes moyennes dans un dialogue
Cet exemple montre la « longueur » de chaque boîte de dialogue appelée, calculée en moyenne, min, max et écart type. Il permet d'analyser la qualité du dialogue. Par exemple :
- Les dialogues avec trop d’étapes doivent être évalués pour des opportunités de simplification.
- Les dialogues présentant un écart important en termes de min/max/moyenne peuvent indiquer que les utilisateurs sont bloqués lorsqu'ils tentent d'effectuer des tâches. Vous devrez peut-être évaluer la possibilité de chemins plus courts pour effectuer les tâches ou trouver des moyens de réduire la complexité des dialogues.
- Les dialogues avec un écart type important suggèrent des chemins complexes ou une expérience rompue (abandon/annulation).
- Les dialogues avec quelques étapes peuvent être ainsi, car ils n’ont jamais été terminés. L’analyse des taux d’achèvement et d’abandon peut permettre de le déterminer.
// 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
Exemples de résultats de requête en étapes moyennes
ID de boîte de dialogue | avg steps | min steps | max steps | std | avg short by steps | avg short by percent |
---|---|---|---|---|---|---|
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 % |
intégration | 2.7 | 2 | 4 | 0,94 | 1.3 | 32,5 % |
__Interpretation : Par exemple, FindArticlesDialog a un large écart entre min/max et doit être examiné et éventuellement repensé et optimisé.
Activité de canal par mesure d’activité
Cet exemple mesure la quantité d’activité que votre bot reçoit par canal au cours de la période donnée. Pour ce faire, il compte l’une des métriques suivantes : messages entrants, utilisateurs, conversations ou dialogues. Cela peut être utile pour analyser l’intégrité du service ou mesurer la popularité des canaux.
// 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
Conseil
Vous pouvez envisager d’essayer ces variations :
- Exécutez la requête sans le compartimentage d’horodatage :
bin(timestamp, groupByInterval)
. - Vous pouvez également utiliser
dcount
pour des utilisateurs distincts etcount
pour toutes les activités d’événement utilisateur. Cela fonctionne également pour les utilisateurs récurrents.
Exemples de résultats de requête channel-activity-by-activity
Interprétation : Les tests de l’émulateur étaient les plus populaires, mais une fois que nous sommes allés en direct, DirectLineSpeech, est le canal le plus populaire.
Nombre total d’intentions par popularité
Cet exemple s’applique aux bots activés par LUIS. Il affiche un résumé de toutes les intentions par popularité, ainsi que le score de certitude avec détection d'intention correspondant.
Remarque
Compréhension du langage (LUIS) sera mis hors service le 1er octobre 2025. À compter du 1er avril 2023, vous ne pourrez pas créer de nouvelles ressources LUIS. Une version plus récente de Compréhension du langage est désormais disponible dans le cadre d'Azure AI Language.
Compréhension du langage courant (CLU), une fonctionnalité d’Azure AI Language, est la version mise à jour de LUIS. Pour en savoir plus sur la prise en charge de la compréhension du langage dans le Kit de développement logiciel (SDK) Bot Framework, reportez-vous à Compréhension du langage naturel.
- Dans la pratique, la vue doit être séparée pour chaque métrique.
- Les chemins d’intention populaires doivent être optimisés pour l’expérience utilisateur.
- Les scores moyens faibles indiquent une mauvaise reconnaissance et l'absence possible de réelle intention de l'utilisateur.
// 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")
Exemples de résultats de requête d’intentions par popularité
Interprétation : Par exemple, l’intention la plus populaire est détectée uniquement avec une confiance de 23 % en moyenne.
Conseil
Les graphiques à barres font partie des différentes options disponibles avec les requêtes Kusto. Parmi les autres options, figurent notamment : anomalychart, areachart, columnchart, linechart, scatterchart. Pour plus d’informations, consultez la rubrique de l’opérateur de rendu.
Schéma d'instrumentation d'analytique de bot
Les tableaux suivants présentent les champs les plus courants dans lesquels votre bot doit enregistrer les données de télémétrie.
Enveloppe générale
Champs d'analytique des journaux d'activité dans l'instrumentation Application Insights.
Champ | Description | Exemples de valeurs |
---|---|---|
name | Type de message | BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure |
customDimensions | Analytique de bot - Kit de développement logiciel (SDK) | activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop |
timestamp | Heure de l’événement | 2019-09-05T18:32:45.287082Z |
instance_Id | ID de conversation | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | ID de tour | 084b2856947e3844a5a18a8476d99aaa |
user_Id | ID d’utilisateur de canal unique | emulator7c259c8e-2f47... |
client_IP | Adresse IP du client | 127.0.0.1 (peut être absent en raison d'un blocage de confidentialité) |
client_City | Ville du client | Redmond (si détectée, peut être absente) |
Remarque
Azure AI QnA Maker sera mis hors service le 31 mars 2025. À partir du 1er octobre 2022, vous ne pourrez plus créer de nouvelles ressources ou bases de connaissances QnA Maker. Une version plus récente de la fonctionnalité de questions et réponses est désormais disponible dans le cadre d’Azure AI Language.
La réponse aux questions personnalisées, une fonctionnalité d'Azure AI Language, est la version mise à jour du service QnA Maker. Pour plus d’informations sur la prise en charge des questions et réponses dans le kit de développement logiciel (SDK) Bot Framework, reportez-vous à Compréhension du langage naturel.
Remarque
Compréhension du langage (LUIS) sera mis hors service le 1er octobre 2025. À compter du 1er avril 2023, vous ne pourrez pas créer de nouvelles ressources LUIS. Une version plus récente de Compréhension du langage est désormais disponible dans le cadre d'Azure AI Language.
Compréhension du langage courant (CLU), une fonctionnalité d’Azure AI Language, est la version mise à jour de LUIS. Pour en savoir plus sur la prise en charge de la compréhension du langage dans le Kit de développement logiciel (SDK) Bot Framework, reportez-vous à Compréhension du langage naturel.
Dimensions personnalisées
La plupart des données d’activité spécifiques au bot sont stockées dans le champ customDimensions.
Champ | Description | Exemples de valeurs |
---|---|---|
activityId | ID de message | <id> : 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | Type de message | message, conversationUpdate, event, invoke |
channelId | Identificateur du canal | emulator, directline, msteams, webchat |
fromId | Identificateur de formulaire | <id> |
fromName | Nom d’utilisateur du client | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
locale | Paramètres régionaux d’origine du client | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Identificateur du destinataire | <id> |
recipientName | Nom du destinataire | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
texte | Texte dans un message | trouver un café |
Dimensions personnalisées : LUIS
Remarque
Compréhension du langage (LUIS) sera mis hors service le 1er octobre 2025. À compter du 1er avril 2023, vous ne pourrez pas créer de nouvelles ressources LUIS. Une version plus récente de Compréhension du langage est désormais disponible dans le cadre d'Azure AI Language.
Compréhension du langage courant (CLU), une fonctionnalité d’Azure AI Language, est la version mise à jour de LUIS. Pour en savoir plus sur la prise en charge de la compréhension du langage dans le Kit de développement logiciel (SDK) Bot Framework, reportez-vous à Compréhension du langage naturel.
L’instrumentation LUIS stocke ses données dans les champs Dimensions personnalisées suivants.
Champ | Description | Exemples de valeurs |
---|---|---|
intention | Intention détectée par LUIS | pointOfInterestSkill |
intentScore | Score de reconnaissance LUIS | 0.98 |
Entités | Entités détectées par LUIS | FoodOfGrocery = [["coffee"]], KEYWORD= ["coffee shop"] |
Question | Question détectée par LUIS | trouver un café |
sentimentLabel | Sentiment détecté par LUIS | positif |
Dimensions personnalisées : QnAMaker
Remarque
Azure AI QnA Maker sera mis hors service le 31 mars 2025. À partir du 1er octobre 2022, vous ne pourrez plus créer de nouvelles ressources ou bases de connaissances QnA Maker. Une version plus récente de la fonctionnalité de questions et réponses est désormais disponible dans le cadre d’Azure AI Language.
La réponse aux questions personnalisées, une fonctionnalité d'Azure AI Language, est la version mise à jour du service QnA Maker. Pour plus d’informations sur la prise en charge des questions et réponses dans le kit de développement logiciel (SDK) Bot Framework, reportez-vous à Compréhension du langage naturel.
L’instrumentation QnAMaker stocke ses données dans les champs Dimensions personnalisées suivants.
Conseil
Pour activer la journalisation des informations personnelles telles que les questions et les réponses, le paramètre d’informations personnelles de journal doit être défini sur true dans le constructeur de la classe QnA Maker.
Champ | Description | Exemples de valeurs |
---|---|---|
question | Question détectée par QnA | que pouvez-vous faire ? |
answer | Réponse QnA | Vous avez des questions, j’ai peut-être des réponses. |
articleFound | QnA | true |
questionId | QnA question ID | 488 |
knowledgeBaseId | ID de la base de connaissances QnA | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Tableau des questions correspondantes | ["Pouvez-vous m’expliquer ce que votre rôle est ? », « Pouvez-vous me dire un peu de vous ? », « Pouvez-vous me dire à propos de vous ? »,"hmmm alors que pouvez-vous faire ? »,"comment pouvez-vous m’aider »,"Comment pouvez-vous m’aider ? »,"Comment pouvez-vous m’aider ? »,"Comment puis-je vous aider ? », « comment puis-je vous utiliser dans mes projets ? », « Parlez-moi de votre capacité », « Qu’est-ce que vous êtes capable de ? », ...] |
Voir aussi
- Pour un tutoriel sur l'écriture de requêtes de journal, consultez Bien démarrer avec les requêtes de journal dans Azure Monitor.
- Visualisation des données à partir d’Azure Monitor
- Découvrez comment Ajouter des données de télémétrie à votre bot
- En savoir plus sur les requêtes dans les journaux Azure Monitor
- Liste complète des événements Bot Framework Application Insights
- Créer et partager des tableaux de bord de données Log Analytics