1

我有一个带有几个 LUIS 意图的 LuisDialog。在其中一些意图中,我可能需要向用户询问更多信息。在这些情况下,我尝试使用 PromptDialog 或 PromptString。

我已经试过这个:

[LuisIntent("MyIntent")]
public async Task MyIntent(IDialogContext context, LuisResult result)
{
    if (result.Entities.Count == 0)
    {

        PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2);
        result.Entities[0].Entity = userSymbol;                
    }

    //some other code

    context.Wait(MessageReceived);
}

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result)
{
    userSymbol = await result;
    context.Wait(MessageReceived);
}

还有这个:

[LuisIntent("MyIntent")]
public async Task MyIntent(IDialogContext context, LuisResult result)
{
    if (result.Entities.Count == 0)
    {
        PromptString dialog = new PromptString("Message to the user", "Try again message", 2);
        context.Call(dialog, AfterUserInputSymbol);
        result.Entities[0].Entity = userSymbol;                
    }

    //some other code

    context.Wait(MessageReceived);
}

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result)
{
    userSymbol = await result;
    context.Wait(MessageReceived);
}

在这两种情况下,用户都不会看到提示,并且 的值userSymbol会为空。当我调试代码AfterUserInputSymbol时,只进入到这部分的时间:result.Entities[0].Entity = userSymbol;

如何在 LuisIntent 中提示更多信息?

4

1 回答 1

2

不确定到底发生了什么,因为您的问题中没有发布任何错误,但是可能发生的事情是您正在开始一个新的对话框,并且您还有 context.Wait(MessageReceived) 那里。如果您正在启动一个对话框,您不必等待该流中的消息,这就是我要在那里添加一个 else 子句的原因。

 if (result.Entities.Count == 0)
    {
        PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2);
        // The following line shouldn't be here
        result.Entities[0].Entity = userSymbol;                
    }
    //here you should put an else
   else 
   {
    context.Wait(MessageReceived);
   }

另外,请记住,在您尝试调用对话框后,您将无法将 userSymbol 分配给 Luis Result 实体。这必须在 ResumeAfter 方法“AfterUserInputSymbol”中完成。

完成此操作后,您可以手动调用 Intent 传递上下文和较新的 Luis Result(您可能必须保存前一个,具体取决于您要实现的目标)

于 2016-10-26T13:39:30.443 回答