以下是我的问题: 当我问问题2从LUIS获得最高评分意图时,我在LUIS和QnA制造商中对样本话语进行了如下培训,如何在此类情况下训练LUIS和QnA? LUIS话语: 1.我的支出状况如何 等
QNA演讲: 2.如何自费提出问题 等
答案 0 :(得分:0)
在不了解您的应用程序的更多信息的情况下,我认为问题出在您如何使用LUIS和QnA。应使用LUIS基于话语来检测用户的意图。在这种情况下,两个示例话语都是关于“费用”的。如果模型的结构和训练正确,LUIS将会检测到该错误并返回“费用”意图。
返回的意图将指示将实际问题定向到哪个知识库,从而返回对所问问题的答复。
关于流程,有很多方法可以构造它。主要是关于订单。
您可以将其构造为一系列瀑布步骤。第一步,解析LUIS中的响应,第二步,根据LUIS响应,从QnA返回答案。在此示例中,我说“ Hello”,LUIS将此识别为“问候”意图。返回并匹配该意图后,该语句将传递给QnA,QnA返回“问题”响应:“嗨!”。
希望有帮助!
async luisStep ( stepContext ) {
if ( stepContext.context.activity.text ) {
const stepResults = stepContext.context.activity.text.toLowerCase();
await stepContext.context.sendActivity( `You said: ${ stepResults }` );
const recognizerResult = await this.recognizer.recognize( stepContext.context );
let intent = await LuisRecognizer.topIntent( recognizerResult );
if ( intent ) {
await stepContext.context.sendActivity( `Luis recognized: ${ intent }` );
return stepContext.next( recognizerResult );
} else {
await stepContext.context.sendActivity( 'No LUIS intent was found.' );
return stepContext.next( recognizerResult );
}
} else {
await stepContext.context.sendActivity( 'Moving to the QnA step' );
return await stepContext.next();
}
}
async qnaStep ( stepContext ) {
const resultDetails = stepContext.result;
const topScoringIntent = stepContext.result.luisResult.topScoringIntent;
if ( topScoringIntent.intent === 'Greeting' ) {
let qnaResults = await this.qnaMaker.getAnswers(stepContext.context);
if(qnaResults[0]) {
stepContext.context.sendActivity(`QnA response: ${qnaResults[0].answer}`)
}
return { status: DialogTurnStatus.waiting };
} else {
await stepContext.context.sendActivity( 'There was an error retrieving QnA results.' );
}
return await stepContext.next();
}