我创建了一个机器人,里面有一个 FormFlow。现在,如果您输入“我想启动产品”,LUIS 将告诉它必须转到哪个对话框:
internal static IDialog<AssesmentHelper> CreateProduct()
{
return Chain.From(() => FormDialog.FromForm(AssesmentHelper.BuildForm))
.Do(async (context, profileForm) =>
{
try
{
var completed = await profileForm;
}
catch (FormCanceledException<AssesmentHelper> e)
{
string reply;
if (e.InnerException == null)
{
reply = $"You quit on {e.Last}--maybe you can finish next time!";
}
else
{
reply = Responses.ShortCircuit;
}
await context.PostAsync(reply);
}
});
}
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
stLuis = await LuisHelper.ParseUserInput(activity.Text);
switch (stLuis.topScoringIntent.intent)
{
case "CreateProduct":
await Conversation.SendAsync(activity, CreateProduct);
break;
case "EditProduct":
await Conversation.SendAsync(activity, EditProduct);
break;
case "None":
break;
default:
break;
}
}
现在,一旦进入对话框,它就会要求用户选择数字:
请选择号码:
- Azure
- Windows
现在如果我回复1,2。 Luis 将其返回为 None 意图,因此我的消息不会进入相应的对话框。它总是转到 None 情况。
对话框的代码是:
public static IForm<AssesmentHelper> BuildForm()
{
return new FormBuilder<AssesmentHelper>()
.Message(Responses.NumberSelection)
.Field(nameof(Program))
.Field(nameof(Product))
.Build();
}
程序和产品的枚举:
[Serializable]
public enum Program
{
None = 0,
A = 1,
};
[Serializable]
public enum Product
{
None = 0,
Azure = 1,
Windows = 2
};
一旦我进入此对话框,它就会要求我选择用于选择程序的号码。现在如果我选择1,2。 Luis 将其返回为 None 意图。所以案例“None”被执行。
我想要的是将控件重定向到同一个对话框。我也有类似的编辑产品对话框。这就是为什么我无法训练我的 luis 应用程序将数字理解为产品意图。否则,每当我为编辑产品选择编号时,它都会出现不同的情况。
早些时候它以某种方式识别正确的意图,但今天我重新发布了我的路易斯应用程序,它停止识别。