【发布时间】:2019-04-08 10:52:34
【问题描述】:
我已将 QnaMaker 和 LUIS 集成到我的机器人中。我希望用户能够在对话之间提出问题。我已经发现问题在于,在处理用户的输入之前,机器人总是先查看 luis 和 qna。
例如,如果我有“立即开始”和“立即停止”的选择提示, Luis 或 qna 将中断并处理输入,再次重新提示对话框,导致无限循环,永远不会进入下一步。
我认为这对我来说是糟糕的设计。下一步有没有办法先处理结果?如果它无法识别结果,则 luis 和 qna 应处理输入。
private async Task<bool> IsTurnInterruptedDispatchToQnAMakerAsync(ITurnContext turnContext, string topDispatch, string appName, CancellationToken cancellationToken = default(CancellationToken))
{
var dc = await _dialogs.CreateContextAsync(turnContext);
const string qnaDispatchKey = "q_xxxxxxxx";
if (topDispatch.Equals(qnaDispatchKey))
{
var results = await _services.QnAServices[appName].GetAnswersAsync(turnContext);
if (results.Any())
{
await turnContext.SendActivityAsync(results.First().Answer, cancellationToken: cancellationToken);
}
if (dc.ActiveDialog != null)
{
await dc.RepromptDialogAsync();
}
return true;
}
return false;
}
return false;
}
在OnTurnAsync()
var interruptedQnaMaker = await IsTurnInterruptedDispatchToQnAMakerAsync(turnContext, topDispatch, QnaConfiguration, cancellationToken);
if (interruptedQnaMaker)
{
await _basicAccessors.ConversationState.SaveChangesAsync(turnContext, false, cancellationToken);
await _basicAccessors.UserState.SaveChangesAsync(turnContext, false, cancellationToken);
return;
}
【问题讨论】:
标签: c# botframework azure-language-understanding qnamaker