База знаний QnA Maker возвращает "Не найдено подходящего соответствия в КБ" для последующих запросов - PullRequest
1 голос
/ 10 июля 2019

У меня возникла проблема с моей базой знаний QnA, в которой он перенастраивается. "Не найдено подходящего совпадения в КБ" при использовании последующих запросов, которые я настроил для возврата ответа.

У меня настроено c.200 пар вопросов / ответов, и у всех них есть дополнительные подсказки, связывающие каждую пару вопросов / ответов с другими парами вопросов / ответов. Однако, когда я тестирую базу знаний в QnA Maker, я получаю ответ «В КБ ответ не найден».

Ниже приведен пример:

У меня есть пара вопросов / ответов, чтобы ответить на вопрос «Что такое депрессия», в которой есть пять различных последующих запросов - Распространенность, причины, типы, симптомы и связанные с ними проблемы:

Image of ‘What is depression’ QnA question/answer pair

Как вы можете видеть на следующем изображении, последующее приглашение Prevalence настроено на ответ с использованием пары вопросов / ответов "Насколько распространена депрессия":

Image of Prevalence follow-up prompt configuration

Однако, когда я проверяю это с помощью встроенного тестового чата QnA Maker, я получаю ответ: «В КБ не найдено хорошего совпадения»:

Image of Prevalence follow-up prompt answer in test chatbot

Когда я проверяю результат, я вижу следующее:

Image of inspection of Prevalence follow-up prompt answer

Как видите, ответ не возвращен, а показатель доверия - "Нет".

Кто-нибудь еще видел эту проблему раньше и есть решение?

Ответы [ 2 ]

2 голосов
/ 10 июля 2019

Последующие запросы в настоящее время не поддерживаются вне коробки на портале QnA Maker. Доступны экспериментальные образцы C # и NodeJS , демонстрирующие, как вы можете интегрировать эту функциональность в своего бота.

Поскольку вы не указали языковые предпочтения, я остановлюсь на C #, в основном ваш код QnA необходимо обновить примерно так:

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

var response = await qnaMaker.GetAnswersAsync(turnContext);

if (response != null && response.Length > 0)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    await turnContext.SendActivityAsync(MessageFactory.Text("No QnA Maker answers were found."), cancellationToken);
}

до:

var qnaMaker = new QnAMaker(new QnAMakerEndpoint
{
    KnowledgeBaseId = _configuration["QnAKnowledgebaseId"],
    EndpointKey = _configuration["QnAEndpointKey"],
    Host = _configuration["QnAEndpointHostName"]
},
null,
httpClient);

var response = await qnaMaker.GetAnswersAsync(turnContext);
var qnaAnswer = response[0].Answer;
var prompts = response[0].Context?.Prompts;

if (prompts == null || prompts.Length < 1)
{
    await turnContext.SendActivityAsync(MessageFactory.Text(response[0].Answer), cancellationToken);
}
else
{
    // Set bot state only if prompts are found in QnA result
    newState = new QnABotState
    {
        PreviousQnaId = response[0].Id,
        PreviousUserQuery = query
    };

    outputActivity = CardHelper.GetHeroCard(qnaAnswer, prompts);
}

Соответствующий код находится в этом файле , поскольку вы можете видеть, что для сохранения хода выполнения последующих подсказок требуется дополнительный код, поэтому, возможно, будет проще подключить данные вашей базы знаний. к примеру, попробуйте его, чтобы увидеть, как он работает, прежде чем переносить его в свой бот.

0 голосов
/ 11 июля 2019

С помощью Мэтта мы провели некоторое тестирование чат-портала по сравнению с API QnA и обнаружили, что есть ошибка с чат-ботом портала, поскольку API возвращает ответы, как и ожидалось.Я продолжаю, публикуя подробности об этом в качестве отзыва на странице документации BotFramework здесь

...