Azure QnAMaker см. Все соответствующие ответы в журналах. - PullRequest
1 голос
/ 07 февраля 2020

Я начал использовать QnA Maker и хочу иметь возможность просматривать в журналах ВСЕ ответы на вопрос и порог оценки , который был отправлен с запросом. В настоящее время мне удалось увидеть только один ответ на вопрос с помощью этого запроса Кусто.

requests
| where url endswith "generateAnswer"
| project timestamp, id, url, resultCode, duration, performanceBucket
| parse kind = regex url with *"(?i)knowledgebases/"KbId"/generateAnswer"
| join kind= inner (
traces | extend id = operation_ParentId
) on id
| extend question = tostring(customDimensions['Question'])
| extend answer = tostring(customDimensions['Answer'])
| extend score = tostring(customDimensions['Score'])
| project timestamp, resultCode, duration, id, question, answer, score, performanceBucket, KbId

Кто-нибудь знает, возможно ли увидеть все ответы?

1 Ответ

1 голос
/ 07 февраля 2020

Я использую этот точный пример, и не похоже, что можно увидеть полный список ответов с ведением журнала по умолчанию. Вам потребуется зарегистрировать пользовательскую трассировку (или вы, вероятно, могли бы сделать это как событие) и использовать полезную нагрузку, возвращаемую вызовом API. Вам также необходимо установить верхний параметр в запросе, в противном случае вы получите только один ответ независимо (хотя я подтвердил, что при установке top не отображаются дополнительные ответы в журнале аналитических сообщений приложения по умолчанию).

Кроме того, понимание приложения не поддерживает массивы (насколько мне известно), поэтому вам нужно будет сгладить результаты, используя что-то вроде flat .

Вот пример кода в nodejs. Синтаксис немного отличается для других языков (см. Ссылку выше для пользовательской трассировки). Я вызываю API напрямую, но если вы импортируете модуль QnA, я должен ожидать, что это будет работать точно так же.

const qnaResult = await request({
    url: url,
    method: 'POST',
    headers: headers,
    json: {
        question: query,
        top: 3,
        context: qnAcontext
    }
});
flatQnaResult = flatten(qnaResult);
appInsightsClient.trackTrace({message: 'QnA Custom Trace',severity: 1,properties: flatQnaResult});

Если вы используете плоский, вы найдете соответствующий ответ и оценку как answers.i.answer и answers.i.score, где я - ваш индекс. То, что это не будет делать, это показать, какой порог вы установили. Возможно, это связано с тем, что я обрабатываю этот вызов за пределами QnA Maker, чтобы дать мне больше контроля над действиями (например, в некоторых ботах, если в первичном вызове не достигнут порог, я выполняю вызов отдельного KB QnA вместо предоставления сообщение по умолчанию).

Я не уверен на 100%, вернется ли порог обратно в полезную нагрузку, если вы установите его как часть вызова. Если нет, вы всегда можете добавить его в свой объект flatQnaResults перед тем, как зарегистрировать его в приложении insights (например, flatQnaResults.threshold = YOUR_THRESHOLD).

...