2016-05-03 3 views
4

私はフライトの予約が可能なボットに取り組んでいます。私はここで提案したsuggestedとして、最新のバージョンのボットフレームワーク(1.1)で作業しています。LUISダイアログをフォームダイアログに接続し、右のフィールドをマッピング

"私はアムステルダム発ボストン行き次の月曜日に飛行機を予約してください"のように言うことができます。

は今、私が意図「BookFlight」で応答するLUISを設定して、私のボットに私はそうのよう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'などのエンティティの 'types'を実行時に変更しました。これは機能しましたが、その日付では機能しませんでした。
  3. 正しい値で 'BookFlightForm'の新しいインスタンスをあらかじめ埋め込みましたが、ボットは引き続き日付の値を要求します。

私は少しこれを修正する方法が困惑しています。私はLUISを正しく構成しましたか? EntityRecognizerを設定する必要はありますか? LUIS entity attributeがいいでしょう。

私を助けることができますように!

+0

クイック質問。あなたはLUISでこのdepartureDate構造をどのように取得しましたか?独自のエンティティ "departureDate"として持っていますが、 "builtin.datetime.date"でもあり、これによって日付を解決できます。 – Arcadia

答えて

2

あなたのLuisエンティティタイプは、フォームのフィールド名と一致する必要があります。 Luisエンティティの"type": "Flight::LocationFrom""type": "LocationFrom"に変更すると、フォームのフローがフォームのLocationFromフィールドのエンティティと一致し、正しく入力する必要があります。

+0

あなたの答えをありがとう。私は自分のエンティティを削除し、それらをbuildinエンティティに置き換えました。しかし、私は地理エンティティを持つ2つの場所を持っています。どれがどれであるかをどのように知るのですか? – Aldentev

+1

おそらく、EntityRecommendationリストで 'startIndex'と' endIndex'を使って、fromとtoの位置を明確にすることができます。 –

関連する問題