0

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

您还可以传入 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。

4

2 回答 2

1

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

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

        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);
于 2016-04-15T22:59:48.020 回答
0

传入实体似乎也存在问题。如果您映射到的属性是枚举(根据 PizzaBot 示例),它似乎可以工作。但是,如果公共属性是一个字符串,它不会映射。我不确定其他类型。

见这里https://github.com/Microsoft/BotBuilder/issues/151

于 2016-04-20T12:17:57.867 回答