如何解决QnA Maker Web App-如果未找到结果,则调用REST API
我设法创建了一个KB和网络应用程序漫游器-我相信它是通过 git。
在发送默认的“未找到结果”消息(“未找到QnAMaker答案。”)响应之前,我想调用REST API。
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext,CancellationToken cancellationToken)
{
// get answer to user's question
// if no answer found,call rest api
await Dialog.RunAsync(turnContext,ConversationState.CreateProperty<DialogState>(nameof(DialogState)),cancellationToken);
}
在RootDialog.cs中,它会调用
private async Task<DialogTurnResult> InitialStepAsync(WaterfallStepContext stepContext,CancellationToken cancellationToken)
{
return await stepContext.BeginDialogAsync(nameof(QnAMakerDialog),null,cancellationToken);
}
一旦stepContext.BeginDialogAsync完成,它将在QnA Maker中搜索答案并将其发送给用户。用这种方法有没有办法得到答案和分数?
我不确定应该在哪里实施。希望有人可以指导我。
谢谢。
解决方法
我正在研究nodejs,但我认为您可以使其适应.NET。取得结果后,您应该可以采取所需的任何操作。我有这样的实现。就我而言,我正在呼叫第二个QnA Maker端点(我有一个用于业务数据,一个用于聊天),但是您可以用任何您想要的呼叫代替该呼叫。
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
const { MessageFactory } = require('botbuilder');
const { QnAServiceHelper } = require('../helpers/qnAServiceHelper');
const { CardHelper } = require('../helpers/cardHelper');
class QnADialog {
async processAsync(oldState,activity){
var menuText = `I'm sorry,I don't know how to help with that. Right now I am trained to help you with order management and product availability from Vista`;
if (activity.channelId == 'msteams') {
var defaultAnswer = CardHelper.GetMenuCardTeams(menuText);
} else {
var defaultAnswer = CardHelper.GetMenuCard(menuText);
}
var MINIMUM_SCORE = 50;
var newState = null;
var query = activity.text;
var qnaResult = await QnAServiceHelper.queryQnAService(query,oldState);
var qnaAnswer = qnaResult[0].answer;
var prompts = null;
if(qnaResult[0].context != null){
prompts = qnaResult[0].context.prompts;
}
var outputActivity = null;
if (prompts == null || prompts.length < 1) {
// Apply confidence filter
if (qnaResult[0].score > MINIMUM_SCORE) {
outputActivity = MessageFactory.text(qnaAnswer);
} else {
// If low confidence,send to social talk
var socialResult = await QnAServiceHelper.querySocialTalkService(query,oldState);
if (socialResult[0].score > MINIMUM_SCORE) {
outputActivity = MessageFactory.text(socialResult[0].answer);
} else {
// If low confidence for social talk,use default answer
//outputActivity = MessageFactory.text(defaultAnswer);
outputActivity = defaultAnswer;
}
}
}
else {
var newState = {
PreviousQnaId: qnaResult[0].id,PreviousUserQuery: query
}
outputActivity = CardHelper.GetHeroCard('',qnaAnswer,prompts);
}
return [newState,outputActivity,null];
}
}
module.exports.QnADialog = QnADialog;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。