2017-09-25 30 views
1

我有運行多個QNA服務,每個都有它自己的knowledgeBaseIdsubscriptionKey。我想在一個聊天機器人使用他們兩個和我寫一段代碼,這需要用戶輸入和分配正確的知識庫細節。但是,我無法使第二個QnA服務變爲活動狀態,並且該機器人僅鏈接到第一個服務。這裏可能會出現什麼問題?使用多個QNA服務

示例代碼:

var knowledgeId = "FIRST_QNA_SERVICE_KNOWLEDGE_ID"; 
var subscriptionId = "FIRST_QNA_SERVICE_SUBSCRIPTION_ID"; 

var bot = new builder.UniversalBot(connector); 

var qnarecognizer = new cognitiveservices.QnAMakerRecognizer({ 
    knowledgeBaseId: knowledgeId, 
    subscriptionKey: subscriptionId, 
    qnaThreshold:0.3, 
    top:1}); 

var intentrecognizer = new builder.IntentDialog(); 

var intents = new builder.IntentDialog({ recognizers: [intentrecognizer, qnarecognizer] }); 
bot.dialog('/', intents); 

intents.matches('qna', [ 
    function (session, args, next) { 
      args.entities.forEach(function(element) { 
      session.send(element.entity);  
     }, this);   
    } 
]); 

intents.matchesAny([/hi/i, /main menu/i], [ 
    function (session) { 
    builder.Prompts.choice(session, "Hi, What would you like to ask me about?", ["Service1","Service2"],{ listStyle: builder.ListStyle.button}); 

    }, 

     function (session, result) { 
    var selection = result.response.entity; 
      switch (selection) { 
       case "Service1": 
        knowledgeId = "FIRST_QNA_SERVICE_KNOWLEDGE_ID"; 
        subscriptionId = "FIRST_QNA_SERVICE_SUBSCRIPTION_ID"; 
        session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.') 
        session.endConversation(); 
        return 

       case "Service2": 
        knowledgeId = "SECOND_QNA_SERVICE_KNOWLEDGE_ID"; 
        subscriptionId = "SECOND_QNA_SERVICE_SUBSCRIPTION_ID"; 
        session.send('You can now ask me anything about '+selection+'. Type \'main menu\' anytime to choose a different topic.') 
        session.endConversation(); 
        return 

      } 
    } 

]) 

回答

0

你永遠不更新了knowledgeId/subscriptionId的QnAMakerRecognizer ......這就是你總是看到第一QNA服務被調用的原因。

查看是否有更新的QnAMakerRecognizer這些值的方式。

+0

無法得到它的更新。你能告訴我一個方法嗎? – Anish

+0

也許只是重新創建識別器? –