2016-05-03 23 views
4

我正在研究一個可以預訂航班的機器人。我正在使用最新版本的bot框架(1.1),因爲這裏提供了suggested連接LUIS對話框以形成對話框並映射正確的字段

你可以說「下週一預定我從阿姆斯特丹飛往波士頓的航班」。

現在,我配置LUIS與意圖「的bookFlight」在我的BOT我做了一個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描述。

什麼我試過到目前爲止

  1. 做了一個新的應用程序,沒有實體孩子,但與正確的實體名稱,沒有值填寫表格。
  2. 在運行時將實體的'類型'從'Flight :: LocationTo'重命名爲'LocationTo'等等。這有效,但它不適用於該日期。
  3. 使用正確的值預填充'BookFlightForm'的新實例,但機器人仍會詢問日期的值。

所以我有點困惑如何解決這個問題。我是否正確配置LUIS?我需要配置EntityRecognizer嗎? A LUIS entity attribute會很好。

希望你能幫助我!

+0

快速的問題。你是如何在LUIS獲得這種出發日期結構的?您將它作爲自己的實體「departureDate」,但它也是「builtin.datetime.date」,這意味着您可以解析日期。 – Arcadia

回答

2

您的Luis實體類型應該與表單中的字段名稱匹配。如果您爲您的Luis實體更改"type": "Flight::LocationFrom""type": "LocationFrom",表單流應與表單中的LocationFrom字段匹配,並正確填充它。

+0

謝謝你的回答。我已經刪除了自己的實體並用buildin實體替換了它們。但是現在我有兩個地理實體。我怎麼知道哪一個是哪個? – Aldentev

+1

可能你可以在EntityRecommendation列表中使用'startIndex'和'endIndex'來消除來自和去往的位置。 –