Анализ данных телеметрии бота

ОБЛАСТЬ ПРИМЕНЕНИЯ: ПАКЕТ SDK версии 4

Анализ поведения бота

Анализировать поведение бота можно с помощью указанной ниже коллекции запросов. Вы можете использовать коллекцию для создания пользовательских запросов в Azure Monitor Log Analytics и создания панелей мониторинга и визуализации Power BI .

Необходимые компоненты

Полезно иметь базовое представление о следующих понятиях:

Совет

Если вы создаете бот с помощью таких средств, как 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.

Выборка результатов запроса по количеству пользователей за период

Sample chart of number of users per period.

Активность по периодам

В этом примере показано, как измерять объем действий на требуемое измерение, например количество бесед, диалогов или сообщений в день за последние 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 позволяет создавать вычисляемые столбцы и добавлять их к результирующему набору.

Пример результатов запроса на период действия

Sample chart of activity per period.

Активность по пользователям по периодам

В этом примере показано, как подсчитать количество действий на одного пользователя за период. Этот запрос детализирует действие за период , чтобы сосредоточиться на действии на пользователя в течение периода. К действиям относятся диалоги, беседы или сообщения. Этот запрос измеряет взаимодействие пользователей с ботом, что может помочь найти потенциальные проблемы, такие как:

  • Дни с большим количеством действий одним пользователем могут означать атаку или тестирование
  • дни с низком уровнем взаимодействия могут указывать на проблемы с работоспособностью службы.

Совет

Удалив строку 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)

Пример результатов запроса завершения диалогового окна

Sample chart of dialogs started and dialogs completed.

Незавершение диалога

Этот пример можно использовать для подсчета запущенных в течение указанного периода потоков диалогов, которые не были завершены из-за отмены или прекращения действий. Его можно использовать для просмотра неполных диалогов и проверки того, были ли они активно отменены из-за путаницы пользователя или отказа из-за отвлекающего или потери интереса пользователя.

Каскадные диалоги не завершены

// 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 в конец инструкции заказа.

Пример результатов запроса диалогового окна

Sample summary chart for incomplete dialogs.

Детализация последовательности диалога

Просмотр начала, шагов и завершения для каскадных диалогов в беседе

В этом примере показана последовательность шагов диалога, сгруппированных по беседе (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")

Пример результатов запроса средней длительности

Sample chart of dialog duration.

Среднее число шагов в диалоге

В этом примере показано, как длина каждого вызываемого диалогового окна вычисляется по среднему, минимальному, максимальному и стандартному отклонению. Это помогает анализировать качество диалогов. Например:

  • Диалоги с слишком большим количеством шагов должны оцениваться для упрощения возможностей.
  • Большая разница между минимальным, максимальным и (или) средним числом шагов может означать, что пользователи путаются или теряются при выполнении задач. Возможно, для таких задач стоит сократить длину путей или снизить сложность диалога.
  • Диалоги с большим стандартным отклонением предлагают сложные пути или сломанный интерфейс (отказ или отмена).
  • Диалоги с несколькими шагами могут быть так, потому что они никогда не были завершены. Сравнение долей завершенных и прекращенных диалогов поможет понять, так ли это.
// 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 для всех действий событий пользователя. Этот запрос удобен и для повторных пользователей.

Пример результатов запроса канала по активности

Sample chart of channel usage.

Интерпретация: тестирование эмулятора использовалось для наиболее популярных, но когда-то мы пошли жить, 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")

Пример результатов запросов по популярности

Sample chart of intent 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 так что вы можете сделать?", "как вы можете помочь мне", "Как вы можете помочь мне?", "Как вы можете помочь?", "Как можно использовать вас в моих проектах?", "Поговорите со мной о вашей возможности", "Что вы способны?", ...]

См. также