2016-05-03 8 views
4

Ich arbeite an einem Bot, wo man einen Flug buchen kann. Ich arbeite mit der neuesten Version des Bot-Frameworks (1.1), wie hier vorgeschlagen suggested.LUIS-Dialog zum Dialog verbinden und die richtigen Felder zuordnen

Sie können Dinge wie "Buchen Sie mir einen Flug von Amsterdam nach Boston nächsten Montag" sagen.

Nun, ich konfiguriert LUIS mit der Absicht, "BookFlight" zu reagieren und in meinem Bot Ich habe ein LuisDialog und FormDialog gemacht wie so:

[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; } 
} 

erhalte ich die folgende Antwort von Luis:

{ 
    "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" 
          } 
         } 
        ] 
       } 
      ] 
     } 
    ] 
} 

Das Problem

Das Formular wird mit den richtigen Werten von LUIS nicht gefüllt. Der Bot wird Sie also bitten, Ihren Abfahrtsort, das Datum und den Ort anzugeben, an den Sie fliegen möchten. Aber das ist bereits LUIS beschrieben.

Was ich versucht habe bisher

  1. eine neue App ohne Einheit Kinder gemacht, aber mit den richtigen Entitätsnamen wurden keine Werte in Form gefüllt.
  2. Umbenannt zur Laufzeit die 'Typen' von der Entität von 'Flug :: LocationTo' zu 'LocationTo' usw. Das hat funktioniert, aber es hat nicht für das Datum funktioniert.
  3. Die neue Instanz von 'BookFlightForm' wurde mit den richtigen Werten vorbelegt, aber der Bot wird immer noch nach den Werten des Datums fragen.

So bin ich ein wenig verwirrt, wie das zu beheben. Habe ich LUIS korrekt konfiguriert? Muss ich den EntityRecognizer konfigurieren? A LUIS entity attribute wäre nett.

Hoffe, du kannst mir helfen!

+0

Schnelle Frage. Wie haben Sie diese Struktur von departureDate in LUIS erhalten? Sie haben es als Ihre eigene Entity "departureDate", aber es ist auch eine "builtind.datetime.date", was bedeutet, dass Sie das Datum auflösen können. – Arcadia

Antwort

2

Ihr Luis-Entitätstyp sollte mit dem Feldnamen in Ihrem Formular übereinstimmen. Wenn Sie "type": "Flight::LocationFrom" zu "type": "LocationFrom" für Ihre Luis-Entität ändern, sollte Formularablauf die Entität mit dem Feld LocationFrom in Ihrem Formular übereinstimmen und es korrekt ausfüllen.

+0

Vielen Dank für Ihre Antwort. Ich habe meine eigenen Entitäten entfernt und sie durch Build-Entitäten ersetzt. Aber jetzt habe ich zwei Standorte mit den Geografie-Entitäten. Woher weiß ich, welcher ist welcher? – Aldentev

+1

Wahrscheinlich können Sie 'startIndex' und' endIndex' in der EntityRecommendation-Liste verwenden, um den from- und to-Speicherort zu disambiguieren. –