在使用 LUIS 的对话框中处理图像输入的正确流程是什么?
What's the correct flow to handle image inputs in a dialog that uses LUIS?
我正在用 c# 构建一个机器人,它接受用户的图像输入和文本输入。我使用 LUIS 作为 AI 框架来确定对话模式中的意图。但是,这两种类型的输入似乎不能共存:LUIS 和附件。我想知道这种情况下是否有推荐的模式。请帮忙! :|
您可以在 MessageController 中过滤掉带有附件的消息。
您可以使用
检查附件
activity.Attachments == null
在 MessageController 中,您可以获得 image/attachments 个值
activity.Attachments
await Conversation.SendAsync(activity, () => new RootLuisDialog();
LuisDialog
将处理文本消息,除了文本,它会将所有其他内容视为 null
参数。但是,
The Prompts.attachment() method will ask the user to upload a file attachment like an image or video. The users response will be returned as an IPromptAttachmentResult.
Here是引用link.
所以我找到了一个更好的模式,尽管它与 Praveen 的回答是一致的。
您要在 MesssageController 中检查附件 activity.Attachments == null
但除此之外,您必须创建所谓的 RootDialog 并将所有对话发送到那里,您可以从那里将对话转发到其他对话框。
在我的例子中,我将我希望 LUIS 处理的消息转发到一个对话框 class,该对话框继承了 LUIS 作为服务。其他消息(例如附件)被发送到另一个对话框 class 进行处理。
获取附件并在对话代码中处理它的另一种方法是使用 PromptAttachment
调用作为用户输入附件的捕获器:
var dialog = new PromptDialog.PromptAttachment(message.ToString(), "Sorry, I didn't get the receipt. Try again please.", 2);
context.Call(dialog, AddImageToReceiptRecord);
干杯! :)
您也可以在 LUIS 对话框中处理它。
这里是一个使用 PromptDialog.Attachment 的例子:
[LuisIntent("SomeIntent")]
public async Task SomeIntent(IDialogContext context, LuisResult result)
{
PromptDialog.Attachment(
context: context,
resume: ResumeAfterExpenseUpload,
prompt: "I see you are trying to add an expense. Please upload a picture of your expense and I will try to perform character recognition (OCR) on it.",
retry: "Sorry, I didn't understand that. Please try again."
);
}
private async Task ResumeAfterExpenseUpload(IDialogContext context, IAwaitable<IEnumerable<Attachment>> result)
{
var attachment = await result as IEnumerable<Attachment>;
var attachmentList = attachment.GetEnumerator();
if (attachmentList.MoveNext())
{
//output link to the uploaded file
await context.PostAsync(attachmentList.Current.ContentUrl);
}
else
{
await context.PostAsync("Sorry, no attachments found!");
}
}
我正在用 c# 构建一个机器人,它接受用户的图像输入和文本输入。我使用 LUIS 作为 AI 框架来确定对话模式中的意图。但是,这两种类型的输入似乎不能共存:LUIS 和附件。我想知道这种情况下是否有推荐的模式。请帮忙! :|
您可以在 MessageController 中过滤掉带有附件的消息。
您可以使用
检查附件activity.Attachments == null
在 MessageController 中,您可以获得 image/attachments 个值
activity.Attachments
await Conversation.SendAsync(activity, () => new RootLuisDialog();
LuisDialog
将处理文本消息,除了文本,它会将所有其他内容视为 null
参数。但是,
The Prompts.attachment() method will ask the user to upload a file attachment like an image or video. The users response will be returned as an IPromptAttachmentResult.
Here是引用link.
所以我找到了一个更好的模式,尽管它与 Praveen 的回答是一致的。
您要在 MesssageController 中检查附件 activity.Attachments == null
但除此之外,您必须创建所谓的 RootDialog 并将所有对话发送到那里,您可以从那里将对话转发到其他对话框。
在我的例子中,我将我希望 LUIS 处理的消息转发到一个对话框 class,该对话框继承了 LUIS 作为服务。其他消息(例如附件)被发送到另一个对话框 class 进行处理。
获取附件并在对话代码中处理它的另一种方法是使用 PromptAttachment
调用作为用户输入附件的捕获器:
var dialog = new PromptDialog.PromptAttachment(message.ToString(), "Sorry, I didn't get the receipt. Try again please.", 2);
context.Call(dialog, AddImageToReceiptRecord);
干杯! :)
您也可以在 LUIS 对话框中处理它。
这里是一个使用 PromptDialog.Attachment 的例子:
[LuisIntent("SomeIntent")]
public async Task SomeIntent(IDialogContext context, LuisResult result)
{
PromptDialog.Attachment(
context: context,
resume: ResumeAfterExpenseUpload,
prompt: "I see you are trying to add an expense. Please upload a picture of your expense and I will try to perform character recognition (OCR) on it.",
retry: "Sorry, I didn't understand that. Please try again."
);
}
private async Task ResumeAfterExpenseUpload(IDialogContext context, IAwaitable<IEnumerable<Attachment>> result)
{
var attachment = await result as IEnumerable<Attachment>;
var attachmentList = attachment.GetEnumerator();
if (attachmentList.MoveNext())
{
//output link to the uploaded file
await context.PostAsync(attachmentList.Current.ContentUrl);
}
else
{
await context.PostAsync("Sorry, no attachments found!");
}
}