Usar o QnA Maker para responder a perguntas

aplica-se a: SDK v4

O QnA Maker fornece uma camada de pergunta e resposta de conversa sobre seus dados. Isso permite que o bot envie uma pergunta ao QnA Maker e receba uma resposta sem a necessidade de analisar e interpretar a intenção de pergunta.

Um dos requisitos básicos para a criação de seu próprio serviço QnA Maker é preenchê-lo com perguntas e respostas. Em muitos casos, as perguntas e respostas já existem no conteúdo, como as perguntas frequentes ou outra documentação; outras vezes, talvez seja conveniente personalizar as respostas às perguntas de forma mais natural e coloquial.

Pré-requisitos

Sobre este exemplo

Para usar o QnA Maker em seu bot, você precisa criar uma base de dados de conhecimento no portal do QnA Maker, conforme mostrado na próxima seção. Em seguida, o bot pode usar a base de dados de conhecimento para responder às perguntas do usuário.

Fluxo lógico do QnABot

OnMessageActivityAsync é chamado em cada entrada do usuário recebida. Quando chamado, ele acessa informações armazenadas no arquivoappsetting.jsno código de exemplo para encontrar o valor a ser conectado à sua base de dados de conhecimento _configuration QnA Maker pré-configurada.

A entrada do usuário é enviada à sua base de dados de conhecimento e a melhor resposta retornada é exibida para o usuário.

Criar um serviço do QnA Maker e publicar uma base de Conhecimento

  1. Crie um serviço do QnA Maker.
  2. Crie uma base de dados de conhecimento usando o arquivo smartLightFAQ.tsv localizado na pasta CognitiveModels do projeto de amostra. Nomeia sua base de dados de conhecimento como qna e use o arquivo smartLightFAQ.tsv para populá-lo.

Você também pode usar essas etapas para acessar as suas próprias bases de dados de conhecimento do QnA Maker.

Observação

A documentação do QnA Maker tem instruções sobre como criar um serviço no Azure e como criar, treinar e publicar a sua base de dados de conhecimento.

Obtenha os valores para conectar seu bot à base de conhecimento

  1. No site do QnA Maker, selecione sua base de conhecimento.
  2. Com sua base de dados de conhecimento aberta, selecione a guia CONFIGURAÇÕES. Grave o valor mostrado para o nome do serviço. Esse valor é útil para localizar sua base de dados de conhecimento de interesse ao usar a interface do portal do QnA Maker. Ele não é usado para conectar seu aplicativo de bot a essa base de dados de conhecimento.
  3. Scroll down para encontrar detalhes da implantação e registrar os seguintes valores da solicitação HTTP de exemplo do Postman:
    • POST /knowledgebases/<knowledge-base-id>/generateAnswer
    • Host: <your-host-url>
    • Autorização: EndpointKey <your-endpoint-key>

A URL do host começará com https:// e terminará com /qnamaker, como https:// .azure.net/qnamaker. O bot precisará da ID da base de dados de conhecimento, da URL do host e da chave do ponto de extremidade para se conectar à sua base de dados de conhecimento do QnA Maker.

Atualizar o arquivo de configurações

Primeiro, adicione ao arquivo de configurações as informações necessárias para acessar a sua base de dados de conhecimento, incluindo nome do host, a chave de ponto de extremidade e a kbId (ID da base de dados de conhecimento). Esses são os valores salvos na guia CONFIGURAÇÕES da sua base de dados de conhecimento QnA Maker.

Se essa implantação não for para produção, os campos de senha e a ID do aplicativo do seu bot poderão ser deixados em branco.

Observação

Para adicionar uma base de dados de conhecimento do QnA Maker em um aplicativo bot existente, certifique-se de adicionar títulos informativos para as suas entradas do QnA. O valor "name" dessa seção fornece a chave necessária para acessar essas informações de dentro de seu aplicativo.

appsettings.json

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "QnAKnowledgebaseId": "",
  "QnAEndpointKey": "",
  "QnAEndpointHostName": ""
}

Configurar a instância do QnA Maker

Primeiro, criamos um objeto para acessar nossa base de dados de conhecimento do QnA Maker.

Verifique se o pacote do NuGet Microsoft.Bot.Builder.AI.QnA está instalado para o seu projeto.

Em QnABot.cs, no OnMessageActivityAsync método , crie uma instância do QnAMaker. A classe também é onde os nomes das informações de conexão, salvos QnABot emappsettings.jsacima, são retirados. Se você tiver escolhido nomes diferentes para as informações de conexão da base de conhecimento no seu arquivo de configurações, procure atualizar os nomes aqui para refletir o nome escolhido.

Bots/QnABot.cs

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

Chamar o QnA Maker de seu bot

Quando o bot precisar de uma resposta do QnAMaker, chame o método do código do bot para obter a resposta apropriada GetAnswersAsync com base no contexto atual. Se você estiver acessando sua própria base de dados de conhecimento, altere a mensagem Sem respostas encontradas abaixo para fornecer instruções úteis para seus usuários.

Bots/QnABot.cs

var options = new QnAMakerOptions { Top = 1 };

// The actual call to the QnA Maker service.
var response = await qnaMaker.GetAnswersAsync(turnContext, options);
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);
}

Testar o bot

Execute o exemplo localmente em seu computador. caso ainda não tenha feito isso, instale o Bot Framework Emulator. Para obter mais instruções, consulte a amostra do README (C#, JavaScript, Python).

inicie o Emulator, conecte-se ao bot e envie uma mensagem, conforme mostrado abaixo.

exemplo de qna de teste

Informações adicionais

A amostra de QnA Maker Multiturn (C#, JavaScript, Java, Python) mostra como usar uma caixa de diálogo QnA Maker para dar suporte ao prompt de acompanhamento do QnA Maker e aos recursos de aprendizado ativo.

  • O QnA Maker dá suporte a avisos de acompanhamento, também conhecidos como prompts de vários turnos. Se a base de dados de conhecimento do QnA Maker exigir uma resposta adicional do usuário, o QnA Maker enviará informações de contexto que você poderá usar para enviar avisos ao usuário. Essas informações também são usadas para fazer qualquer chamada de acompanhamento para o serviço QnA Maker. Na versão 4.6, o SDK do Bot Framework adicionou suporte para esse recurso.

    Para construir essa base de dados de conhecimento, consulte a documentação QnA Maker sobre como Usar avisos de acompanhamento para criar várias rodadas de uma conversa.

  • O QnA Maker também dá suporte a sugestões de aprendizado ativo, permitindo que a base de dados de conhecimento seja aprimorada ao longo do tempo. O diálogo do QnA Maker dá suporte a comentários explícitos para o recurso de aprendizado ativo.

    Para habilitar esse recurso em uma base de dados de conhecimento, consulte a documentação do QnA Maker sobre Sugestões de aprendizado ativo.

Próximas etapas

O QnA Maker pode ser combinado com outros Serviços Cognitivos, para tornar seu bot ainda mais poderoso. A ferramenta de expedição fornece uma forma de combinar QnA com Reconhecimento Vocal (LUIS) no seu bot.