2017-02-27 11 views
1

私は既存の滝の会話をしています。ボットの質問に対するより複雑なユーザーの応答からデータを抽出できるように、私はそれを適合させたいと考えています。Microsoft Bot Framework LUIS with waterfall conversation

私のLUISアプリケーションではLocationというエンティティを見つけるために訓練されたGetLocationというインテントを作成しました。これの一例は、ユーザーが "Bristol in looking in Bristol"と入力して、エンティティ "Bristol"と一致することです。

function(session) { 
     builder.Prompts.text(session, "Hello... Which city are you looking in?"); 
}, 
function(session, results) { 
    session.privateConversationData.city = results.response; 
    builder.Prompts.number(session, "Ok, you are looking in " + results.response + ", How many bedrooms are you looking for?"); 
}, 
etc... 

代わりに単に応答文字列を格納するので、私はLUISを切っ応答文字列を送信し、そこから街の場所を抽出したい:これは私が現在持っているものです。私が見つけたすべてのLUISの例は、マッチングして新しいインテントに行くのですが、私は単にウォーターフォールの会話を続けたいと思っています。これを行うにはどのようにLUISを利用しますか?

答えて

0

私はあなたが二つの異なるダイアログのセットアップを持っていることによって、これを行うことができると思います。

ダイアログ1:

これは、あなたが上記の持っているダイアログ、会話を駆動する通常の滝のダイアログです。

ダイアログ2:

このダイアログでは、あなたのLUISモデルを使用してLUISテント認識装置を使用して作成されます。ダイアログ1はプロンプトを発行し、ユーザーをこのダイアログに引き渡し、ユーザーが入力したテキストを解析します。あなたのモデルはすでに位置を認識するように訓練されているので、今すぐ実行する必要があるのはエンティティを抽出することだけです。

ダイアログ2がLUISを使用して位置情報を解析してエンティティを抽出した後で、ダイアログを終了してエンティティ(場所)をダイアログ1に戻します。これはまだDialog Stackです。


あなたが場所のユーザを促し、その後、あなたはあなたのLUISに会話に合格していますsession.beginDialog("/begin_loc_parse")を呼び出すルートダイアログ内したがって、基本的にコード

//create intent recognizer based on LUIS model 
var luisModel = "<Your LUIS Model URL>"; 
var recognizer = new botbuilder.LuisRecognizer(luisModel); 
//create dialog handler for info to be parsed by LUIS 
var dialog = new botbuilder.IntentDialog({ recognizers: [recognizer] }); 

//root dialog 
bot.dialog("/", [ 
    function(session){ 

     //prompt user and pop LUIS intent dialog onto dialog stack 
     session.send("Hello, which city are you looking in?"); 
     session.beginDialog("/begin_loc_parse"); 

    }, 

    //this will be resumed after our location has been extracted 
    function(session, results){ 

     //check for extracted location 
     if(results.entity){ 
      //got location successfully 
      session.send("Got city from user: " + results.entity); 

      //resume normal waterfall with location..... 

     } else { 
      //start over 
      session.beginDialog("/"); 
     } 
    } 
]); 

//LUIS intent dialog 
dialog.matches("input_location", function(session, args){ 

    //grab location entity 
    var city = botbuilder.EntityRecognizer.findEntity(args.entities, "builtin.geography.city"); 

    if(city){ 
     //pop the LUIS dialog off of the dialog stack 
     //and return the extracted location back to waterfall 
     session.endDialogWithResult(city); 
    } else session.endDialog("Couldn't extract city entity."); 

}); 

//called if user doesn't enter something like "I am looking in [city]" 
dialog.onDefault(function(session, args){ 
    session.send("I'm sorry, I didn't quite catch that. In which city are you looking?"); 
}); 

、インテントダイアログ。

この時点以降にユーザーが入力したテキストは、LUISモデルによって解釈されます。これにより、モデルを使用して、ユーザーからの位置情報を認識して抽出することができます。

次に、キーはsession.endDialogWithResult()を使用してスタックからLUISダイアログをポップし、新しく抽出された場所で元の滝に戻ります。

関連する問題