为什么';t botframework实验自适应corebot C#sample SetProperty()保存LUIS返回的实体?

为什么';t botframework实验自适应corebot C#sample SetProperty()保存LUIS返回的实体?,c#,json,botframework,chatbot,azure-language-understanding,C#,Json,Botframework,Chatbot,Azure Language Understanding,我正在尝试让下面的示例机器人工作 我可以使用Bot框架模拟器成功地运行它并连接到它 以下对话有效: 预订航班 您的出发城市是哪里? 迈阿密 您想去哪里旅行? 达拉斯 您的出发日期是什么时候? 明天 你觉得这样合适吗?我让您于2020-03-13从迈阿密前往达拉斯 对 我帮你订了2020-03-13从迈阿密到达拉斯的机票 问题是当我试图预订一个航班,同时提供一个城市 “预订迈阿密的航班” -你的出发城市是什么 我的理解是机器人应该识别实体迈阿密作为出发城市,然后询问目的地城市 我相信Root

我正在尝试让下面的示例机器人工作

我可以使用Bot框架模拟器成功地运行它并连接到它

以下对话有效:

预订航班

  • 您的出发城市是哪里?
    迈阿密
  • 您想去哪里旅行?
    达拉斯
  • 您的出发日期是什么时候?
    明天
  • 你觉得这样合适吗?我让您于2020-03-13从迈阿密前往达拉斯 对
  • 我帮你订了2020-03-13从迈阿密到达拉斯的机票
问题是当我试图预订一个航班,同时提供一个城市

“预订迈阿密的航班” -你的出发城市是什么

我的理解是机器人应该识别实体迈阿密作为出发城市,然后询问目的地城市

我相信RootDialog.cs文件(我使用的是直接来自示例的文件)使用了书中的SetProperty()来实现这一点

我以为SetProperty()操作会存储实体

Value = "@fromCity.location"
在财产中

Property = "conversation.flightBooking.destinationCity"
随后,TextInput将使用提示

Prompt = new ActivityTemplate("@{PromptForMissingInformation()}")
在RootDialog.lg文件中读取

#提示信息
-如果:@{conversation.flightBooking.departureCity==null}
-@{promptfordeparturancy()}
-ELSEIF:@{conversation.flightBooking.destinationCity==null}
-@{PromptForDestinationCity()}
-ELSEIF:@{conversation.flightBooking.departureDate==null}
-@{PromptForTravelDate()}
-其他:
-@{confirbooking()}
如果已经提供/存储,则不应提示出发城市

我还查看了使用机器人框架模拟器中的LUIS trace从LUIS返回的结果。路易斯似乎正确地识别了飞行意图书和来自城市的实体迈阿密

{
  "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()操作,并且bot仍能正常工作。此示例bot是否适用于其他人?我错过了什么


任何帮助都将不胜感激。

看来已识别的实体存储在一个数组中,需要通过SetProperty()操作的值表达式中的长格式进行访问

命运也是如此

Value = "turn.recognized.entities.toCity[0].location"
出发日期

Value = "turn.recognized.entities.datetime[0].timex[0]"
如果原始消息中提供了实体,则这些更改允许存储实体,而不要求它们。比如说,

预订从迈阿密起飞的航班
-你想去哪里旅游?
(迈阿密存储为出发城市,稍后使用,目的地城市为提示)

我不能说这在所有情况下都有效,因为我不确定数据模型,但它似乎修复了示例,可能应该更新

顺便说一句,Botframework对话框调试器有助于调试


似乎已识别的实体存储在数组中,需要通过SetProperty()操作的值表达式中的长格式进行访问

命运也是如此

Value = "turn.recognized.entities.toCity[0].location"
出发日期

Value = "turn.recognized.entities.datetime[0].timex[0]"
如果原始消息中提供了实体,则这些更改允许存储实体,而不要求它们。比如说,

预订从迈阿密起飞的航班
-你想去哪里旅游?
(迈阿密存储为出发城市,稍后使用,目的地城市为提示)

我不能说这在所有情况下都有效,因为我不确定数据模型,但它似乎修复了示例,可能应该更新

顺便说一句,Botframework对话框调试器有助于调试


如果可以接受,请接受您自己的答案;如果希望进行更改,请在相应的GitHub repo中发布。如果可以接受,请接受您自己的答案;如果希望进行更改,请在相应的GitHub repo中发布