如何在第一个 LUIS 对话框中调用新的第二个 LUIS 对话框?
How can i call a new second LUIS dialog in the first LUIS dialog?
嗨,对于我的机器人,我需要调用第二个 LUIS 对话框实例。但是对于第一个 LUIS 对话框中的 Forward 功能,只有正常的对话框才有效。意图识别不起作用。
那么如何在第一个 LUIS 对话框中调用新的第二个 LUIS 对话框?
消息控制器:
await Conversation.SendAsync(activity, () => new FirstDialogClass());
第一个对话框类:
[LuisModel("luis", "key")]
[Serializable]
public class FirstDialogClass: LuisDialog<object>
{
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: none");
// call second luis instance
await context.Forward(new SecondDialogClass(), CallbackFirstDialog, "message", CancellationToken.None);
}
[LuisIntent("Greeting")]
public async Task Hallo(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: greeting");
context.Wait(MessageReceived);
}
private async Task CallbackFirstDialog(IDialogContext context, IAwaitable<object> result)
{
await context.PostAsync("callback first dialog");
context.Wait(MessageReceived);
}
}
第二个对话框类:
[LuisModel("luis", "key")]
[Serializable]
public class SecondDialogClass : LuisDialog<object>
{
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension second dialog: none");
context.Done(new Object());
}
[LuisIntent("Alphabet")]
public async Task Alphabet(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension second dialog: alphabet");
context.Done(new Object());
}
}
我自己找到了解决办法。
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: none");
// call second luis instance
var message = context.MakeMessage(); // create a message
message.Text = "abc"; // alphabet intension is called
await context.Forward(new SecondDialogClass(), CallbackFirstDialog, message, CancellationToken.None);
}
嗨,对于我的机器人,我需要调用第二个 LUIS 对话框实例。但是对于第一个 LUIS 对话框中的 Forward 功能,只有正常的对话框才有效。意图识别不起作用。
那么如何在第一个 LUIS 对话框中调用新的第二个 LUIS 对话框?
消息控制器:
await Conversation.SendAsync(activity, () => new FirstDialogClass());
第一个对话框类:
[LuisModel("luis", "key")]
[Serializable]
public class FirstDialogClass: LuisDialog<object>
{
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: none");
// call second luis instance
await context.Forward(new SecondDialogClass(), CallbackFirstDialog, "message", CancellationToken.None);
}
[LuisIntent("Greeting")]
public async Task Hallo(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: greeting");
context.Wait(MessageReceived);
}
private async Task CallbackFirstDialog(IDialogContext context, IAwaitable<object> result)
{
await context.PostAsync("callback first dialog");
context.Wait(MessageReceived);
}
}
第二个对话框类:
[LuisModel("luis", "key")]
[Serializable]
public class SecondDialogClass : LuisDialog<object>
{
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension second dialog: none");
context.Done(new Object());
}
[LuisIntent("Alphabet")]
public async Task Alphabet(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension second dialog: alphabet");
context.Done(new Object());
}
}
我自己找到了解决办法。
[LuisIntent("")]
public async Task None(IDialogContext context, LuisResult result)
{
await context.PostAsync("intension first dialog: none");
// call second luis instance
var message = context.MakeMessage(); // create a message
message.Text = "abc"; // alphabet intension is called
await context.Forward(new SecondDialogClass(), CallbackFirstDialog, message, CancellationToken.None);
}