连接 LUIS 对话框以形成对话框并映射正确的字段
Connecting LUIS dialog to form dialog and mapping the right fields
我正在开发一个可以预订航班的机器人。我正在使用最新版本的机器人框架 (1.1),正如 suggested 此处所建议的那样。
你可以说 "Book me a flight from Amsterdam to Boston next monday".
现在,我将 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; }
}
我从路易斯那里得到以下回复:
{
"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 描述过了。
到目前为止我尝试了什么
- 制作了一个没有实体子实体但具有正确实体名称的新应用,没有在表单中填写任何值。
- 在运行时将实体 'types' 从 'Flight::LocationTo' 重命名为 'LocationTo',等等。这行得通,但对日期无效。
- 用正确的值预填充 'BookFlightForm' 的新实例,但机器人仍会询问日期值。
所以我有点困惑如何解决这个问题。我是否正确配置了 LUIS?我需要配置 EntityRecognizer 吗? LUIS entity attribute 就好了。
希望你能帮助我!
您的 Luis 实体类型应与表单中的字段名称匹配。如果您将 Luis 实体的 "type": "Flight::LocationFrom"
更改为 "type": "LocationFrom"
,表单流应将实体与表单中的 LocationFrom
字段匹配并正确填充它。
我正在开发一个可以预订航班的机器人。我正在使用最新版本的机器人框架 (1.1),正如 suggested 此处所建议的那样。
你可以说 "Book me a flight from Amsterdam to Boston next monday".
现在,我将 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; }
}
我从路易斯那里得到以下回复:
{
"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 描述过了。
到目前为止我尝试了什么
- 制作了一个没有实体子实体但具有正确实体名称的新应用,没有在表单中填写任何值。
- 在运行时将实体 'types' 从 'Flight::LocationTo' 重命名为 'LocationTo',等等。这行得通,但对日期无效。
- 用正确的值预填充 'BookFlightForm' 的新实例,但机器人仍会询问日期值。
所以我有点困惑如何解决这个问题。我是否正确配置了 LUIS?我需要配置 EntityRecognizer 吗? LUIS entity attribute 就好了。
希望你能帮助我!
您的 Luis 实体类型应与表单中的字段名称匹配。如果您将 Luis 实体的 "type": "Flight::LocationFrom"
更改为 "type": "LocationFrom"
,表单流应将实体与表单中的 LocationFrom
字段匹配并正确填充它。