A robot telemetriai adatainak elemzése
A KÖVETKEZŐKRE VONATKOZIK: SDK v4
Robot viselkedésének elemzése
A következő lekérdezésgyűjtemény használható a robot viselkedésének elemzéséhez. A gyűjtemény segítségével egyéni lekérdezéseket készíthet az Azure Monitor Log Analyticsben, valamint monitorozási és Power BI-vizualizációs irányítópultokat hozhat létre.
Előfeltételek
A következő fogalmak alapszintű ismerete hasznos:
- Kusto-lekérdezések
- A Log Analytics használata az Azure Portalon az Azure Monitor napló lekérdezéseinek írásához
- A napló lekérdezéseinek alapfogalmai az Azure Monitorban
Tipp.
Ha a robotot olyan eszközökkel hozza létre, mint a Power Virtual Agents vagy a Composer, akkor az egyes lekérdezések Adaptív párbeszédpanel-verzióját kell használnia, ha elérhető.
Dashboards
Az Azure-irányítópultok nagyszerű módot kínálnak a lekérdezésekből származó információk megtekintésére és megosztására. Egyéni irányítópultokat hozhat létre a robotok tevékenységének figyeléséhez úgy, hogy a lekérdezéseket az irányítópulthoz hozzáadott csempékkel társítja. Az irányítópultokról és a lekérdezések hozzájuk való társításáról további információt a Log Analytics-adatok irányítópultjainak létrehozása és megosztása című témakörben talál. A cikk további részében néhány olyan lekérdezésre mutatunk be példákat, amelyek hasznosnak bizonyulhatnak a robotok viselkedésének monitorozásában.
Példa Kusto-lekérdezésekre
Megjegyzés:
Javasoljuk, hogy a cikkben szereplő összes lekérdezéshez különböző dimenziókon, például ponton, csatornán és területi beállításon fordítsa a kimutatást.
Felhasználók száma időszakonként
Ez a példa egy vonaldiagramot eredményez, amely megmutatja, hogy hány különböző felhasználó kommunikált naponta a robottal az elmúlt 14 napban. Az időtartam egyszerűen módosítható úgy, hogy különböző értékeket rendel a queryStartDate
, queryEndDate
és interval
változókhoz.
Fontos
Ebben a lekérdezésben csak akkor kap megfelelő számú egyedi felhasználót, ha hitelesített felhasználók, és az eredmények a csatorna képességeitől is függhetnek.
// 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
Tipp.
A Kusto summarize operátor egy olyan tábla létrehozásához használható, amely a bemeneti tábla tartalmát összesíti.
A Bin függvény egy Kusto skaláris függvény, amely a lekérdezés eredményeit a megadott értékre csoportosítja a summarize operator
lekérdezési akarattal együtt használva. A fenti példában ez nap szerint van csoportosítva, a Kusto a h=óra, m=perc, s=másodperc, ms=ezredmásodperc, mikroszekundum=mikroszekundumokat is elfogadja.
A renderelő operátor lehetővé teszi a diagramok egyszerű megjelenítését, például az idődiagramot, egy vonaldiagramot, ahol az x tengely dátumidő, és bármely más numerikus oszlop használható az y tengelyhez. Automatikusan elterül az x tengely, még akkor is, ha az adatok nem minden alkalommal vannak megadva. Ha nem használ renderelési utasítást, az alapértelmezés szerint a .table
Minta a felhasználók számának időszakonkénti lekérdezési eredményeire
Tevékenység időszakonként
Ez a példa bemutatja, hogyan lehet mérni a kívánt dimenziónkénti tevékenységmennyiséget, például a beszélgetések, párbeszédpanelek vagy üzenetek napi számát az elmúlt 14 napban. Az időtartam egyszerűen módosítható úgy, hogy különböző értékeket rendel a querystartdate
, queryEndDate
és interval
változókhoz. A kívánt dimenziót a következő példában szereplő extend
záradék határozza meg, metric
és az InstanceId, DialogId vagy activityId értékre állítható be.
Metrika hozzárendelése a megjeleníteni kívánt dimenzióhoz:
- Az InstanceId a beszélgetések számát méri
- A DialogId a párbeszédpanelek számát méri
- Az ActivityId az üzenetek számát méri
// 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
Tipp.
A Kusto extend operátor használatával számított oszlopokat hozhat létre, és hozzáfűzheti őket az eredményhalmazhoz.
Időszakonkénti tevékenységenkénti lekérdezési eredmények mintája
Felhasználónkénti tevékenység időszakonként
Ez a példa bemutatja, hogyan számolhatja meg a felhasználónkénti tevékenységek számát időszakonként. Ez a lekérdezés lehatolást végez az időszakonkénti tevékenységre, hogy a felhasználónkénti tevékenységre összpontosítson. A tevékenységek közé tartoznak a párbeszédpanelek, beszélgetések vagy üzenetek. Ez a lekérdezés méri a robottal való felhasználói interakciót, amely segíthet megtalálni a lehetséges problémákat, például:
- Az egyetlen felhasználó által végzett sok tevékenységgel töltött napok támadást vagy tesztet jelenthetnek
- A kevés interakcióval töltött napok szolgáltatásállapot-problémákat jelezhetnek
Tipp.
A user_Id eltávolíthatja az általános robottevékenység-kötetet, amely az idő és a párbeszédpanelek, üzenetek vagy beszélgetések alapján forgatható.
// 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
Mintául szolgáló tevékenység felhasználónkénti lekérdezési eredmények
user_Id | Időbélyeg | Gróf |
---|---|---|
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 |
Párbeszédpanel befejezése
Miután beállította a telemetria-ügyfelet egy párbeszédpanelhez, a párbeszédpanel (és annak gyermekei) kibocsát néhány alapértelmezett telemetriai adatot, például elindult és befejeződött. Ez a példa a kész párbeszédpanelek kezdő párbeszédpanelekhez viszonyított mérésére használható. Ha az elindított párbeszédpanelek száma nagyobb, mint a befejezett szám, néhány felhasználó nem végzi el a párbeszédpanel-folyamatot. Ezzel a lekérdezésrel azonosíthatja és elháríthatja a lehetséges párbeszédpanel-logikát. Azt is azonosíthatja, hogy mely párbeszédpaneleket használják a leggyakrabban és a legkevésbé.
Tipp.
Ha a robotot olyan eszközökkel hozza létre, mint a Power Virtual Agents vagy a Composer, akkor az egyes lekérdezések adaptív párbeszédpanel-verzióját kell használnia.
Vízesés párbeszédpanel befejezése
// % 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)
Tipp.
A Kusto illesztési operátor két tábla sorainak egyesítése új tábla létrehozásához a megadott oszlop(ok) értékeinek megfeleltetésével.
A projekt operátorával kiválaszthatja a kimenetben megjeleníteni kívánt mezőket. Az új mezőt hozzáadó mezőhöz extend operator
hasonlóan választhat a project operator
meglévő mezőkészletből, vagy hozzáadhat egy új mezőt.
Az adaptív párbeszédpanelek elindultak és befejeződtek
// % 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)
Minta párbeszédpanel-befejezési lekérdezés eredményei
Párbeszédpanel-kiegészítés
Ez a példa az elindított, de a megadott időszakon belül megszakítás vagy megszakítás miatt nem befejezett párbeszédpanel-folyamatok számának megszámlálására használható. Segítségével áttekintheti a hiányos párbeszédpaneleket, és megvizsgálhatja, hogy a felhasználók zavarása vagy érdeklődési körének elvesztése miatt aktívan törölték-e őket.
A vízesés párbeszédpanelek nem fejeződtek be
// 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
Az adaptív párbeszédpanelek nem fejeződtek be
// 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
Tipp.
A Kusto-rendelés operátor (ugyanaz, mint a sort operator
) a bemeneti tábla sorait rendezi sorrendbe egy vagy több oszlop szerint. Megjegyzés: Ha bármely lekérdezés eredményéből ki szeretné zárni a null értékeket, szűrheti őket az where
utasításban, például hozzáadhatja az "and isnotnull(Timestamp)" értéket, vagy null értékeket ad vissza a rendelési utasítás elején vagy végén nulls first
nulls first
.
Minta párbeszédpanel-incompletion lekérdezés eredményei
Párbeszédpanel-sorozat lehatolása
Vízesés indítása/lépés/kész párbeszédpanel a beszélgetésben
Ez a példa a párbeszéd (instanceId) szerint csoportosított párbeszédpanel-lépések sorozatát mutatja be, amely hasznos lehet annak meghatározásához, hogy mely lépések vezetnek a párbeszédpanel megszakadásához.
A lekérdezés futtatásakor adja meg a kívánt DialogId
értéket a <SampleDialogId helyett>
// 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>")
Tipp.
Ez a lekérdezés egy lekérdezés által definiált függvény használatával lett megírva, amely egy felhasználó által definiált függvény, amely egyetlen lekérdezés hatókörén belül van definiálva, és egy let utasítással van definiálva. Ez a lekérdezés a következő használata query-defined function
nélkül íródott:
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
Minta lekérdezési eredmények
timestamp | név | 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... | Vízeséskiegészítés 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 |
1Befejezve
2Elhagyatott
Értelmezés: A felhasználók úgy tűnik, hogy a GetPointOfInterestLocations lépésben abbahagyják a beszélgetést.
Megjegyzés:
A vízesés párbeszédpanelek végrehajtanak egy sorozatot (indítás, több lépés, kész). Ha egy sorozat befejezetlen indítással kezdődik, az azt jelenti, hogy a párbeszédpanel megszakadt, vagy a felhasználó megszakította vagy megszakította a párbeszédpanelt. Ebben a részletes elemzésben láthatja ezt a viselkedést (lásd a befejezett és az elhagyott lépéseket).
Vízesés start/step/complete/cancel steps totals
Ez a példa a párbeszédpanel-sorozat indításának összesítését, a vízeséslépések összesített számát, a sikeres befejezések számát, a megszakítások számát, valamint a WaterfallStart és a WaterfallComplete és a WaterfallCancel együttes összegét mutatja.
// 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>")
Vízesés-összesítő lekérdezés eredményeinek mintája
név | count |
---|---|
WaterfallStart | 21 |
WaterfallStep | 47 |
Vízeséskiegészítés | 11 |
WaterfallCancel | 1 |
Értelmezés: A párbeszédpanel-sorozat 21 meghívásából csak 11 fejeződött be, 9-et felhagytak, egyet pedig a felhasználó törölt.
Átlagos időtartam a párbeszédpanelen
Ez a példa azt méri, hogy a felhasználók átlagosan mennyi időt töltenek egy adott párbeszédpanelen. A robot számára előnyös lehet az olyan párbeszédpanelek egyszerűsítése, amelyek hosszú időt vesznek igénybe a felhasználó számára.
// 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")
Átlagos időtartamú lekérdezési eredmények mintája
Átlagos lépések a párbeszédpanelen
Ez a példa az egyes meghívott párbeszédpanelek "hosszát" mutatja be az átlag, a minimális, a maximális és a szórás alapján kiszámítva. Ez segíthet a párbeszédpanel minőségének elemzésében. Például:
- A túl sok lépést tartalmazó párbeszédpaneleket ki kell értékelni az egyszerűsítési lehetőségek szempontjából.
- A minimális/maximális/átlag közötti széles eltérést tartalmazó párbeszédpanelek azt jelenthetik, hogy a felhasználók elakadnak a feladatok elvégzéséhez. Előfordulhat, hogy ki kell értékelnie annak lehetőségét, hogy a feladatok elvégzéséhez rövidebb útvonalakat kell megadnia, vagy csökkentenie kell a párbeszédpanelek összetettségét.
- A nagy szórást tartalmazó párbeszédpanelek összetett útvonalakra vagy hibás felületre (megszakításra/megszakításra) utalnak.
- A néhány lépést tartalmazó párbeszédpanelek azért lehetnek ilyenek, mert soha nem fejezték be őket. A befejezési/lemondási arányok elemzése segíthet a meghatározásban.
// 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
Átlaglépéses lekérdezési eredmények mintája
Párbeszédpanel azonosítója | avg lépések | minimális lépések | maximális lépések | szórás | avg rövid lépések szerint | 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% |
regisztráció | 2.7 | 2 | 4 | 0.94 | 1.3 | 32.5% |
__Interpretation: A FindArticlesDialog például széles szórással rendelkezik a min/max között, ezért meg kell vizsgálni, és esetleg újra kell tervezni > optimalizálva.
Csatornatevékenység tevékenységmetrika szerint
Ez a példa azt méri, hogy a robot mennyi tevékenységet kap csatornánként az adott időszakban. Ezt a következő metrikák bármelyikének megszámolásával hajtja végre: bejövő üzenetek, felhasználók, beszélgetések vagy párbeszédpanelek. Ez hasznos lehet a szolgáltatásállapot-elemzéshez vagy a csatornák népszerűségének méréséhez.
// 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
Tipp.
Érdemes lehet kipróbálni az alábbi változatokat:
- Futtassa a lekérdezést időbélyeg-gyűjtő használata nélkül:
bin(timestamp, groupByInterval)
. - Használhatja a különböző felhasználókat és
count
az összes felhasználói eseménytevékenységet isdcount
. Ez az ismétlődő felhasználók esetében is működik.
Minta csatornánkénti tevékenységenkénti lekérdezés eredményei
Értelmezés: Az Emulator tesztelése korábban a legnépszerűbb volt, de miután élőben mentünk, a DirectLineSpeech a legnépszerűbb csatorna.
Összes szándék népszerűség szerint
Ez a példa a LUIS-kompatibilis robotokra vonatkozik. Az összes szándék népszerűség szerinti összegzését és a szándékészlelési biztos pontszámot jeleníti meg.
Megjegyzés:
A Language Understanding (LUIS) 2025. október 1-jén megszűnik. 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Az Azure AI Language részeként már elérhető a nyelvértés újabb verziója.
Az Azure AI Language egyik funkciója, a beszélgetési nyelv megértése (CLU) a LUIS frissített verziója. További információ a Bot Framework SDK nyelvfelismerési támogatásáról: Természetes nyelvfelismerés.
- A gyakorlatban a nézetet el kell különíteni az egyes metrikákhoz.
- A népszerű szándékútvonalakat a felhasználói élményhez kell optimalizálni.
- Az alacsony átlagos pontszámok rossz felismerést jeleznek , és lehetséges, hogy hiányzik a tényleges felhasználói szándék.
// 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")
Minta szándékok népszerűség szerinti lekérdezési eredményei
Értelmezés: Például a legnépszerűbb szándék, megerősítés csak 23%-os megbízhatósággal észlelhető átlagosan.
Tipp.
A Barcharts a Kusto-lekérdezésekkel elérhető több mint egy tucat lehetőség egyike. További lehetőségek: anomálichart, területdiagram, oszlopdiagram, vonaldiagram, pontdiagram. További információkért tekintse meg a renderelési operátor témakörét.
A Bot Analytics Instrumentation sémája
Az alábbi táblázatok azokat a leggyakoribb mezőket mutatják be, amelyekbe a robot telemetriai adatokat naplóz.
Általános boríték
Az Alkalmazás Elemzések rendszerállapot gyakori naplóelemzési mezői.
Mező | Ismertetés | Mintaértékek |
---|---|---|
név | Üzenettípus | 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 | Az esemény időpontja | 2019-09-05T18:32:45.287082Z |
instance_Id | Beszélgetés azonosítója | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | Azonosító bekapcsolása | 084b2856947e3844a5a18a8476d99aaaaa |
user_Id | Egyedi csatorna felhasználói azonosítója | emulator7c259c8e-2f47... |
client_IP | Ügyfél IP-címe | 127.0.0.1 (adatvédelmi blokk miatt előfordulhat, hogy hiányzik) |
client_City | Ügyfél város | Redmond (ha észlelik, lehet, hogy hiányzik) |
Megjegyzés:
Az Azure AI QnA Maker 2025. március 31-én megszűnik. 2022. október 1-től nem hozhat létre új QnA Maker-erőforrásokat vagy tudásbázis. A kérdés- és válaszképesség újabb verziója már elérhető az Azure AI Language részeként.
Az Egyéni kérdések megválaszolása, az Azure AI Nyelv egyik funkciója a QnA Maker szolgáltatás frissített verziója. A Bot Framework SDK kérdés-válasz támogatásával kapcsolatos további információkért lásd a természetes nyelv megértését.
Megjegyzés:
A Language Understanding (LUIS) 2025. október 1-jén megszűnik. 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Az Azure AI Language részeként már elérhető a nyelvértés újabb verziója.
Az Azure AI Language egyik funkciója, a beszélgetési nyelv megértése (CLU) a LUIS frissített verziója. További információ a Bot Framework SDK nyelvfelismerési támogatásáról: Természetes nyelvfelismerés.
Egyéni dimenziók
A robotspecifikus tevékenységadatok többsége a customDimensions mezőben van tárolva.
Mező | Ismertetés | Mintaértékek |
---|---|---|
activityId | Üzenetazonosító | <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | Üzenet típusa | üzenet, conversationUpdate, event, invoke |
channelId | Csatornaazonosító | emulátor, directline, msteams, webchat |
fromId | Azonosítóból | <id> |
fromName | Felhasználónév az ügyféltől | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
területi beállítás | Ügyfél forrásának területi beállítása | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Címzett azonosítója | <id> |
recipientName | Címzett neve | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
text | Szöveg az üzenetben | kávézó keresése |
Egyéni dimenziók: LUIS
Megjegyzés:
A Language Understanding (LUIS) 2025. október 1-jén megszűnik. 2023. április 1-től nem hozhat létre új LUIS-erőforrásokat. Az Azure AI Language részeként már elérhető a nyelvértés újabb verziója.
Az Azure AI Language egyik funkciója, a beszélgetési nyelv megértése (CLU) a LUIS frissített verziója. További információ a Bot Framework SDK nyelvfelismerési támogatásáról: Természetes nyelvfelismerés.
A LUIS-rendszerállapot az alábbi Egyéni dimenziók mezőkben tárolja az adatait.
Mező | Ismertetés | Mintaértékek |
---|---|---|
szándék | LUIS észlelt szándék | pointOfInterestSkill |
intentScore | LUIS-felismerési pontszám | 0,98 |
Entitások | LUIS által észlelt entitások | FoodOfGrocery = [["kávé"]], KULCSSZÓ= ["kávézó"] |
Question | A LUIS észlelte a kérdést | kávézó keresése |
sentimentLabel | LUIS észlelt hangulat | pozitív |
Egyéni dimenziók: QnAMaker
Megjegyzés:
Az Azure AI QnA Maker 2025. március 31-én megszűnik. 2022. október 1-től nem hozhat létre új QnA Maker-erőforrásokat vagy tudásbázis. A kérdés- és válaszképesség újabb verziója már elérhető az Azure AI Language részeként.
Az Egyéni kérdések megválaszolása, az Azure AI Nyelv egyik funkciója a QnA Maker szolgáltatás frissített verziója. A Bot Framework SDK kérdés-válasz támogatásával kapcsolatos további információkért lásd a természetes nyelv megértését.
A QnAMaker-rendszerállapot az alábbi Egyéni dimenziók mezőkben tárolja az adatait.
Tipp.
A személyes adatok, például kérdések és válaszok naplózásának engedélyezéséhez a napló személyes adatainak paraméterét igaz értékre kell állítani a QnA Maker-osztály konstruktorában.
Mező | Ismertetés | Mintaértékek |
---|---|---|
question (kérdés) | QnA észlelt kérdés | mit tehetsz? |
Válasz | QnA-válasz | Kérdései vannak, lehet, hogy vannak válaszaim. |
articleFound | QnA | true |
questionId | QnA-kérdés azonosítója | 488 |
knowledgeBaseId | QnA KB-azonosító | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Megfeleltethető kérdések tömbje | ["Meg tudná magyarázni nekem, hogy mi a szerepe?","Tud mondani nekem egy kicsit magadról?","Tudsz mondani rólad?","tudna segíteni nekem","hmmm így mit tudsz csinálni?","hogyan tudsz segíteni nekem","Hogyan tudsz segíteni nekem?","Hogyan tudsz segíteni?","Hogyan segíthetsz?","hogyan használhatom Önt a projektjeimben?", "Beszélj hozzám a képességedről","Mire vagy képes?", ...] |
Kapcsolódó információk
- A napló lekérdezések írásával kapcsolatos oktatóanyagért tekintse meg a napló lekérdezéseinek első lépéseit az Azure Monitorban
- Adatok megjelenítése az Azure Monitorból
- Ismerje meg, hogyan adhat hozzá telemetriát a robothoz
- További információ az Azure Monitor napló lekérdezéseiről
- A Bot Framework-alkalmazás Elemzések események teljes listája
- Irányítópultok létrehozása és megosztása Log Analytics-adatokból