Azure QnAMaker 在日志中查看所有相关答案

Azure QnAMaker see all relevant answers in logs

我已经开始使用 QnA Maker 并希望能够在日志中查看问题的所有答案分数阈值 与请求一起发送。目前,对于这个 Kusto 查询的问题,我只能看到一个答案。

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

有谁知道是否可以看到所有答案?

我正在使用这个确切的示例,但似乎无法使用默认日志记录查看完整的答案列表。您需要记录一个 custom trace(或者您可以作为一个事件)并使用 API 调用返回的负载。您还需要在请求中设置 top 参数,否则无论如何您都只会收到一个答案(尽管我已经确认设置 top does not showed the additional answers in the default app insights logging ).

此外,application insights 不支持数组(据我所知),因此您需要使用 flat.

之类的东西来展平结果

这是 nodejs 中的一些示例代码。其他语言的语法略有不同(请参阅上面的 link 了解自定义跟踪)。我直接调用 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});

如果您使用 flat,您会发现相关答案和得分为 answers.i.answeranswers.i.score,其中 i 是您的索引。这不会显示您设置的 threshold。也许那是因为我在 QnA Maker 调用之外处理它以让我更好地控制操作(例如,在某些机器人中,如果在主要调用中未达到阈值,我会调用单独的 QnA KB 而不是提供默认消息)。

如果您将阈值设置为调用的一部分,我不能 100% 确定您是否会在有效负载中取回阈值。如果没有,您可以随时将其添加到您的 flatQnaResults 对象,然后再将其记录到应用洞察中(例如 flatQnaResults.threshold = YOUR_THRESHOLD)。