De telemetriegegevens van uw bot analyseren
VAN TOEPASSING OP: SDK v4
Gedrag van bot analyseren
De volgende verzameling query's kan worden gebruikt om het gedrag van de bot te analyseren. U kunt de verzameling gebruiken om aangepaste query's te maken in Azure Monitor Log Analytics en om bewakings- en Power BI-visualisatiedashboards te maken.
Vereisten
Het is handig om basiskennis te hebben van de volgende concepten:
- Kusto-query's
- Log Analytics gebruiken in Azure Portal om Azure Monitor-logboekquery's te schrijven
- De basisconcepten van logboekquery's in Azure Monitor
Tip
Als u uw bot maakt met behulp van hulpprogramma's zoals Copilot Studio of Composer, wilt u de adaptieve dialoogvensterversie van elke query gebruiken wanneer deze beschikbaar is.
Dashboards
Azure Dashboards bieden een uitstekende manier om de gegevens die zijn gegenereerd op basis van uw query's, weer te geven en te delen. U kunt aangepaste dashboards maken om uw botsactiviteiten te bewaken door uw query's te koppelen aan de tegels die u aan uw dashboard toevoegt. Zie Dashboards van Log Analytics-gegevens maken en delen voor meer informatie over dashboards en het koppelen van uw query's. In de rest van dit artikel ziet u voorbeelden van enkele query's die nuttig kunnen zijn bij het bewaken van het gedrag van uw bots.
Voorbeeld van Kusto-query's
Notitie
Het is raadzaam om te draaien op verschillende dimensies, zoals periode, kanaal en landinstelling voor alle query's in dit artikel.
Aantal gebruikers per periode
Dit voorbeeld resulteert in een lijndiagram dat laat zien hoeveel afzonderlijke gebruikers de afgelopen 14 dagen met uw bot hebben gecommuniceerd. De periode kan eenvoudig worden gewijzigd door verschillende waarden toe te wijzen aan de queryStartDate
en queryEndDate
interval
variabelen.
Belangrijk
U krijgt alleen het juiste aantal unieke gebruikers in deze query als ze geverifieerde gebruikers zijn en de resultaten kunnen ook afhankelijk zijn van de kanaalmogelijkheden.
// 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
Tip
De Kusto-samenvattende operator wordt gebruikt om een tabel te maken waarmee de inhoud van de invoertabel wordt samengevoegd.
De functie Bin is een Scalaire Kusto-functie die, wanneer deze wordt gebruikt in combinatie met de summarize operator
functie, de queryresultaten in de opgegeven waarde groepeert. In het bovenstaande voorbeeld wordt dit gegroepeerd op dag, accepteert Kusto ook h=hours, m=minutes, s=seconds, ms=milliseconden, microsecond=microseconds.
Met de renderoperator kunt u eenvoudig grafieken weergeven, zoals het tijddiagram, een lijndiagram waarbij de x-as een datum/tijd is en elke andere numerieke kolom voor de y-as kan worden gebruikt. De x-as wordt automatisch mooi gespoerd, zelfs als uw gegevens niet elke keer zijn opgegeven. Als er geen render-instructie wordt gebruikt, wordt deze standaard ingesteld op table
.
Voorbeeld van queryresultaten voor aantal gebruikers per periode
Activiteit per periode
In dit voorbeeld ziet u hoe u het volume van de activiteit per gewenste dimensie kunt meten, zoals een telling van het aantal gesprekken, dialoogvensters of berichten per dag voor de afgelopen 14 dagen. De periode kan eenvoudig worden gewijzigd door verschillende waarden toe te wijzen aan de querystartdate
en queryEndDate
interval
variabelen. De gewenste dimensie wordt gedefinieerd door de extend
component in het volgende voorbeeld, metric
kan worden ingesteld op InstanceId, DialogId of ActivityId.
Wijs metrische gegevens toe aan de dimensie die u wilt weergeven:
- InstanceId meet het aantal gesprekken
- DialogId meet het aantal dialoogvensters
- ActivityId meet het aantal berichten
// 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
Tip
De Kusto-uitbreidingsoperator wordt gebruikt om berekende kolommen te maken en deze toe te voegen aan de resultatenset.
Voorbeeld van queryresultaten per periode
Activiteit per gebruiker per periode
In dit voorbeeld ziet u hoe u het aantal activiteiten per gebruiker per periode kunt tellen. Met deze query wordt ingezoomd op de activiteit per periodequery om u te richten op de activiteit per gebruiker per periode. De activiteiten omvatten dialoogvensters, gesprekken of berichten. Met deze query wordt de interactie van gebruikers met uw bot meten, waardoor potentiële problemen kunnen worden gevonden, zoals:
- Dagen met veel activiteit door één gebruiker kan een aanval of test betekenen
- Dagen met weinig interactie kunnen duiden op problemen met de servicestatus
Tip
U kunt verwijderen door user_Id om het algemene volume van de botactiviteit te krijgen dat kan worden gepistemd op tijd en dialoogvensters, berichten of gesprekken.
// 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
Voorbeeld van queryresultaten per gebruiker per gebruiker
user_Id | tijdstempel | Tellen |
---|---|---|
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 |
Dialoogvenstervoltooiing
Zodra u de telemetrieclient voor een dialoogvenster hebt ingesteld, worden in het dialoogvenster (en de onderliggende elementen) enkele standaardtelemetriegegevens verzonden, zoals gestart en voltooid. Dit voorbeeld kan worden gebruikt om de voltooide dialoogvensters te meten ten opzichte van gestarte dialoogvensters. Als het aantal gestarte dialoogvensters groter is dan het aantal voltooide dialoogvensters, voltooien sommige gebruikers de dialoogvensterstroom niet. U kunt deze query gebruiken om mogelijke dialoogvensterlogica te identificeren en op te lossen. Het kan ook worden gebruikt om te bepalen welke dialoogvensters het meest en minst worden gebruikt.
Tip
Als u uw bot maakt met behulp van hulpprogramma's zoals Copilot Studio of Composer, wilt u de adaptieve dialoogvensterversie van elke query gebruiken.
Voltooiing van watervaldialoogvenster
// % 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)
Tip
De Kusto Join-operator wordt gebruikt om de rijen van twee tabellen samen te voegen om een nieuwe tabel te vormen door overeenkomende waarden van de opgegeven kolommen uit elke tabel te vergelijken.
De projectoperator wordt gebruikt om de velden te selecteren die u in de uitvoer wilt weergeven. Net als bij het extend operator
veld dat een nieuw veld toevoegt, kan de project operator
gebruiker kiezen uit de bestaande set velden of een nieuw veld toevoegen.
Adaptieve dialoogvensters zijn gestart en voltooid
// % 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)
Voorbeeld van queryresultaten voor voltooiing van dialoogvensters
Incompletion van dialoogvenster
Dit voorbeeld kan worden gebruikt om het aantal dialoogvensterstromen te tellen dat is gestart, maar nooit is voltooid vanwege annulering of afgebroken tijdens de opgegeven periode. U kunt het gebruiken om onvolledige dialoogvensters te bekijken en te onderzoeken of ze actief zijn geannuleerd vanwege verwarring van de gebruiker of afgebroken vanwege afleiding of verlies van interesse van de gebruiker.
Watervaldialoogvensters niet voltooid
// 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
Adaptieve dialoogvensters zijn niet voltooid
// 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
Tip
De Kusto-orderoperator (hetzelfde als de sort operator
) wordt gebruikt om de rijen van de invoertabel in volgorde te sorteren op een of meer kolommen. Opmerking: Als u null-waarden wilt uitsluiten van de resultaten van een query, kunt u ze filteren in uw where
instructie, bijvoorbeeld u kunt 'en isnotnull(Timestamp)' toevoegen of null-waarden aan het begin of einde retourneren, het nulls first
of nulls first
het einde van de orderinstructie toevoegen.
Voorbeeld van queryresultaten voor incompletion
Inzoomen in dialoogvensterreeks
Waterval starten/stap/voltooid voor dialoogvenster in gesprek
In dit voorbeeld ziet u de reeks dialoogvensterstappen, gegroepeerd op gesprek (instanceId), wat handig kan zijn bij het bepalen welke stappen leiden tot onderbreking van dialoogvensters.
Voer deze query uit, voer de waarde in van de gewenste DialogId
waarde in plaats van <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>")
Tip
Deze query is geschreven met behulp van een door een query gedefinieerde functie, een door de gebruiker gedefinieerde functie die wordt gedefinieerd en gebruikt binnen het bereik van één query en wordt gedefinieerd via een let-instructie. Deze query die is geschreven zonder het gebruik van het query-defined function
volgende:
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
Voorbeeldqueryresultaten
timestamp | naam | StepName | InstanceId |
---|---|---|---|
2019-08-23T20:04... | WaterfallStart | Nul | ... 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 | Nul | ... 79c0f03d8701 |
2019-08-28T23:35... | WaterfallStart | Nul | ... 6ac8b3211b99 |
2019-08-28T23:35... | WaterfallStep 2 | GetPointOfInterestLocations | ... 6ac8b3211b99 |
2019-08-28T19:41... | WaterfallStart | Nul | ... 8137d76a5cbb |
2019-08-28T19:41... | WaterfallStep 2 | GetPointOfInterestLocations | ... 8137d76a5cbb |
2019-08-28T19:41... | WaterfallStart | Nul | ... 8137d76a5cbb |
1 Voltooid
2 Verlaten
Interpretatie: Gebruikers lijken het gesprek in de stap GetPointOfInterestLocations te verlaten.
Notitie
Watervaldialoogvensters voeren een reeks uit (starten, meerdere stappen, voltooid). Als een reeks het begin zonder voltooid weergeeft, betekent dit dat het dialoogvenster is onderbroken omdat de gebruiker het dialoogvenster afbreekt of annuleert. In deze gedetailleerde analyse ziet u dit gedrag (zie voltooide versus verlaten stappen).
Watervalstart/stap/volledige/annuleren stappen totalen aggregeren
In dit voorbeeld ziet u de geaggregeerde totalen van het totale aantal keren dat een dialoogvensterreeks is gestart, het gecombineerde totale aantal watervalstappen, hoeveel zijn voltooid, hoeveel zijn geannuleerd en het verschil tussen WaterfallStart en het gecombineerde totaal van WaterfallComplete plus WaterfallCancel geeft u het totale aantal verlaten.
// 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>")
Voorbeelden van statistische queryresultaten voor waterval
name | count |
---|---|
WaterfallStart | 21 |
WaterfallStep | 47 |
WaterfallComplete | 11 |
WaterfallCancel | 1 |
Interpretatie: Van 21 aanroepen van een dialoogvensterreeks, is slechts 11 voltooid, zijn 9 afgelaten en is er een geannuleerd door de gebruiker.
Gemiddelde duur in dialoogvenster
In dit voorbeeld wordt de gemiddelde hoeveelheid tijd die gebruikers besteden in een bepaald dialoogvenster meten. Uw bot kan profiteren van het vereenvoudigen van dialoogvensters die lang duren voordat een gebruiker is voltooid.
// 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")
Voorbeeld van queryresultaten met gemiddelde duur
Gemiddelde stappen in dialoogvenster
In dit voorbeeld ziet u de 'lengte' van elk aangeroepen dialoogvenster, zoals berekend op gemiddelde, minimum, maximum en standaarddeviatie. Dit kan helpen bij het analyseren van de kwaliteit van dialoogvensters. Voorbeeld:
- Dialoogvensters met te veel stappen moeten worden geëvalueerd voor vereenvoudigingsmogelijkheden.
- Dialoogvensters met een brede kloof tussen min/max/gemiddelde kunnen betekenen dat gebruikers vastlopen bij het voltooien van de taken. Mogelijk moet u de mogelijkheid evalueren dat er kortere paden zijn om de taken te voltooien of manieren om de complexiteit van het dialoogvenster te verminderen.
- In dialoogvensters met een grote standaarddeviatie worden complexe paden of verbroken ervaringen voorgesteld (verlaten/annuleren).
- Dialoogvensters met een paar stappen zijn mogelijk zo omdat ze nooit zijn voltooid. Het analyseren van de voltooiings-/afbrekingspercentages kan helpen om die beslissing te nemen.
// 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
Voorbeeld van queryresultaten met gemiddelde stappen
Dialoogvenster-id | gemiddelde stappen | minimale stappen | max. stappen | std | avg short by steps | gemiddelde kort per procent |
---|---|---|---|---|---|---|
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% |
onboarden | 2.7 | 2 | 4 | 0.94 | 1.3 | 32.5% |
__Interpretation: FindArticlesDialog heeft bijvoorbeeld een brede spread tussen min/max en moet worden onderzocht en mogelijk opnieuw ontworpen en geoptimaliseerd.
Metrische gegevens kanaalactiviteit per activiteit
In dit voorbeeld wordt de hoeveelheid activiteit die uw bot ontvangt per kanaal in de opgegeven periode meten. Dit doet u door een van de volgende metrische gegevens te tellen: inkomende berichten, gebruikers, gesprekken of dialoogvensters. Dit kan handig zijn voor servicestatusanalyse of om de populariteit van kanalen te meten.
// 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
Tip
U kunt overwegen om deze variaties uit te proberen:
- Voer de query uit zonder de tijdstempel-bucketing:
bin(timestamp, groupByInterval)
. - U kunt ook gebruiken
dcount
voor afzonderlijke gebruikers encount
voor alle activiteiten van gebruikersevenementen. Dit werkt ook voor herhalende gebruikers.
Voorbeeld van queryresultaten van kanaalactiviteit per activiteit
Interpretatie: Emulatortests waren vroeger het populairst, maar zodra we live gingen, is DirectLineSpeech het populairste kanaal.
Totaal aantal intenties op populariteit
Dit voorbeeld is van toepassing op bots met LUIS. Het toont een samenvatting van alle intenties op populariteit en de bijbehorende betrouwbaarheidsscore voor intentiedetectie.
Notitie
Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.
Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.
- In de praktijk moet de weergave worden gescheiden voor elke metrische waarde.
- Populaire intentiepaden moeten worden geoptimaliseerd voor gebruikerservaring.
- Lage gemiddelde scores duiden op slechte herkenning en mogelijke ontbrekende werkelijke intentie van de gebruiker.
// 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")
Voorbeeld van queryresultaten voor intenties op populariteit
Interpretatie: bijvoorbeeld de populairste intentie, bevestigt dat er gemiddeld slechts 23% betrouwbaarheid is gedetecteerd.
Tip
Staafdiagrammen zijn een van meer dan tien opties die beschikbaar zijn met Kusto-query's. Enkele andere opties zijn: anomaliediagram, vlakdiagram, kolomdiagram, lijndiagram, spreidingsdiagram. Zie het onderwerp renderoperator voor meer informatie.
Schema van Bot Analytics Instrumentation
In de volgende tabellen worden de meest voorkomende velden weergegeven waarmee uw bot telemetriegegevens zal registreren.
Algemene envelop
Algemene log analytics-velden in Application Insights-instrumentatie.
Veld | Beschrijving | Voorbeeldwaarden |
---|---|---|
naam | Berichttype | BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure |
customDimensions | SDK Bot Analytics | activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop |
timestamp | Tijdstip van gebeurtenis | 2019-09-05T18:32:45.287082Z |
instance_Id | Gespreks-id | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | Id draaien | 084b2856947e3844a5a18a8476d99aaa |
user_Id | Unieke gebruikers-id van kanaal | emulator7c259c8e-2f47... |
client_IP | Ip-adres van client | 127.0.0.1 (mogelijk afwezig vanwege privacyblok) |
client_City | Clientstad | Redmond (indien gedetecteerd, is mogelijk afwezig) |
Notitie
Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.
Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.
Notitie
Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.
Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.
Aangepaste dimensies
De meeste botspecifieke activiteitsgegevens worden opgeslagen in het veld customDimensions .
Veld | Beschrijving | Voorbeeldwaarden |
---|---|---|
activityId | Bericht-id | <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | Type bericht | bericht, conversationUpdate, gebeurtenis, aanroepen |
channelId | Kanaal-id | emulator, directline, msteams, webchat |
fromId | Van-id | <id> |
fromName | Gebruikersnaam van klant | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
locale | Oorspronkelijke landinstelling van klant | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Ud van ontvanger | <id> |
recipientName | Naam van ontvanger | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
sms verzenden | Tekst in bericht | een koffiebar zoeken |
Aangepaste dimensies: LUIS
Notitie
Language Understanding (LUIS) wordt op 1 oktober 2025 buiten gebruik gesteld. Vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. Er is nu een nieuwere versie van taalkennis beschikbaar als onderdeel van Azure AI Language.
Conversational Language Understanding (CLU), een functie van Azure AI Language, is de bijgewerkte versie van LUIS. Zie Natuurlijke taalkennis voor meer informatie over ondersteuning voor taalkennis in de Bot Framework SDK.
Met LUIS-instrumentatie worden de gegevens opgeslagen in de volgende velden Aangepaste dimensies.
Veld | Beschrijving | Voorbeeldwaarden |
---|---|---|
intentie | Luis gedetecteerde intentie | pointOfInterestSkill |
intentScore | LUIS-herkenningsscore | 0,98 |
Entiteiten | Gedetecteerde LUIS-entiteiten | FoodOfGrocery = [["koffie"]], KEYWORD= ["koffiebar"] |
Vraag | Luis gedetecteerde vraag | een koffiebar zoeken |
sentimentLabel | Gevoel gedetecteerd door LUIS | positief |
Aangepaste dimensies: QnAMaker
Notitie
Azure AI QnA Maker wordt op 31 maart 2025 buiten gebruik gesteld. Vanaf 1 oktober 2022 kunt u geen nieuwe resources of kennisbanken voor QnA Maker maken. Een nieuwere versie van de vraag- en antwoordmogelijkheid is nu beschikbaar als onderdeel van Azure AI Language.
Aangepaste vraagantwoorden, een functie van Azure AI Language, is de bijgewerkte versie van de QnA Maker-service. Zie Natuurlijke taalbegrip voor meer informatie over vraag- en antwoordondersteuning in de Bot Framework SDK.
QnAMaker-instrumentatie slaat de gegevens op in de volgende velden Aangepaste dimensies.
Tip
Als u logboekregistratie van persoonlijke gegevens, zoals vragen en antwoorden, wilt inschakelen, moet de parameter voor persoonlijke gegevens in het logboek worden ingesteld op waar in de constructor van de QnA Maker-klasse .
Veld | Beschrijving | Voorbeeldwaarden |
---|---|---|
-vraag | QnA gedetecteerde vraag | Wat kun je doen? |
answer | QnA-antwoord | Je hebt vragen, ik heb misschien antwoorden. |
articleFound | QnA | true |
questionId | QnA-vraag-id | 488 |
knowledgeBaseId | QnA KB-id | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Matrix met overeenkomende vragen | ["Kunt u me uitleggen wat uw rol is?","Kunt u me een beetje over uzelf vertellen?","Kunt u me vertellen?","kunt u me helpen","hmmm zodat wat u kunt doen?","hoe kunt u mij helpen","Hoe kunt u mij helpen?","Hoe kunt u mij helpen?","Hoe kan ik u helpen?","Hoe kan ik u gebruiken in mijn projecten?", "Praat met mij over uw mogelijkheden","Waar bent u in staat?", ...] |
Zie ook
- Zie Aan de slag met logboekquery's in Azure Monitor voor een zelfstudie over het schrijven van logboekquery's
- Gegevens van Azure Monitor visualiseren
- Meer informatie over het toevoegen van telemetrie aan uw bot
- Meer informatie over Azure Monitor-logboekquery's
- Volledige lijst met Bot Framework Application Insights-gebeurtenissen
- Dashboards van Log Analytics-gegevens maken en delen