Partager via


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 :

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

Exemple de graphique du 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 :

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

Exemple de graphique 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

Exemple de graphique des dialogues démarrés et des dialogues terminés.

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

Exemple de graphique récapitulative pour les dialogues incomplets.

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

Exemple de graphique de durée de boîte de dialogue.

É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 et count 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

Exemple de graphique d’utilisation du canal.

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é

Exemple de graphique de popularité des intentions.

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