为什么 botframework 实验性自适应核心机器人 C# 示例 SetProperty() 不保存 LUIS 返回的实体?
Why doesn't botframework experimental adaptive corebot C# sample SetProperty() save entities returned by LUIS?
我正在尝试让以下示例机器人正常工作。
我可以 运行 它并使用 Bot Framework Emulator 成功连接到它。
以下对话有效:
订机票
- 你的出发城市是哪里?
迈阿密
- 您想去哪里旅行?
达拉斯
- 你的出发日期是几号?
明天
- 这听起来对吗?我有你前往:达拉斯来自:迈阿密于:2020-03-13
是的
- 我已经为您预订了 2020 年 3 月 13 日从迈阿密到达拉斯的订单。
问题是当我尝试预订航班并同时提供城市时
"book flight from miami"
- 你的出发城市是哪里?
我的理解是机器人应该将实体迈阿密识别为出发城市,然后询问目的地城市。
我相信 RootDialog.cs 文件(我直接使用示例)在 Book_flight 意图中使用 SetProperty() 来完成此操作。
我认为 SetProperty() 操作会存储实体
Value = "@fromCity.location"
在属性
Property = "conversation.flightBooking.destinationCity"
随后,TextInput 将使用提示符
Prompt = new ActivityTemplate("@{PromptForMissingInformation()}")
读取 RootDialog.lg 文件
# PromptForMissingInformation
- IF: @{conversation.flightBooking.departureCity == null}
- @{PromptForDepartureCity()}
- ELSEIF: @{conversation.flightBooking.destinationCity == null}
- @{PromptForDestinationCity()}
- ELSEIF: @{conversation.flightBooking.departureDate == null}
- @{PromptForTravelDate()}
- ELSE:
- @{ConfirmBooking()}
如果已经是 provided/stored,则不应提示输入出发城市。
我还在 Bot Framework Emulator 中使用 LUIS 跟踪查看了从 LUIS 返回的结果。 LUIS 似乎正确地将意图 Book_flight 和来自城市的实体识别为迈阿密
{
"recognizerResult": {
"alteredText": null,
"entities": {
"$instance": {
"fromCity": [
{
"endIndex": 22,
"startIndex": 17,
"text": "miami",
"type": "builtin.geographyV2.city"
}
]
},
"fromCity": [
{
"location": "miami",
"type": "city"
}
]
},
"intents": {
"Book_flight": {
"score": 0.941154063
}
},
"text": "book flight from miami"
}
}
为什么 SetProperty() 不保存 fromCity 实体信息?可以删除 3 个 SetProperty() 操作,机器人仍然可以正常工作。这个示例机器人是否适用于其他人?我错过了什么?
如有任何帮助,我们将不胜感激。
看来已识别的实体存储在数组中,需要通过 SetProperty() 操作的值表达式中的长格式进行访问。
new SetProperty()
{
Property = "conversation.flightBooking.departureCity",
// Value is an expresson. @entityName is short hand to refer to the value of an entity recognized.
// @xxx is same as turn.recognized.entities.xxx
//Value = "@fromCity.location"
Value = "turn.recognized.entities.fromCity[0].location"
},
destinationCity 相同
Value = "turn.recognized.entities.toCity[0].location"
和出发日期
Value = "turn.recognized.entities.datetime[0].timex[0]"
如果在原始消息中提供这些更改,则这些更改允许存储实体并且不询问它们。例如,
Book flight from miami
- Where would you like to travel to?
(迈阿密存储为出发城市,以后使用,目的地城市提示)
我不能说这在所有情况下都有效,因为我不确定数据模型,但它似乎确实修复了示例,可能应该更新它。
顺便说一句 - Botframework 对话框调试器确实有助于调试。
https://marketplace.visualstudio.com/items?itemName=tomlm.vscode-dialog-debugger
我正在尝试让以下示例机器人正常工作。
我可以 运行 它并使用 Bot Framework Emulator 成功连接到它。
以下对话有效:
订机票
- 你的出发城市是哪里?
迈阿密 - 您想去哪里旅行?
达拉斯 - 你的出发日期是几号?
明天 - 这听起来对吗?我有你前往:达拉斯来自:迈阿密于:2020-03-13
是的 - 我已经为您预订了 2020 年 3 月 13 日从迈阿密到达拉斯的订单。
问题是当我尝试预订航班并同时提供城市时
"book flight from miami" - 你的出发城市是哪里?
我的理解是机器人应该将实体迈阿密识别为出发城市,然后询问目的地城市。
我相信 RootDialog.cs 文件(我直接使用示例)在 Book_flight 意图中使用 SetProperty() 来完成此操作。
我认为 SetProperty() 操作会存储实体
Value = "@fromCity.location"
在属性
Property = "conversation.flightBooking.destinationCity"
随后,TextInput 将使用提示符
Prompt = new ActivityTemplate("@{PromptForMissingInformation()}")
读取 RootDialog.lg 文件
# PromptForMissingInformation
- IF: @{conversation.flightBooking.departureCity == null}
- @{PromptForDepartureCity()}
- ELSEIF: @{conversation.flightBooking.destinationCity == null}
- @{PromptForDestinationCity()}
- ELSEIF: @{conversation.flightBooking.departureDate == null}
- @{PromptForTravelDate()}
- ELSE:
- @{ConfirmBooking()}
如果已经是 provided/stored,则不应提示输入出发城市。
我还在 Bot Framework Emulator 中使用 LUIS 跟踪查看了从 LUIS 返回的结果。 LUIS 似乎正确地将意图 Book_flight 和来自城市的实体识别为迈阿密
{
"recognizerResult": {
"alteredText": null,
"entities": {
"$instance": {
"fromCity": [
{
"endIndex": 22,
"startIndex": 17,
"text": "miami",
"type": "builtin.geographyV2.city"
}
]
},
"fromCity": [
{
"location": "miami",
"type": "city"
}
]
},
"intents": {
"Book_flight": {
"score": 0.941154063
}
},
"text": "book flight from miami"
}
}
为什么 SetProperty() 不保存 fromCity 实体信息?可以删除 3 个 SetProperty() 操作,机器人仍然可以正常工作。这个示例机器人是否适用于其他人?我错过了什么?
如有任何帮助,我们将不胜感激。
看来已识别的实体存储在数组中,需要通过 SetProperty() 操作的值表达式中的长格式进行访问。
new SetProperty()
{
Property = "conversation.flightBooking.departureCity",
// Value is an expresson. @entityName is short hand to refer to the value of an entity recognized.
// @xxx is same as turn.recognized.entities.xxx
//Value = "@fromCity.location"
Value = "turn.recognized.entities.fromCity[0].location"
},
destinationCity 相同
Value = "turn.recognized.entities.toCity[0].location"
和出发日期
Value = "turn.recognized.entities.datetime[0].timex[0]"
如果在原始消息中提供这些更改,则这些更改允许存储实体并且不询问它们。例如,
Book flight from miami
- Where would you like to travel to?
(迈阿密存储为出发城市,以后使用,目的地城市提示)
我不能说这在所有情况下都有效,因为我不确定数据模型,但它似乎确实修复了示例,可能应该更新它。
顺便说一句 - Botframework 对话框调试器确实有助于调试。
https://marketplace.visualstudio.com/items?itemName=tomlm.vscode-dialog-debugger