Последующие запросы в настоящее время не поддерживаются вне коробки на портале 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);
}
Соответствующий код находится в этом файле , поскольку вы можете видеть, что для сохранения хода выполнения последующих подсказок требуется дополнительный код, поэтому, возможно, будет проще подключить данные вашей базы знаний. к примеру, попробуйте его, чтобы увидеть, как он работает, прежде чем переносить его в свой бот.