Анализ данных телеметрии бота
ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4
Анализ поведения бота
Анализировать поведение бота можно с помощью указанной ниже коллекции запросов. Вы можете использовать коллекцию для создания пользовательских запросов в Azure Monitor Log Analytics и создания панелей мониторинга и визуализации Power BI .
Необходимые компоненты
Полезно иметь базовое представление о следующих понятиях:
- запросы Kusto;
- создание запросов к журналам Azure Monitor с помощью Log Analytics на портале Azure;
- основные принципы запросов к журналам в Azure Monitor.
Совет
Если вы создаете бот с помощью таких средств, как Power Virtual Agent или Composer, вы хотите использовать адаптивную версию диалогового окна каждого запроса при наличии.
Панели мониторинга
Панели мониторинга Azure позволяют с удобством просматривать и предоставлять другим сведения, полученные на основе ваших запросов. Вы можете создавать настраиваемые панели мониторинга, чтобы отслеживать работу ботов, сопоставляя запросы с плитками на панели мониторинга. Дополнительные сведения о панелях мониторинга и сопоставлении запросов с ними см. в статье о создании панелей мониторинга данных Log Analytics и предоставлении к ним общего доступа. Далее в этой статье представлены примеры запросов, которые будут полезны для мониторинга поведения бота.
Примеры запросов Kusto
Примечание.
Рекомендуется использовать различные измерения, такие как период, канал и языковой стандарт для всех запросов в этой статье.
Число пользователей за период
В этом примере создается график по данным о том, сколько уникальных пользователей обращалось к вашему боту за последние 14 дней. Период можно легко изменить, присвоив другие значения переменным queryStartDate
, queryEndDate
и interval
.
Важно!
Вы получите только правильное количество уникальных пользователей в этом запросе, если они прошли проверку подлинности, а результаты также могут зависеть от возможностей канала.
// 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
Совет
Оператор summarize в Kusto позволяет создать таблицу со статистическими сведениями по содержимому входной таблицы.
Скалярная функция Bin в Kusto, когда она используется в сочетании с summarize operator
, позволяет сгруппировать результаты запроса по указанному значению. В приведенном выше примере группировка выполнена по дням. Кроме этого, Kusto принимает значение h = часы, m = минуты, s = секунды, ms = миллисекунды, microsecond = микросекунды.
Оператор Render позволяет легко визуализировать диаграммы, например график timechart, в котором ось x представляет значение DateTime, а для оси y можно указать любой другой числовой столбец. Он автоматически поддерживает эффективное распределение значений по оси x, даже если данные есть не за все периоды. Если оператор render не указан, по умолчанию используется table
.
Выборка результатов запроса по количеству пользователей за период
Активность по периодам
В этом примере показано, как измерять объем действий на требуемое измерение, например количество бесед, диалогов или сообщений в день за последние 14 дней. Период можно легко изменить, присвоив другие значения переменным querystartdate
, queryEndDate
и interval
. Требуемое измерение определяется предложением extend
в следующем примере, metric
можно задать значение InstanceId, DialogId или activityId.
Присвойте параметру metric значение того измерения, которое вы намерены отображать.
- InstanceId позволяет измерить количество бесед;
- DialogId позволяет измерить количество диалогов;
- ActivityId позволяет измерить количество сообщений.
// 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
Совет
Оператор Kusto Extend позволяет создавать вычисляемые столбцы и добавлять их к результирующему набору.
Пример результатов запроса на период действия
Активность по пользователям по периодам
В этом примере показано, как подсчитать количество действий на одного пользователя за период. Этот запрос детализирует действие за период , чтобы сосредоточиться на действии на пользователя в течение периода. К действиям относятся диалоги, беседы или сообщения. Этот запрос измеряет взаимодействие пользователей с ботом, что может помочь найти потенциальные проблемы, такие как:
- Дни с большим количеством действий одним пользователем могут означать атаку или тестирование
- дни с низком уровнем взаимодействия могут указывать на проблемы с работоспособностью службы.
Совет
Удалив строку by user_Id, вы получите общий объем действий бота, который можно сводить по времени и диалогам, сообщениям или беседам.
// 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
Пример результатов запроса на пользователя на период
user_Id | timestamp | Численность |
---|---|---|
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 |
Завершение диалогов
Когда вы настроите клиент телеметрии для некоторого диалога, этот диалог и его дочерние элементы будут передавать некоторые данные телеметрии по умолчанию, например started и completed. Этот пример можно использовать для сравнения количества завершенных (completed) и начатых (started) диалогов. Если число запущенных диалогов больше числа завершено, некоторые из пользователей не выполняют поток диалогов. Этот запрос можно использовать для выявления и устранения неполадок любой потенциальной логики диалога. Его также можно использовать для определения наиболее часто используемых диалогов.
Совет
Если вы создаете бот с помощью таких средств, как Power Virtual Agent или Composer, вы хотите использовать адаптивную версию диалогового окна каждого запроса.
Завершение каскадного диалога
// % 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)
Совет
Оператор join в Kusto позволяет объединить строки двух таблиц для формирования новой таблицы путем сопоставления значений указанных столбцов каждой таблицы.
Оператор project используется для выбора полей, которые должны отображаться в выходных данных. Как и extend operator
, который отвечает за добавление нового поля, оператор project operator
позволяет выбрать поле из набора существующих или добавить новое.
Адаптивные диалоги, запущенные и завершенные
// % 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)
Пример результатов запроса завершения диалогового окна
Незавершение диалога
Этот пример можно использовать для подсчета запущенных в течение указанного периода потоков диалогов, которые не были завершены из-за отмены или прекращения действий. Его можно использовать для просмотра неполных диалогов и проверки того, были ли они активно отменены из-за путаницы пользователя или отказа из-за отвлекающего или потери интереса пользователя.
Каскадные диалоги не завершены
// 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
Адаптивные диалоги не завершены
// 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
Совет
Оператор order в Kusto (аналогичен sort operator
) сортирует строки входной таблицы в порядке значений одного или нескольких столбцов. Примечание. Если вы хотите исключить значения NULL из результатов любого запроса, их можно отфильтровать в инструкции where
, например добавить "and isotnull(Timestamp)" или возвращать значения NULL в начале или конце, добавить nulls first
или nulls first
в конец инструкции заказа.
Пример результатов запроса диалогового окна
Детализация последовательности диалога
Просмотр начала, шагов и завершения для каскадных диалогов в беседе
В этом примере показана последовательность шагов диалога, сгруппированных по беседе (instanceId), которая может оказаться полезной при определении того, какие шаги приводят к прерыванию диалога.
Выполните этот запрос, введите значение требуемого DialogId
<вместо 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>")
Совет
Запрос был написан с использованием определяемой запросом функции. Это функция, которая определяется пользователем с помощью оператора let и используется в пределах одного запроса. Этот пример можно переписать и без 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
Результаты выполнения примера запроса
TIMESTAMP | name | StepName | InstanceId |
---|---|---|---|
2019-08-23T20:04... | WaterfallStart | null | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | GetPointOfInterestLocations | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | ProcessPointOfInterestSelection | ...79c0f03d8701 |
2019-08-23T20:04... | WaterfallStep | GetRoutesToDestination | ...79c0f03d8701 |
2019-08-23T20:05... | WaterfallStep | ResponseToStartRoutePrompt | ...79c0f03d8701 |
2019-08-23T20:05... | WaterfallComplete 1 | null | ...79c0f03d8701 |
2019-08-28T23:35... | WaterfallStart | null | ...6ac8b3211b99 |
2019-08-28T23:35... | WaterfallStep 2 | GetPointOfInterestLocations | ...6ac8b3211b99 |
2019-08-28T19:41... | WaterfallStart | null | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStep 2 | GetPointOfInterestLocations | ...8137d76a5cbb |
2019-08-28T19:41... | WaterfallStart | null | ...8137d76a5cbb |
1Завершено
2заброшено
Интерпретация: пользователи, кажется, отказываются от беседы на шаге GetPointOfInterestLocations.
Примечание.
Каскадные диалоги выполняют последовательность (начало, несколько шагов, завершение). Если для последовательности отображается начало, но нет завершения, значит, диалог был прерван из-за отмены пользователем или прекращения действий. В этом подробном анализе можно увидеть это поведение (см. завершенные и заброшенные шаги).
Агрегированные результаты для шагов каскадного диалога (начало, шаг, завершение, отмена)
Этот пример демонстрирует статистические итоги: общее количество запусков последовательности диалога, общее количество каскадных шагов, количество успешно выполненных и количество отмен. Разность значения WaterfallStart и суммы значений WaterfallComplete и WaterfallCancel обозначает общее число отмененных диалогов.
// 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>")
Пример результатов каскадного агрегирования запросов
name | count |
---|---|
WaterfallStart | 21 |
WaterfallStep | 47 |
WaterfallComplete | 11 |
WaterfallCancel | 1 |
Интерпретация: из 21 вызовов последовательности диалогов только 11 завершилось, 9 были отменены, а один был отменен пользователем.
Средняя продолжительность диалога
В этом примере оценивается среднее время, затрачиваемое пользователями на определенный диалог. Бот может воспользоваться упрощением диалоговых окон, которые занимает много времени.
// 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")
Пример результатов запроса средней длительности
Среднее число шагов в диалоге
В этом примере показано, как длина каждого вызываемого диалогового окна вычисляется по среднему, минимальному, максимальному и стандартному отклонению. Это помогает анализировать качество диалогов. Например:
- Диалоги с слишком большим количеством шагов должны оцениваться для упрощения возможностей.
- Большая разница между минимальным, максимальным и (или) средним числом шагов может означать, что пользователи путаются или теряются при выполнении задач. Возможно, для таких задач стоит сократить длину путей или снизить сложность диалога.
- Диалоги с большим стандартным отклонением предлагают сложные пути или сломанный интерфейс (отказ или отмена).
- Диалоги с несколькими шагами могут быть так, потому что они никогда не были завершены. Сравнение долей завершенных и прекращенных диалогов поможет понять, так ли это.
// 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
Пример результатов запроса средних шагов
Идентификатор диалогового окна | среднее число шагов | минимальное число шагов | максимальное число шагов | стандарт | среднее сокращение по шагам | средняя сокращение в процентах |
---|---|---|---|---|---|---|
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 % |
Подключение | 2.7 | 2 | 4 | 0.94 | 1,3 | 32,5 % |
__Interpretation. Например, FindArticlesDialog имеет широкий диапазон между минимальной или максимальной и должен быть расследован и, возможно, изменен и оптимизирован.
Активность канала по метрике действия
В этом примере оценивается количество действий, которые бот получает от каждого канала за определенный период. Для этого он подсчитывает любую из следующих метрик: входящие сообщений, пользователи, беседы или диалоги. Это может быть полезно для анализа работоспособности служб и (или) оценки популярности каналов.
// 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
Совет
Вы можете попробовать следующие варианты:
- Выполните запрос без сегментирования меток времени:
bin(timestamp, groupByInterval)
- Вы также можете использовать
dcount
для отдельных пользователей иcount
для всех действий событий пользователя. Этот запрос удобен и для повторных пользователей.
Пример результатов запроса канала по активности
Интерпретация: тестирование эмулятора использовалось для наиболее популярных, но когда-то мы пошли жить, DirectLineSpeech, является самым популярным каналом.
Общее намерение по популярности
Этот пример применяется к ботам с поддержкой LUIS. Он отображает сводку по всем намерениям с сортировкой по популярности и оценками уверенности в определении этих намерений.
Примечание.
Распознавание речи (LUIS) будет прекращен 1 октября 2025 года. Начиная с 1 апреля 2023 года вы не сможете создавать новые ресурсы LUIS. Новая версия распознавания речи теперь доступна как часть языка ИИ Azure.
Распознавание речи (CLU) — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
- На практике представление должно быть разделено для каждой метрики.
- Более популярные пути намерений можно оптимизировать для улучшения взаимодействия с пользователем.
- Низкие средние показатели могут означать плохое определение намерений или низкую востребованность.
// 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")
Пример результатов запросов по популярности
Интерпретация: например, наиболее популярное намерение, подтверждение обнаруживается только с 23% достоверности в среднем.
Совет
Линейчатые диаграммы (barchart) — один из нескольких десятков вариантов, доступных для запросов Kusto. Вы также можете использовать anomalychart (диаграмма аномалий), areachart (диаграмма зона), columnchart (диаграмма столбцов), linechart (график), scatterchart (точечная диаграмма). Дополнительные сведения см. в разделе оператора отрисовки .
Схема инструментирования аналитики бота
В следующих таблицах показаны наиболее распространенные поля, в которые бот может записывать данные телеметрии.
Общая огибающая
Типичные поля анализа журналов при инструментировании Application Insights.
Поле | Description | Примеры значений |
---|---|---|
name | Тип сообщения | BotMessageSend, BotMessageReceived, LuisResult, WaterfallStep, WaterfallStart, SkillWebSocketProcessRequestLatency, SkillWebSocketOpenCloseLatency, WaterfallComplete, QnaMessage, WaterfallCancel, SkillWebSocketTurnLatency, AuthPromptValidatorAsyncFailure |
customDimensions | Пакет средств разработки аналитики бота | activityId=<id>, activityType=message, channelId=emulator, fromId=<id>, fromName=User, locale=en-us, recipientId=<id>, recipientName=Bot, text=find a coffee shop |
TIMESTAMP | Время события | 2019-09-05T18:32:45.287082Z |
instance_Id | ИД беседы | f7b2c416-a680-4b2c-b4cc-79c0f03d8711 |
operation_Id | Идентификатор поворота | 084b2856947e3844a5a18a8476d99aaa |
user_Id | Уникальный идентификатор пользователя канала | emulator7c259c8e-2f47... |
client_IP | IP-адрес клиента | 127.0.0.1 (может отсутствовать в связи с блокировкой конфиденциальности) |
client_City | Город клиента | Редмонд (если обнаружен, но может отсутствовать) |
Примечание.
Azure AI QnA Maker будет прекращен 31 марта 2025 г. С 1 октября 2022 г. вы не сможете создавать новые ресурсы или базы знаний QnA Maker. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure.
Пользовательский ответ на вопросы, компонент языка искусственного интеллекта Azure, — это обновленная версия службы QnA Maker. Дополнительные сведения о поддержке вопросов и ответов в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
Примечание.
Распознавание речи (LUIS) будет прекращен 1 октября 2025 года. Начиная с 1 апреля 2023 года вы не сможете создавать новые ресурсы LUIS. Новая версия распознавания речи теперь доступна как часть языка ИИ Azure.
Распознавание речи (CLU) — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
Пользовательские измерения
Большинство данных о действиях для конкретного бота хранится в поле customDimensions.
Поле | Description | Примеры значений |
---|---|---|
activityId | Идентификатор сообщения | <id>: 8da6d750-d00b-11e9-80e0-c14234b3bc2a |
activityType | Тип сообщения | message, conversationUpdate, event, invoke |
channelId | Идентификатор канала | emulator, directline, msteams, webchat |
fromId | Идентификатор from | <id> |
fromName | Имя пользователя from клиента | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
locale | Региональный стандарт клиента | en-us, zh-cn, en-GB, de-de, zh-CN |
recipientId | Идентификатор получателя | <id> |
recipientName | Имя получателя. | John Bonham, Keith Moon, Steve Smith, Steve Gadd |
text | Текст в сообщении | find a coffee shop |
Пользовательские измерения: LUIS
Примечание.
Распознавание речи (LUIS) будет прекращен 1 октября 2025 года. Начиная с 1 апреля 2023 года вы не сможете создавать новые ресурсы LUIS. Новая версия распознавания речи теперь доступна как часть языка ИИ Azure.
Распознавание речи (CLU) — это обновленная версия LUIS. Дополнительные сведения о поддержке распознавания речи в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
При инструментировании LUIS данные сохраняются в следующих полях пользовательских измерений.
Поле | Description | Примеры значений |
---|---|---|
намерение | Обнаруженное намерение LUIS | pointOfInterestSkill |
intentScore | Оценка распознавания LUIS | 0,98 |
Сущности | Обнаруженные сущности LUIS | FoodOfGrocery = [["coffee"]], KEYWORD= ["coffee shop"] |
Вопрос | Обнаруженный вопрос LUIS | find a coffee shop |
sentimentLabel | Обнаруженная тональность LUIS | позитивная тональность |
Пользовательские измерения: QnAMaker
Примечание.
Azure AI QnA Maker будет прекращен 31 марта 2025 г. С 1 октября 2022 г. вы не сможете создавать новые ресурсы или базы знаний QnA Maker. Новая версия вопроса и возможности ответа теперь доступна как часть языка искусственного интеллекта Azure.
Пользовательский ответ на вопросы, компонент языка искусственного интеллекта Azure, — это обновленная версия службы QnA Maker. Дополнительные сведения о поддержке вопросов и ответов в пакете SDK Bot Framework см. в разделе "Распознавание естественного языка".
При инструментировании QnAMaker данные сохраняются в следующих полях пользовательских измерений.
Совет
Чтобы включить ведение журнала персональных данных, таких как вопросы и ответы, параметр личной информации журнала должен иметь значение true в конструкторе класса QnA Maker .
Поле | Description | Примеры значений |
---|---|---|
question | Обнаруженный вопрос QnA | what can you do? |
answer | Ответ QnA | You have questions, I may have answers. |
articleFound | QnA | true |
questionId | Идентификатор вопроса QnA | 488 |
knowledgeBaseId | Идентификатор КБ QnA | 2a4936f3-b2c8-44ff-b21f-67bc413b9727 |
matchedQuestion | Массив подходящих вопросов | [Вы можете объяснить мне, что такое ваша роль?", "Можете ли вы немного рассказать мне о себе?", "Можете ли вы рассказать мне о себе?", "можете ли вы помочь мне", "hmmm так что вы можете сделать?", "как вы можете помочь мне", "Как вы можете помочь мне?", "Как вы можете помочь?", "Как можно использовать вас в моих проектах?", "Поговорите со мной о вашей возможности", "Что вы способны?", ...] |
См. также
- Инструкции по написанию запросов к журналам Azure Monitor см. в этой статье.
- Визуализация данных из Azure Monitor
- Узнайте, как добавить телеметрию в бота.
- Ознакомьтесь с дополнительными сведениями о запросах по журналам в Azure Monitor.
- Полный список событий Аналитика приложений Bot Framework
- Создание панелей мониторинга данных Log Analytics и предоставление общего доступа к ним