2017-09-25 33 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

也许只是重新创建识别器? –