Не зная больше о вашем приложении, я думаю, что проблема заключается в том, как вы используете LUIS и QnA. LUIS должен использоваться для определения намерений пользователя на основе высказываний. В этом случае оба примера высказываются о «расходах». LUIS, если модель структурирована и обучена правильно, обнаружит это и возвратит намерение «расходов».
Возвращенное намерение будет указывать, в какую базу знаний направить фактический вопрос и, таким образом, возвращенный ответ назаданный вопрос.
Что касается потока, есть несколько способов, которыми вы могли бы построить это. Это в основном порядок.
Вы можете построить это как последовательность шагов водопада. Один шаг для анализа ответа в LUIS и второй шаг для возврата ответа от QnA в зависимости от ответа LUIS. В этом примере я говорю «Привет», который LUIS распознает как «приветствие». Когда это намерение возвращается и соответствует, тогда оператор передается в 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();
}