传入LUIS实体以绑定到对话状态

时间:2016-04-13 02:02:42

标签: botframework luis

有人可以帮助我从机器人框架文档中解释这意味着什么:

  

您还可以传入LUIS实体以绑定到该状态。如果EntityRecommendation.Type是C#类中字段的路径,则EntityRecommendation.Entity将通过识别器传递以绑定到您的字段。就像初始状态一样,将跳过填写该字段的任何步骤。

当我调用对话框时,我会传递我的LuisResult result实体集合,如下所示:

context.Call(new FormDialog<ItemSearch>( new ItemSearch(), ItemSearch.BuildForm, options: FormOptions.PromptInStart,entities:result.Entities), null);

在这些实体中至少有一个实体在名称和类型上映射到我的对话框中的公共属性,但状态永远不会被填充。我错过了什么?

TIA。

2 个答案:

答案 0 :(得分:1)

您可以在PizzaOrderDialog中找到相关示例。如果您查看FormDialog实现,它将使用entity.type将传入的实体建议映射到表单中的步骤。然后,将提供检测到的实体作为表单的该步骤的输入。

以下是一个示例,说明表单如何根据路易斯形式的Luis模型检测到的实体跳过实际步骤:

        var entities = new List<EntityRecommendation>(result.Entities);
        if (!entities.Any((entity) => entity.Type == "Kind"))
        {
            // Infer kind
            foreach (var entity in result.Entities)
            {
                string kind = null;
                switch (entity.Type)
                {
                    case "Signature": kind = "Signature"; break;
                    case "GourmetDelite": kind = "Gourmet delite"; break;
                    case "Stuffed": kind = "stuffed"; break;
                    default:
                        if (entity.Type.StartsWith("BYO")) kind = "byo";
                        break;
                }
                if (kind != null)
                {
                    entities.Add(new EntityRecommendation(type: "Kind") { Entity = kind });
                    break;
                }
            }
        }

        var pizzaForm = new FormDialog<PizzaOrder>(new PizzaOrder(), this.MakePizzaForm, FormOptions.PromptInStart, entities);

答案 1 :(得分:0)

似乎还存在传递实体的问题。如果您要映射到的属性是Enum(根据PizzaBot示例),它似乎有效。但是,如果公共属性是字符串,则它不会映射。我不确定其他类型。

请参阅此处https://github.com/Microsoft/BotBuilder/issues/151