在使用LUIS的对话框中处理图像输入的正确流程是什么?

时间:2017-01-18 06:19:05

标签: c# botframework luis

我将c#中的机器人放在一起,接受来自用户的图像输入以及文本输入。我使用LUIS作为AI框架来确定对话模式中的意图。但是,似乎两种类型的输入都不能共存:LUIS和附件。我想知道这种情况是否有推荐的模式。请帮忙! :|

4 个答案:

答案 0 :(得分:2)

在MessageController中,您可以获取图像/附件值

activity.Attachments    

Attachments Properties

 await Conversation.SendAsync(activity, () => new RootLuisDialog();    

LuisDialog会处理短信,除了文本外,它会将所有其他内容视为null参数。但是,

  

Prompts.attachment()方法将要求用户上传文件附件,如图片或视频。用户响应将作为IPromptAttachmentResult返回。

Here是参考链接。

答案 1 :(得分:0)

您可以过滤掉MessageController中包含附件的邮件。

您可以使用

检查附件
activity.Attachments == null

答案 2 :(得分:0)

您还可以在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!");
        }

    }

答案 3 :(得分:-1)

所以我发现了一个更好的模式,尽管与Praveen的答案一致。

在MesssageController中,您要检查附件activity.Attachments == null,但此外,您必须创建所谓的RootDialog并发送所有会话,您可以从中转发对话到其他对话。

在我的情况下,我将转发我希望LUIS处理的消息转发到将LUIS作为服务继承的对话框类。其他消息(例如附件)将发送到另一个要处理的对话框类。

获取附件并在对话框代码中处理附件的另一种方法是使用PromptAttachment调用作为用户输入附件的捕手:

 var dialog = new PromptDialog.PromptAttachment(message.ToString(), "Sorry, I didn't get the receipt. Try again please.", 2);
        context.Call(dialog, AddImageToReceiptRecord);

干杯! :)