【问题标题】:how to close a QnAMaker dialog?如何关闭 QnAMaker 对话框?
【发布时间】:2018-07-27 11:02:03
【问题描述】:

我正在尝试关闭 QnAMaker 对话框,以便用户可以返回 Luis 对话框并再次使用它。

这是我使用的代码 在 luisdialog.cs 中:

    [LuisIntent("FAQ")]
    public async Task FAQ(IDialogContext context, LuisResult result)
    {
        await context.PostAsync("FAQ");
        var userQuestion = (context.Activity as Activity).Text;
        await context.Forward(new QnADialog(), ResumeAfterQnA, context.Activity, CancellationToken.None);

        //await Task.Run(() => context.Call(new QnADialog(), Callback));
    }
    private async Task ResumeAfterQnA(IDialogContext context, IAwaitable<object> result)
    {
        context.Done<object>(null);
    }

这里是 QnA 对话框:

[Serializable]
[QnAMakerService("endpoint", "knowledge base id", "subscription key")]
public class QnADialog : QnAMakerDialog<object>
{

}

我尝试覆盖 start async 方法,以便在用户键入“done”但 QnA 制造商根本没有启动时使用 context.done(0) 退出对话框,这令人困惑。

另外,为什么通过使用“常见问题解答”调用 luis 意图,它还试图在用户不再次输入的情况下进入知识库,是否可以解决这个问题?

【问题讨论】:

    标签: c# botframework azure-language-understanding qnamaker


    【解决方案1】:

    我正在尝试关闭 QnAMaker 对话框,以便用户可以返回 Luis 对话框并再次使用它。

    您可以尝试覆盖 DefaultMatchHandler 并调用 context.Done 以关闭 QnAMaker 对话框并将控制权返回给父对话框。以下修改后的代码 sn -p 对我有用,请参考。

    在 LuisDialog 中:

    [LuisIntent("FAQ")]
    public async Task HelpIntent(IDialogContext context, LuisResult result)
    {
        await context.PostAsync("FAQ");
        await context.Forward(new QnADialog(), ResumeAfterQnA, context.Activity, CancellationToken.None);
    }
    
    private async Task ResumeAfterQnA(IDialogContext context, IAwaitable<object> result)
    {
        //context.Done<object>(null);
        context.Wait(MessageReceived);
    }
    

    在 QnADialog 中:

    public override async Task DefaultMatchHandler(IDialogContext context, string originalQueryText, QnAMakerResult result)
    {
        await context.PostAsync($"I found {result.Answers.Length} answer(s) that might help...{result.Answers.First().Answer}.");
        context.Done(true);
    }
    

    测试结果:

    【讨论】:

    • 你有我可以遵循的上述代码的示例或文档吗?
    • 您可以参考this github samples 开始使用 QnA Maker 对话框和 Luis 对话框。
    • 感谢您的工作,但只是想问一下是否有可能进入常见问题解答意图,然后根据用户问题开始进入知识库?不是马上?所以像下面这样: 常见问题 欢迎来到常见问题 意图请开始提问 什么是速率限制 速率限制是 100,还有其他问题吗?不,谢谢。之后它又回到了路易斯的意图。我可以通过检查用户是否输入“否”,检查是否 originalQueryText=="no", context.Done(true) 来摆脱常见问题解答意图,但不太确定如何从那里继续。
    猜你喜欢
    • 1970-01-01
    • 2019-08-13
    • 2011-02-25
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多