【问题标题】:I struggle to covert an IAwaitable to LuisResult (LUIS on Microsoft Bot framework)我很难将 Awaitable 转换为 Luis Result(Microsoft Bot 框架上的 LUIS)
【发布时间】:2017-11-03 18:17:26
【问题描述】:

我正在使用 Microsoft.Bot.Builder.Dialog.Promptoptions 类,它接受一个 ResumeAfter,它是委托并需要(IDialogContext 上下文,IAwaitable 结果)

但是,我想调用的代表不是 私有异步任务测试(IDialogContext 上下文,IAwaitable 结果)

而是具有以下内容的 LUIS 委托

[LuisIntent("测试") 私有异步任务测试(IDialogContext 上下文,LuisResult 结果)

非常感谢听到一些关于如何调用 LUIS 属性方法的想法

    private async Task ProductChoice(IDialogContext context, IAwaitable<string> result)
    {

        PromptDialog.Choice<string>(
        context,
        ProductOverview,
        this.productOptions,
        "Which plaform are you interested in?",
        "Ooops, what you wrote is not a valid option, please try again",
        3,
        PromptStyle.PerLine);
        await context.PostAsync(context.MakeMessage());
    }        

    [LuisIntent ("Products")]
    public async Task ProductOverview(IDialogContext context, LuisResult result)
    {
        string product = "";
        EntityRecommendation rec;
        Activity activity = (Activity)context.MakeMessage();
        Attachment attachment;

        if (result.TryFindEntity("ProductName", out rec))
        {
            //Here you could include other rich cards
            attachment = CreateNewHeroCard(product = rec.Entity);
            activity.Attachments.Add(attachment);
            await context.PostAsync(activity);
        }
        else
        {
            await context.PostAsync("Sorry, their is no product by that name");
        }
    }

【问题讨论】:

  • 您需要显示更多代码。你是如何使用那个 PromptOptions 的,你为什么期望 LuisResult 被返回到你的回调中?
  • 您可能需要一些代码重构并将您的测试方法中所做的内容提取为 Luis 结果和 ResumeAfter 使用的常用方法
  • 你不能这样做。但是重构代码会更容易,使用通用的方法。
  • 但是PromptDialog.Choice&lt;string&gt; 会回调string 结果,而不是LuisResult,所以不确定你希望它如何工作。
  • 问题是我想在我的 LUISIntend 方法 (ProductOverview) 上使用一个,不仅可以处理 LUIS 调用,还可以处理一些 ResumeAfter 调用,因为有时该方法会直接从 Bot 调用,有时也可以我希望该方法成为逻辑流程的一部分。在这里,您可以看到我尝试从上面启动的 PromptDialog 调用 ProductOverview。这自然会失败,但如何从 ResumeAfter 调用我的 ProductOverview 方法?

标签: c# botframework azure-language-understanding


【解决方案1】:

首先,您尝试做的事情是不可能的。

然后是其他一些事情:

  • 您不应该在调用Prompt 后发送PostAsync。
  • 如果要重用LUIS Intent 方法上的某些逻辑,则需要将该逻辑提取到一个通用方法中,LUIS 和提示的 ResumeAfter 方法都可以调用。当然,那个通用方法不应该有任何与LuisResult 相关的东西,因为这在 ResumeAfter 方法中不可用。何时调用 ResumeAfter 方法;不会调用 LUIS。
  • 如果您想这样做,请在提示后调用LUIS,然后需要编写更多代码,但这是可行的
  • 如果您只想从 ResumeAfter 方法调用 ProductOverview 方法,您可以将其作为标准方法执行,但是(再次)请记住,您不会有 LuisResult,所以您将必须发送一个空值并在您的 ProductOverview 方法中相应地处理它。

类似:

private async Task ProductChoice(IDialogContext context, IAwaitable<string> result)
    {

        PromptDialog.Choice<string>(
        context,
        AfterPromptChoiceMethod,
        this.productOptions,
        "Which plaform are you interested in?",
        "Ooops, what you wrote is not a valid option, please try again",
        3,
        PromptStyle.PerLine);
        await context.PostAsync(context.MakeMessage());
    }        

   private async Task AfterPromptChoiceMethod(IDialogContext context, IAwaitable<string> result)
    {
       await ProductOverview(context, null);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多