Analizzare i dati di telemetria dei bot

SI APPLICA A: SDK v4

Analisi del comportamento dei bot

Per analizzare il comportamento dei bot, è possibile usare la raccolta di query seguente. È possibile usare la raccolta per creare query personalizzate in Log Analytics di Monitoraggio di Azure e per creare dashboard di monitoraggio e visualizzazione di Power BI.

Prerequisiti

È utile avere una conoscenza di base dei concetti seguenti:

Suggerimento

Se il bot viene creato usando strumenti come Power Virtual Agents o Composer, è consigliabile usare la versione del dialogo adattivo di ogni query, se disponibile.

Dashboard

I dashboard di Azure costituiscono una valida soluzione per visualizzare e condividere le informazioni generate dalle query. È possibile creare dashboard personalizzati per monitorare l'attività dei bot associando le query ai riquadri aggiunti al dashboard. Per altre informazioni sui dashboard e su come associarvi le query, vedere Creare e condividere i dashboard dei dati di Log Analytics. Nella parte restante di questo articolo vengono illustrati alcuni esempi di query che possono risultare utili per il monitoraggio del comportamento dei bot.

Query Kusto di esempio

Nota

È consigliabile eseguire il pivot su dimensioni diverse, ad esempio periodo, canale e impostazioni locali per tutte le query in questo articolo.

Numero di utenti per periodo

Questo esempio consente di generare un grafico a linee che mostra il numero di utenti distinti che hanno comunicato quotidianamente con il bot negli ultimi 14 giorni. È possibile modificare facilmente il periodo di tempo assegnando valori diversi alle variabili queryStartDate, queryEndDate e interval.

Importante

Si otterrà un conteggio corretto di utenti univoci in questa query solo se sono utenti autenticati e i risultati possono dipendere anche dalle funzionalità del canale.

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

Suggerimento

L'operatore summarize di Kusto consente di produrre una tabella che aggrega il contenuto della tabella di input.

La funzione Bin è una funzione scalare di Kusto che, se usata insieme a summarize operator, raggruppa i risultati della query nel valore specificato. Nell'esempio precedente i risultati sono raggruppati per giorno, ma Kusto accetta anche h=ore, m=minuti, s=secondi, ms=millisecondi, microsecond=microsecondi.

L'operatore render consente di eseguire facilmente il rendering dei grafici, ad esempio timechart, un grafico a linee in cui l'asse x è un valore datetime e per l'asse y è possibile usare qualsiasi altra colonna numerica. Controlla automaticamente la corretta spaziatura dell'asse x anche nei dati non vengono specificati tutti i valori temporali. Se non si usa alcuna istruzione render, viene usata l'impostazione predefinita table.

Numero di esempio di risultati delle query per periodo

Sample chart of number of users per period.

Attività per periodo

In questo esempio viene illustrato come misurare il volume di attività per dimensione desiderata, ad esempio un conteggio del numero di conversazioni, dialoghi o messaggi al giorno per gli ultimi 14 giorni. È possibile modificare facilmente il periodo di tempo assegnando valori diversi alle variabili querystartdate, queryEndDate e interval. La dimensione desiderata è definita dalla extend clausola nell'esempio seguente, metric può essere impostata su InstanceId, DialogId o activityId.

Assegnare metric alla dimensione che si vuole visualizzare:

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

Suggerimento

L'operatore extend di Kusto viene usato per creare colonne calcolate e aggiungerle al set di risultati.

Risultati di query per periodo di attività di esempio

Sample chart of activity per period.

Attività per utente per periodo

Questo esempio illustra come contare il numero di attività per utente per periodo. Questa query esegue il drill-down dell'attività per periodo di query per concentrarsi sull'attività per utente per periodo. Le attività includono dialoghi, conversazioni o messaggi. Questa query misura l'interazione dell'utente con il bot, che consente di individuare potenziali problemi, ad esempio:

  • I giorni con un sacco di attività da un singolo utente possono significare un attacco o un test
  • I giorni con un'interazione minima possono indicare problemi di integrità del servizio

Suggerimento

È possibile rimuovere by user_Id per ottenere il volume generale dell'attività bot che può essere trasformato tramite pivot in base a tempo e dialoghi, messaggi o conversazioni.

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

Risultati di query di esempio per utente per periodo

user_Id timestamp Conteggio
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

Completamento del dialogo

Dopo aver impostato il client di telemetria per un dialogo, il dialogo e i relativi elementi figlio restituiranno alcuni dati di telemetria predefiniti, ad esempio started e completed. È possibile usare questo esempio per misurare i dialoghi completed, ovvero completati, in relazione a quelli started, ovvero avviati. Se il numero di dialoghi avviati è maggiore del numero completato, alcuni utenti non completano il flusso del dialogo. È possibile usare questa query per identificare e risolvere i problemi relativi a qualsiasi logica di dialogo potenziale. Può anche essere usato per identificare quali dialoghi sono usati più di frequente e meno frequentemente.

Suggerimento

Se il bot viene creato usando strumenti come Power Virtual Agents o Composer, è consigliabile usare la versione adattiva della finestra di dialogo di ogni query.

Completamento del dialogo a cascata

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

Suggerimento

L'operatore join di Kusto viene usato per unire le righe di due tabelle in modo da formare una nuova tabella, abbinando i valori delle colonne specificate da ogni tabella.

L'operatore project viene usato per selezionare i campi che si vuole visualizzare nell'output. Analogamente a extend operator, che aggiunge un nuovo campo, project operator può scegliere dal set di campi esistente o aggiungere un nuovo campo.

Dialoghi adattivi avviati e completati

// % Completed adaptive dialog: shows completes relative to starts. This type is the default dialog type when using Power Virtual Agents 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)

Risultati della query di completamento della finestra di dialogo di esempio

Sample chart of dialogs started and dialogs completed.

Mancato completamento del dialogo

È possibile usare questo esempio per contare il numero di flussi di dialogo avviati ma mai completati perché annullati o abbandonati durante il periodo di tempo specificato. È possibile usarlo per esaminare i dialoghi incompleti ed esaminare se sono stati annullati attivamente a causa di confusione dell'utente o abbandonati a causa della distrazione dell'utente o della perdita di interesse.

Finestre di dialogo a cascata non completate

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

Dialoghi adattivi non completati

// Show incomplete dialogs for adaptive dialogs; this type is the default dialog type when using Power Virtual Agents 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

Suggerimento

L'operatore order di Kusto (uguale a sort operator) viene usato per ordinare le righe della tabella di input in base a una o più colonne. Nota: se si desidera escludere valori Null dai risultati di qualsiasi query, è possibile filtrarli nell'istruzione where , ad esempio è possibile aggiungere "and isnotnull(Timestamp)" o per restituire valori Null all'inizio o alla fine, aggiungere nulls first o nulls first alla fine dell'istruzione order.

Risultati della query di esempio di completamento della finestra di dialogo

Sample summary chart for incomplete dialogs.

Drill-down della sequenza di dialogo

Inizio/passaggio/completamento della cascata per il dialogo nella conversazione

Questo esempio mostra la sequenza di passaggi del dialogo, raggruppati per conversazione (instanceId), che possono essere utili per determinare quali passaggi portano all'interruzione del dialogo.

Eseguire questa query, immettere il valore desiderato DialogId al posto di <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>")

Suggerimento

Questa query è stata scritta usando una funzione definita da query, ovvero una funzione definita dall'utente che viene definita e usata nell'ambito di una singola query per la cui definizione si usa un'istruzione let. Questa query è stata scritta senza l'uso di 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
Risultati della query di esempio
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

1Completato

2Abbandonato

Interpretazione: gli utenti sembrano abbandonare la conversazione nel passaggio GetPointOfInterestLocations.

Nota

I dialoghi a cascata eseguono una sequenza (inizio, più passaggi, completamento). Se in una sequenza include l'inizio ma non il completamento, il dialogo è stato interrotto perché l'utente ha abbandonato o annullato il dialogo. In questa analisi dettagliata, è possibile visualizzare questo comportamento (vedere passaggi completati e abbandonati).

Totali aggregati dei passaggi di avvio/passaggi/completamento/annullamento della cascata

Questo esempio mostra i totali aggregati del numero totale di volte in cui è stata avviata una sequenza di dialogo, il numero totale combinato di passaggi della cascata, il numero di passaggi completati correttamente e il numero di passaggi annullati. La differenza tra WaterfallStart e il totale combinato di WaterfallComplete e WaterfallCancel consente di ottenere il numero totale di passaggi abbandonati.

// 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>")
Risultati di query di aggregazione a cascata di esempio
name count
WaterfallStart 21
WaterfallStep 47
WaterfallComplete 11
WaterfallCancel 1

Interpretazione: di 21 chiamate della sequenza di dialogo, solo 11 è stato completato, 9 sono stati abbandonati e uno è stato annullato dall'utente.

Durata media nel dialogo

Questo esempio consente di misurare la quantità media di tempo in cui gli utenti sono rimasti impegnati in un dialogo. Il bot può trarre vantaggio dalla semplificazione dei dialoghi che richiedono molto tempo per il completamento.

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

Risultati delle query di durata media di esempio

Sample chart of dialog duration.

Numero medio di passaggi nel dialogo

Questo esempio mostra la "lunghezza" di ogni finestra di dialogo richiamata come calcolata in base alla deviazione media, min, max e standard. È utile per analizzare la qualità del dialogo. Ad esempio:

  • I dialoghi con troppi passaggi devono essere valutati per opportunità di semplificazione.
  • I dialoghi che presentano un notevole divario tra i valori minimo/massimo/medio possono indicare che gli utenti si sono bloccati mentre provavano a completare le attività. Può essere necessario valutare la possibilità di abbreviare i percorsi per il completamento delle attività o considerare alternative per ridurre la complessità del dialogo.
  • I dialoghi con una deviazione standard di grandi dimensioni suggeriscono percorsi complessi o esperienza interrotta (abbandono/annullamento).
  • I dialoghi con pochi passaggi possono essere così perché non sono mai stati completati. L'analisi delle percentuali di completamento/abbandono può essere utile per comprendere il reale motivo.
// 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

Risultati delle query con passaggi medi di esempio

ID finestra di dialogo avgsteps minsteps maxsteps std avgshortbysteps avgshortbypercent
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%
onboarding 2.7 2 4 0.94 1.3 32,5%

__Interpretation: ad esempio, FindArticlesDialog ha un'ampia diffusione tra min/max e deve essere analizzata e possibilmente riprogettata e ottimizzata.

Attività del canale per metrica di attività

Questo esempio consente di misurare la quantità di attività ricevuta dal bot per canale nel periodo specificato. A tale scopo, viene conteggiata una delle metriche seguenti: messaggi in arrivo, utenti, conversazioni o dialoghi. Queste informazioni possono essere utili per l'analisi dell'integrità del servizio o per misurare la popolarità di un canale.

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

Suggerimento

È consigliabile provare queste varianti:

  • Eseguire la query senza il bucket timestamp: bin(timestamp, groupByInterval).
  • È anche possibile usare dcount per utenti distinti e count per tutte le attività degli eventi utente. Questo suggerimento è valido anche per gli utenti di ripetizioni.

Risultati della query channel-activity-by-activity di esempio

Sample chart of channel usage.

Interpretazione: il test dell'emulatore usato per essere più popolare, ma una volta che siamo andati in diretta, DirectLineSpeech, è il canale più popolare.

Finalità totali per popolarità

Questo esempio si applica ai bot abilitati per LUIS. Mostra un riepilogo di tutte le finalità in base alla popolarità e il punteggio di attendibilità del rilevamento delle finalità corrispondente.

Nota

Language Understanding (LUIS) verrà ritirato il 1° ottobre 2025. A partire dal 1° aprile 2023, non sarà possibile creare nuove risorse LUIS. Una versione più recente di Language Understanding è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

CLU (Conversational Language Understanding), una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata di LUIS. Per altre informazioni sul supporto per la comprensione del linguaggio in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

  • In pratica, la visualizzazione deve essere separata per ogni metrica.
  • I percorsi delle finalità comuni devono essere ottimizzati per l'esperienza utente.
  • Punteggi medi bassi indicano un riconoscimento insufficiente e una possibile mancanza della finalità utente effettiva.
// 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")

Risultati delle query di esempio in base alla popolarità

Sample chart of intent popularity.

Interpretazione: ad esempio, la finalità più diffusa, conferma viene rilevata solo con un'attendibilità media del 23%.

Suggerimento

I barchart sono solo una delle decine di opzioni disponibili con le query Kusto. Altre opzioni includono: anomalychart, areachart, columnChart, lineChart, scatterchart. Per altre informazioni, vedere l'argomento relativo all'operatore di rendering.

Schema della strumentazione di analisi del bot

Le tabelle seguenti illustrano i campi più comuni in cui il bot registrerà i dati di telemetria.

Envelope generale

Campi comuni di analisi dei log nella strumentazione di Application Insights.

Campo Descrizione Valori di esempio
name Tipo di messaggio BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure
customDimensions Analisi del bot SDK activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop
timestamp Ora dell'evento 2019-09-05T18:32:45.287082Z
instance_Id ID conversazione f7b2c416-a680-4b2c-b4cc-79c0f03d8711
operation_Id Turn ID 084b2856947e3844a5a18a8476d99aaa
user_Id ID utente del canale univoco emulator7c259c8e-2f47...
client_IP Indirizzo IP del client 127.0.0.1 (potrebbe essere assente a causa del blocco della privacy)
client_City Città del client Redmond (se rilevato, potrebbe essere assente)

Nota

Azure AI QnA Maker verrà ritirato il 31 marzo 2025. A partire dal 1° ottobre 2022, non potrai creare nuove risorse o Knowledge Base di QnA Maker. Una versione più recente della funzionalità di domande e risposte è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

La risposta alle domande personalizzate, una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata del servizio QnA Maker. Per altre informazioni sul supporto di domande e risposte in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

Nota

Language Understanding (LUIS) verrà ritirato il 1° ottobre 2025. A partire dal 1° aprile 2023, non sarà possibile creare nuove risorse LUIS. Una versione più recente di Language Understanding è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

CLU (Conversational Language Understanding), una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata di LUIS. Per altre informazioni sul supporto per la comprensione del linguaggio in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

Dimensioni personalizzate

La maggior parte dei dati attività specifici del bot è archiviata nel campo customDimensions.

Campo Descrizione Valori di esempio
activityId ID del messaggio <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a
activityType Tipo del messaggio message, conversationUpdate, event, invoke
channelId Identificatore del canale emulator, directline, msteams, webchat
fromId Identificatore di origine <id>
fromName Nome utente dal client John Bonham, Keith Moon, Steve Smith, Steve Gadd
locale Impostazioni locali di origine del client en-us, zh-cn, en-GB, de-de, zh-CN
recipientId Identificatore del destinatario <id>
recipientName Nome del destinatario John Bonham, Keith Moon, Steve Smith, Steve Gadd
Testo Testo del messaggio find a coffee shop

Dimensioni personalizzate: LUIS

Nota

Language Understanding (LUIS) verrà ritirato il 1° ottobre 2025. A partire dal 1° aprile 2023, non sarà possibile creare nuove risorse LUIS. Una versione più recente di Language Understanding è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

CLU (Conversational Language Understanding), una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata di LUIS. Per altre informazioni sul supporto per la comprensione del linguaggio in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

La strumentazione LUIS archivia i dati nei campi di dimensioni personalizzate seguenti.

Campo Descrizione Valori di esempio
finalità Finalità rilevata di LUIS pointOfInterestSkill
intentScore Punteggio del riconoscimento LUIS 0.98
Entità Entità rilevate da LUIS FoodOfGrocery = [["coffee"]], KEYWORD= ["coffee shop"]
Domanda Domanda rilevata da LUIS find a coffee shop
sentimentLabel Valutazione rilevata da LUIS positivo

Dimensioni personalizzate: QnAMaker

Nota

Azure AI QnA Maker verrà ritirato il 31 marzo 2025. A partire dal 1° ottobre 2022, non potrai creare nuove risorse o Knowledge Base di QnA Maker. Una versione più recente della funzionalità di domande e risposte è ora disponibile come parte del linguaggio di intelligenza artificiale di Azure.

La risposta alle domande personalizzate, una funzionalità del linguaggio di intelligenza artificiale di Azure, è la versione aggiornata del servizio QnA Maker. Per altre informazioni sul supporto di domande e risposte in Bot Framework SDK, vedere Comprensione del linguaggio naturale.

La strumentazione QnAMaker archivia i dati nei campi di dimensioni personalizzate seguenti.

Suggerimento

Per abilitare la registrazione di informazioni personali come domande e risposte, il parametro log personal information deve essere impostato su true nel costruttore della classe QnA Maker .

Campo Descrizione Valori di esempio
Domanda Domanda rilevata da QnA what can you do?
answer Risposta di QnA You have questions, I may have answers.
articleFound QnA vero
questionId ID domanda QnA 488
knowledgeBaseId QnA KB ID 2a4936f3-b2c8-44ff-b21f-67bc413b9727
matchedQuestion Matrice di domande corrispondenti ["Puoi spiegarmi qual è il tuo ruolo?","Puoi dirmi un po' di te?","Puoi dirmi di te?","Potresti aiutarmi","hmmm così cosa puoi fare?","Come puoi aiutarmi","Come puoi aiutarmi?","Come puoi aiutarmi?","Come puoi aiutarti?","così come posso usarlo nei miei progetti?", "Parlami della tua capacità","Che cosa sei in grado di?", ...]

Vedi anche