Botunuzun telemetri verilerini analiz etme
ŞUNLAR IÇIN GEÇERLIDIR: SDK v4
Bot davranışını analiz etme
Bot davranışını analiz etmek için aşağıdaki sorgu koleksiyonu kullanılabilir. Koleksiyonu kullanarak Azure İzleyici Log Analytics'te özel sorgular yazabilir, izleme ve Power BI görselleştirme panoları oluşturabilirsiniz.
Önkoşullar
Aşağıdaki kavramlar hakkında temel bilgilere sahip olmak yararlı olur:
- Kusto sorguları
- Azure portalda Log Analytics kullanarak Azure İzleyici günlük sorguları yazma
- Azure İzleyici'de günlük sorgularının temel kavramları
İpucu
Botunuzu Copilot Studio veya Composer gibi araçları kullanarak oluşturuyorsanız, kullanılabilir olduğunda her sorgunun Uyarlamalı İletişim Kutusu sürümünü kullanmak istersiniz.
Panolar
Azure Panoları, sorgularınızdan oluşturulan bilgileri görüntülemek ve paylaşmak için harika bir yol sunar. Sorgularınızı panonuza eklediğiniz kutucuklarla ilişkilendirerek botlarınızın etkinliğini izlemeye yardımcı olmak için özel panolar oluşturabilirsiniz. Panolar ve sorgularınızı bunlarla ilişkilendirme hakkında daha fazla bilgi için bkz . Log Analytics verilerinin panolarını oluşturma ve paylaşma. Bu makalenin geri kalanında botlarınızın davranışını izlemede yararlı bulabileceğiniz bazı sorgu örnekleri gösterilir.
Örnek Kusto sorguları
Not
Bu makaledeki tüm sorgular için nokta, kanal ve yerel ayar gibi farklı boyutlarda özetlenmeleri önerilir.
Dönem başına kullanıcı sayısı
Bu örnek, son 14 gün içinde botunuzla günde kaç farklı kullanıcının iletişim kurduğunu gösteren bir çizgi grafikle sonuçlanmıştır. ve değişkenlerine queryStartDate
queryEndDate
interval
farklı değerler atanarak zaman aralığı kolayca değiştirilebilir.
Önemli
Bu sorgudaki benzersiz kullanıcıların doğru sayısını yalnızca kimliği doğrulanmış kullanıcılarsa alırsınız ve sonuçlar kanal özelliklerine de bağlı olabilir.
// 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
İpucu
Kusto summarize işleci , giriş tablosunun içeriğini toplayan bir tablo oluşturmak için kullanılır.
Bin işlevi, ile summarize operator
birlikte kullanıldığında sorgu sonuçlarını belirtilen değerde gruplandıracak bir Kusto skaler işlevidir. Yukarıdaki örnekte, bu güne göre gruplandırılır. Kusto ayrıca h=hours, m=minutes, s=seconds, ms=milisaniye, microsecond=microseconds değerlerini de kabul eder.
İşleme işleci, zaman çizelgesi, x ekseninin tarih saat olduğu ve y ekseni için başka herhangi bir sayısal sütunun kullanılabildiği çizgi grafik gibi grafikleri kolayca işlemenizi sağlar. Verileriniz her zaman belirtilmemiş olsa bile x eksenini otomatik olarak düzgün aralıklı tutar. İşleme deyimi kullanılmazsa, varsayılan olarak olur table
.
Örnek dönem başına kullanıcı sayısı sorgu sonuçları
Dönem başına etkinlik
Bu örnekte, son 14 günün günlük konuşma, iletişim kutusu veya ileti sayısı gibi istenen boyuta göre etkinlik hacminin nasıl ölçüldiği gösterilmektedir. ve değişkenlerine querystartdate
queryEndDate
interval
farklı değerler atanarak zaman aralığı kolayca değiştirilebilir. İstenen boyut aşağıdaki örnekteki extend
yan tümcesi tarafından tanımlanır; metric
InstanceId, DialogId veya activityId olarak ayarlanabilir.
Görüntülemek istediğiniz boyuta ölçüm atayın:
- InstanceId , Konuşma sayısını ölçer
- DialogId , İletişim Kutularının sayısını ölçer
- ActivityId , İleti sayısını ölçer
// 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
İpucu
Kusto extend işleci hesaplanmış sütunlar oluşturmak ve bunları sonuç kümesine eklemek için kullanılır.
Dönem başına örnek etkinlik sorgu sonuçları
Dönem başına kullanıcı başına etkinlik
Bu örnekte, dönem başına kullanıcı başına etkinlik sayısını sayma gösterilmektedir. Bu sorgu, dönem başına etkinlik sorgusunda detaya gidip dönem başına kullanıcı başına etkinliğe odaklanır. Etkinlikler arasında iletişim kutuları, konuşmalar veya iletiler bulunur. Bu sorgu botunuzla kullanıcı etkileşimini ölçer ve bu da aşağıdakiler gibi olası sorunların bulunmasına yardımcı olabilir:
- Tek bir kullanıcının çok fazla etkinliği olan günler bir saldırı veya test anlamına gelebilir
- Çok az etkileşimin olduğu günler hizmet durumu sorunlarını gösterebilir
İpucu
Zaman ve iletişim kutuları, iletiler veya konuşmalarda özetlenebilen genel bot etkinlik hacmini almak için user_Id ile kaldırabilirsiniz.
// 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
Kullanıcı başına dönem başına örnek etkinlik sorgu sonuçları
user_Id | Zaman damgası | Sayı |
---|---|---|
User-8107ffd2 | 2019-09-03T00:00:00Z | 14 |
Kullanıcı-75f2cc8f | 2019-08-30T00:00:00Z | 13 |
Kullanıcı-75f2cc8d | 2019-09-03T00:00:00Z | 13 |
Kullanıcı-3060aada | 2019-09-03T00:00:00Z | 10 |
İletişim kutusu tamamlama
Bir iletişim kutusu için telemetri istemcisini ayarladıktan sonra, iletişim kutusu (ve alt öğeleri) başlatılan ve tamamlanan gibi bazı varsayılan telemetri verilerini yayar. Bu örnek, tamamlanan iletişim kutularını başlatılan iletişim kutularına göre ölçmek için kullanılabilir. Başlatılan iletişim kutusu sayısı tamamlanan sayıdan büyükse, kullanıcılarınızdan bazıları iletişim kutusu akışını tamamlamaz. Olası iletişim kutusu mantığını belirlemenize ve sorunlarını gidermenize yardımcı olması için bu sorguyu kullanabilirsiniz. En sık kullanılan iletişim kutularını belirlemek için de kullanılabilir.
İpucu
Botunuzu Copilot Studio veya Composer gibi araçları kullanarak oluşturuyorsanız, her sorgunun uyarlamalı iletişim kutusu sürümünü kullanmak istersiniz.
Şelale iletişim kutusu tamamlama
// % 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)
İpucu
Kusto join işleci , her tablodan belirtilen sütunların değerlerini eşleştirerek yeni bir tablo oluşturmak üzere iki tablonun satırlarını birleştirmek için kullanılır.
Proje işleci , çıkışınızda gösterilmesini istediğiniz alanları seçmek için kullanılır. extend operator
Yeni alan ekleyene benzer şekilde, project operator
mevcut alan kümesinden birini seçebilir veya yeni bir alan ekleyebilirsiniz.
Başlatılıp tamamlanan uyarlamalı iletişim kutuları
// % 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)
Örnek iletişim kutusu tamamlama sorgusu sonuçları
İletişim kutusu uyumsuzluk
Bu örnek, belirtilen süre boyunca iptal veya bırakma nedeniyle başlatılan ancak hiç tamamlanmamış iletişim kutusu akışlarının sayısını saymak için kullanılabilir. Tamamlanmamış iletişim kutularını gözden geçirmek ve kullanıcı karışıklığı nedeniyle etkin olarak iptal edilip edilmediğini veya kullanıcı dikkatiniz dağılması veya ilgi kaybı nedeniyle terk edilip edilmediğini incelemek için kullanabilirsiniz.
Şelale iletişim kutuları tamamlanmadı
// 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
Uyarlamalı iletişim kutuları tamamlanmadı
// 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
İpucu
Kusto order işleci (ile aynı sort operator
) giriş tablosunun satırlarını bir veya daha fazla sütuna göre sıralamak için kullanılır. Not: Null değerleri herhangi bir sorgunun sonuçlarından dışlamak istiyorsanız, bunları deyiminizde where
filtreleyebilir, örneğin "and isnotnull(Timestamp)" ekleyebilir veya başında veya sonunda null değerler döndürebilir, order deyiminin sonuna veya nulls first
öğesini ekleyebilirsiniznulls first
.
Örnek iletişim kutusu uyumsuzluk sorgusu sonuçları
İletişim Kutusu Dizisi Detaya Gitme
Konuşmadaki iletişim kutusu için şelale başlatma/adım/tamamlama
Bu örnekte, hangi adımların iletişim kutusunun kesintiye neden olduğunu belirlemede yararlı olabilecek, konuşmaya (instanceId) göre gruplandırılmış iletişim kutusu adımları dizisi gösterilmektedir.
Bu sorguyu çalıştırın, SampleDialogId yerine <istenen DialogId
değeri girin>
// 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>")
İpucu
Bu sorgu, tek bir sorgu kapsamında tanımlanan ve kullanılan ve let deyimi aracılığıyla tanımlanan kullanıcı tanımlı bir işlev olan sorgu tanımlı bir işlev kullanılarak yazılmıştır. Bu sorgu, kullanımı query-defined function
olmadan yazılmıştır:
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
Örnek sorgu sonuçları
timestamp | Adı | StepName | InstanceId |
---|---|---|---|
2019-08-23T20:04... | Şelale Başlangıcı | boş | ... 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 | boş | ... 79c0f03d8701 |
2019-08-28T23:35... | Şelale Başlangıcı | boş | ... 6ac8b3211b99 |
2019-08-28T23:35... | WaterfallStep 2 | GetPointOfInterestLocations | ... 6ac8b3211b99 |
2019-08-28T19:41... | Şelale Başlangıcı | boş | ... 8137d76a5cbb |
2019-08-28T19:41... | WaterfallStep 2 | GetPointOfInterestLocations | ... 8137d76a5cbb |
2019-08-28T19:41... | Şelale Başlangıcı | boş | ... 8137d76a5cbb |
1 Tamamlandı
2 Terk Edildi
Yorumlama: Kullanıcılar GetPointOfInterestLocations adımında konuşmayı bırakıyor gibi görünüyor.
Not
Şelale iletişim kutuları bir sıra yürütür (başlangıç, birden çok adım, tamamlandı). Bir dizi tam olmayan bir başlangıç gösteriyorsa, iletişim kutusu kullanıcının iletişim kutusunu bırakması veya iptal etme nedeniyle kesildiği anlamına gelir. Bu ayrıntılı çözümlemede, bu davranışı görebilirsiniz (bkz. tamamlanan ve bırakılan adımlar).
Şelale başlangıç/adım/tamamlama/iptal adımları toplam toplamları
Bu örnekte, bir iletişim dizisinin başlatıldığı toplam toplam sayı, birleştirilmiş toplam şelale adımı sayısı, kaç adet başarıyla tamamlandığı, kaç adet iptal edildiği ve WaterfallStart ile birleştirilmiş WaterfallComplete artı WaterfallCancel arasındaki fark, bırakılan toplam sayıyı verir.
// 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>")
Örnek şelale-toplama sorgu sonuçları
ad | count |
---|---|
Şelale Başlangıcı | 21 |
WaterfallStep | 47 |
WaterfallComplete | 11 |
WaterfallCancel | 1 |
Yorumlama: İletişim dizisinin 21 çağrısının yalnızca 11'i tamamlandı, 9'u bırakıldı ve biri kullanıcı tarafından iptal edildi.
İletişim kutusunda ortalama süre
Bu örnek, kullanıcıların belirli bir iletişim kutusunda harcadığı ortalama süreyi ölçer. Botunuzun tamamlanması uzun süren iletişim kutularını basitleştirmenin avantajı olabilir.
// 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")
Örnek ortalama süre sorgu sonuçları
İletişim kutusundaki ortalama adımlar
Bu örnek, çağrılan her iletişim kutusunun ortalama, min, max ve standart sapmaya göre hesaplanan "uzunluğunu" gösterir. Bu, iletişim kutusu kalitesini analiz etmede yardımcı olabilir. Örneğin:
- Basitleştirme fırsatları için çok fazla adım içeren iletişim kutuları değerlendirilmelidir.
- Min/max/average arasında geniş bir boşluk olan iletişim kutuları, kullanıcıların görevleri tamamlamaya çalışırken durdurulabileceği anlamına gelebilir. Görevleri tamamlamak için daha kısa yollar bulunma olasılığını veya iletişim kutusu karmaşıklığını azaltmanın yollarını değerlendirmeniz gerekebilir.
- Büyük bir standart sapması olan iletişim kutuları karmaşık yollar veya bozuk deneyim (bırakma/iptal etme) önerir.
- Birkaç adım içeren iletişim kutuları hiç tamamlanmadıkları için böyle olabilir. Tamamlanma/bırakma oranlarının analiz edilmesi, bu belirlemenin yapılmasına yardımcı olabilir.
// 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
Örnek ortalama adım sorgu sonuçları
İletişim Kutusu Kimliği | ort adımları | en düşük adımlar | en fazla adım | std | adımlara göre ortalama kısa | yüzde ortalama kısa |
---|---|---|---|---|---|---|
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% |
ekleme | 2.7 | 2 | 4 | 0.94 | 1.3 | 32.5% |
__Interpretation: Örneğin, FindArticlesDialog min/max arasında geniş bir yayılıma sahiptir ve araştırılması ve muhtemelen yeniden tasarlanması ve iyileştirilmiş olması gerekir.
Etkinlik ölçümüne göre kanal etkinliği
Bu örnek, botunuzun belirli bir dönemde kanal başına aldığı etkinlik miktarını ölçer. Bunu aşağıdaki ölçümlerden herhangi birini sayarak yapar: gelen iletiler, kullanıcılar, konuşmalar veya iletişim kutuları. Bu, hizmet durumu analizi veya kanalların popülerliğini ölçmek için yararlı olabilir.
// 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
İpucu
Şu çeşitlemeleri denemeyi düşünebilirsiniz:
- Sorguyu zaman damgası demeti olmadan çalıştırın:
bin(timestamp, groupByInterval)
. - Ayrıca, farklı kullanıcılar ve
count
tüm kullanıcı etkinliği etkinlikleri için de kullanabilirsinizdcount
. Bu, yinelenen kullanıcılar için de çalışır.
Etkinliğe göre kanal etkinliği sorgu sonuçları örneği
Yorum: Öykünücü testi eskiden en popülerdi ancak canlı yayına geçtikten sonra DirectLineSpeech en popüler kanaldır.
Popülerliğe göre Toplam Amaçlar
Bu örnek LUIS özellikli botlar için geçerlidir. Popülerliğe ve ilgili amaç algılama kesinlik puanına göre tüm amaçların özetini gösterir.
Not
Language Understanding (LUIS) 1 Ekim 2025'te kullanımdan kaldırılacaktır. 1 Nisan 2023'e kadar yeni LUIS kaynakları oluşturamayacaksınız. Dil anlamanın daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir.
Azure AI Dili'nin bir özelliği olan konuşma dili anlama (CLU), LUIS'in güncelleştirilmiş sürümüdür. Bot Framework SDK'sında dil anlama desteği hakkında daha fazla bilgi için bkz . Doğal dil anlama.
- Uygulamada, görünüm her ölçüm için ayrılmalıdır.
- Popüler amaç yolları, kullanıcı deneyimi için iyileştirilmelidir.
- Düşük ortalama puanlar düşük tanımayı ve olası eksik gerçek kullanıcı amacını gösterir.
// 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")
Popülerlik açısından örnek amaçlar sorgu sonuçları
Yorumlama: Örneğin en popüler amaç, yalnızca ortalama %23 güvenilirlikle algılandığından emin olun.
İpucu
Barchart'lar Kusto sorgularıyla kullanılabilen bir düzineden fazla seçenekten biridir. Diğer seçeneklerden bazıları şunlardır: anomali çizelgesi, alan çizelgesi, sütun çizelgesi, çizgi çizelgesi, dağılım çizelgesi. Daha fazla bilgi için işleme işleci konusuna bakın.
Bot Analytics İzleme Şeması
Aşağıdaki tablolarda, botunuzun telemetri verilerini günlüğe kaydedeceği en yaygın alanlar gösterilmektedir.
Genel Zarf
Application Insights izlemesindeki yaygın günlük analizi alanları.
Alan | Açıklama | Örnek Değerler |
---|---|---|
Adı | İleti türü | 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 | Olay zamanı | 2019-09-05T18:32:45.287082Z |
instance_Id | Konuşma kimliği | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | Kimliği Aç | 084b2856947e3844a5a18a8476d99a |
user_Id | Benzersiz kanal kullanıcı kimliği | öykünücü7c259c8e-2f47... |
client_IP | İstemci ip adresi | 127.0.0.1 (gizlilik bloğu nedeniyle eksik olabilir) |
client_City | İstemci şehir | Redmond (algılanırsa, eksik olabilir) |
Not
Azure Yapay Zeka Soru-Cevap Oluşturma 31 Mart 2025 tarihinde kullanımdan kaldırılacaktır. 1 Ekim 2022 tarihinden itibaren yeni QnA Maker kaynakları veya bilgi bankası makaleleri oluşturamazsınız. Soru ve yanıtlama özelliğinin daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir.
Azure AI Dili'nin bir özelliği olan özel soru yanıtlama, Soru-Cevap Oluşturma hizmetinin güncelleştirilmiş sürümüdür. Bot Framework SDK'sında soru-cevap desteği hakkında daha fazla bilgi için bkz . Doğal dil anlama.
Not
Language Understanding (LUIS) 1 Ekim 2025'te kullanımdan kaldırılacaktır. 1 Nisan 2023'e kadar yeni LUIS kaynakları oluşturamayacaksınız. Dil anlamanın daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir.
Azure AI Dili'nin bir özelliği olan konuşma dili anlama (CLU), LUIS'in güncelleştirilmiş sürümüdür. Bot Framework SDK'sında dil anlama desteği hakkında daha fazla bilgi için bkz . Doğal dil anlama.
Özel Boyutlar
Bota özgü etkinlik verilerinin çoğu customDimensions alanında depolanır.
Alan | Açıklama | Örnek Değerler |
---|---|---|
activityId | İleti Kimliği | <kimlik>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | İleti türü | message, conversationUpdate, event, invoke |
channelId | Kanal tanımlayıcısı | emülatör, directline, msteams, webchat |
fromId | From Tanımlayıcısı | <id> |
fromName | İstemciden kullanıcı adı | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
locale | İstemci başlangıç yerel ayarı | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Alıcı tanımlayıcısı | <id> |
recipientName | Alıcı adı | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
text | Mesajda metin | bir kafe bulma |
Özel Boyutlar: LUIS
Not
Language Understanding (LUIS) 1 Ekim 2025'te kullanımdan kaldırılacaktır. 1 Nisan 2023'e kadar yeni LUIS kaynakları oluşturamayacaksınız. Dil anlamanın daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir.
Azure AI Dili'nin bir özelliği olan konuşma dili anlama (CLU), LUIS'in güncelleştirilmiş sürümüdür. Bot Framework SDK'sında dil anlama desteği hakkında daha fazla bilgi için bkz . Doğal dil anlama.
LUIS izlemesi, verilerini aşağıdaki Özel Boyutlar alanlarında depolar.
Alan | Açıklama | Örnek Değerler |
---|---|---|
amaç | LUIS algılanan amaç | pointOfInterestSkill |
intentScore | LUIS tanıma puanı | 0.98 |
Varlıklar | LUIS algılanan varlıklar | FoodOfGrocery = [["coffee"]], KEYWORD= ["coffee shop"] |
Soru | LUIS algılanan soru | bir kafe bulma |
sentimentLabel | LUIS yaklaşım algılandı | pozitif |
Özel Boyutlar: Soru-Cevap Oluşturma
Not
Azure Yapay Zeka Soru-Cevap Oluşturma 31 Mart 2025 tarihinde kullanımdan kaldırılacaktır. 1 Ekim 2022 tarihinden itibaren yeni QnA Maker kaynakları veya bilgi bankası makaleleri oluşturamazsınız. Soru ve yanıtlama özelliğinin daha yeni bir sürümü artık Azure AI Dili'nin bir parçası olarak kullanılabilir.
Azure AI Dili'nin bir özelliği olan özel soru yanıtlama, Soru-Cevap Oluşturma hizmetinin güncelleştirilmiş sürümüdür. Bot Framework SDK'sında soru-cevap desteği hakkında daha fazla bilgi için bkz . Doğal dil anlama.
QnAMaker izlemesi, verilerini aşağıdaki Özel Boyutlar alanlarında depolar.
İpucu
Sorular ve yanıtlar gibi kişisel bilgilerin günlüğe kaydedilmesini etkinleştirmek için günlük kişisel bilgileri parametresi Soru-Cevap Oluşturma sınıfının oluşturucusunda true olarak ayarlanmalıdır.
Alan | Açıklama | Örnek Değerler |
---|---|---|
sorusu | Soru-Cevap algılanan soru | Ne yapabilirsin? |
yanıt | Soru-Cevap yanıtı | Senin soruların var, benim de yanıtlarım var. |
articleFound | Soru-Cevap | true |
questionId | Soru-Cevap soru kimliği | 488 |
knowledgeBaseId | Soru-Cevap KB Kimliği | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Eşleşen soru dizisi | ["Bana rolünüzün ne olduğunu açıklayabilir misiniz?","Biraz kendinden bahsedebilir misin?","Bana kendinden bahsedebilir misin?","bana yardım edebilir misin","hmmm ne yapabilirsin?","bana nasıl yardımcı olabilirsin","Bana nasıl yardımcı olabilirsin?","Nasıl yardımcı olabilirsin?","Nasıl yardımcı olabilirsin?","Bu yüzden seni projelerimde nasıl kullanabilirim?", "Yeteneğin hakkında benimle konuş","Neler yapabiliyorsun?", ...] |
Ayrıca bkz:
- Günlük sorguları yazma öğreticisi için bkz . Azure İzleyici'de günlük sorgularını kullanmaya başlama
- Azure İzleyici’den verileri görselleştirme
- Botunuza telemetri eklemeyi öğrenin
- Azure İzleyici günlük sorguları hakkında daha fazla bilgi edinin
- Bot Framework Application Insights Olaylarının tam listesi
- Log Analytics verilerinden pano oluşturma ve paylaşma