4

我正在开发一个机器人,您可以在其中预订航班。我正在使用最新版本的 bot 框架 (1.1),正如此处所建议的那样。

您可以说“为我预订下周一从阿姆斯特丹到波士顿的航班”。

现在,我将 LUIS 配置为响应意图“BookFlight”,并在我的机器人中创建了 LuisDialog 和 FormDialog,如下所示:

[LuisIntent("BookFlight")]
public async Task Process(IDialogContext context, LuisResult result)
{
    var form = new BookFlightForm();

    var entities = new List<EntityRecommendation>(result.Entities);

    var formDialog = new FormDialog<BookFlightForm>(form, BuildForm, FormOptions.PromptInStart, entities);

    context.Call(formDialog, OnComplete);
}

[Serializable]
public class BookFlightForm
{
    [Prompt("From which city do you want to leave from? {||}", AllowDefault = BoolDefault.True)]
    [Describe("Location, example: Amsterdam")]
    public string LocationFrom { get; set; }

    [Prompt("To which city you want to fly to? {||}", AllowDefault = BoolDefault.True)]
    [Describe("Location, example: Las Vegas")]

    public string LocationTo { get; set; }

    [Prompt("When do you want to leave? {||}", AllowDefault = BoolDefault.True)]
    [Describe("Departure date, example: tomorrow, next week or any date like 12-06-2016")]
    public DateTime DepartureDate { get; set; }
}

我收到 Luis 的以下回复:

{
    "intent": "BookFlight",
    "score": 0.987034,
    "actions": [
        {
            "triggered": true,
            "name": "BookFlight",
            "parameters": [
            {
                "name": "locationFrom",
                "required": true,
                "value": [
                    {
                        "entity": "amsterdam",
                        "type": "Flight::LocationFrom",
                        "score": 0.8548711
                    }
                ]
            },
            {
                "name": "locationTo",
                "required": true,
                "value": [
                    {
                        "entity": "boston",
                        "type": "Flight::LocationTo",
                        "score": 0.962294638
                    }
                ]
            },
            {
                "name": "departureDate",
                "required": true,
                "value": [
                    {
                        "entity": "next monday",
                        "type": "builtin.datetime.date",
                        "resolution": 
                            {
                                "date": "2016-05-09"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

问题

表单未使用来自 LUIS 的正确值填充。所以机器人会要求你填写你的出发地点、日期和你想飞往的地点。但这已经向 LUIS 进行了描述。

到目前为止我尝试过的

  1. 制作了一个没有实体子实体但具有正确实体名称的新应用程序,表单中没有填写任何值。
  2. 在运行时将实体中的“类型”从“Flight::LocationTo”重命名为“LocationTo”等。这有效,但不适用于该日期。
  3. 用正确的值预填充“BookFlightForm”的新实例,但机器人仍会询问日期的值。

所以我有点困惑如何解决这个问题。我是否正确配置了 LUIS?我需要配置 EntityRecognizer 吗?LUIS实体属性会很好。

希望你能帮我!

4

1 回答 1

2

您的 Luis 实体类型应与表单中的字段名称匹配。如果您更改"type": "Flight::LocationFrom""type": "LocationFrom"Luis 实体,表单流应将该实体与LocationFrom表单中的字段匹配并正确填充。

于 2016-05-04T21:22:56.480 回答