Tutorial: usar o QnA Maker em seu bot para responder a perguntas

aplica-se a: SDK v4

Você pode usar o serviço de QnA Maker para criar uma base de dados de conhecimento para adicionar suporte de perguntas e respostas ao bot. Ao criar sua base de dados de conhecimento, você pode propagá-la com perguntas e respostas.

Neste tutorial, você aprenderá como:

  • Criar um serviço do QnA Maker e uma base de dados de conhecimento
  • Adicionar informações da base de conhecimento ao seu arquivo de configuração
  • Atualizar seu bot para consultar a base de dados de conhecimento
  • Republique seu bot

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • O bot criado no tutorial anterior. Você adicionará um recurso de pergunta e resposta ao bot.
  • É útil ter alguma familiaridade com o QnA Maker. Você usará o portal de QnA Maker para criar, treinar e publicar a base de dados de conhecimento para usar com o bot.
  • Familiaridade com a criação de bot de QnA usando o Serviço de Bot do Azure.
  • Maveninstalado, somente para Java.

Você também deve ter os pré-requisitos para o tutorial anterior.

Criar um serviço do QnA Maker e uma base de dados de conhecimento

Você importará uma definição de base de dados de conhecimento existente do exemplo QnA Maker no repositório BotBuilder-Samples .

  1. Clone ou copie o repositório de exemplos para seu computador.
  2. Entre no portal do QnA Maker com suas credenciais do Azure.
  3. Selecione criar uma base de dados de conhecimento no portal de QnA Maker.
    1. Se necessário, crie um serviço QnA. (Você pode usar um serviço QnA Maker existente ou criar um novo para este tutorial.) Para obter mais instruções sobre o QnA Maker, consulte Criar um serviço QnA Maker e Criar, treinar e publicar sua base de dados de conhecimento do QnA Maker.
    2. Conexão seu serviço de QnA Maker à sua base de dados de conhecimento.
    3. Nomeie sua base de dados de conhecimento.
    4. Para preencher sua base de dados de conhecimento, use o arquivo smartLightFAQ. tsv do repositório de exemplos. Se você tiver baixado os exemplos, atualize o arquivo smartLightFAQ.tsv do seu computador.
    5. Selecione criar seu KB para criar a base de dados de conhecimento.
  4. Selecione salvar e treinar.
  5. Selecione publicar para publicar sua base de dados de conhecimento.

Quando o aplicativo QnA Maker for publicado, selecione configurações e role para baixo até detalhes da implantação. Copie os seguintes valores da solicitação de exemplo http do postmaster .

POST /knowledgebases/<knowledge-base-id>/generateAnswer
Host: <your-hostname>  // NOTE - this is a URL ending in /qnamaker.
Authorization: EndpointKey <qna-maker-resource-key>

A cadeia de caracteres da URL completa para seu nome de host será semelhante a "https:// <knowledge-base-name> . Azure.net/qnamaker".

Esses valores serão usados dentro do arquivo de configuração do bot na próxima etapa.

A base de dados de conhecimento já está pronta para usar seu bot.

Adicionar informações da base de dados de conhecimento ao seu bot

Use as instruções a seguir para conectar seu bot em C#, JavaScript, Java ou Python à sua base de dados de conhecimento.

Adicione os seguintes valores a você appsetting.jsno arquivo:

{
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": "",
  "ScmType": "None",

  "QnAKnowledgebaseId": "knowledge-base-id",
  "QnAAuthKey": "qna-maker-resource-key",
  "QnAEndpointHostName": "your-hostname" // This is a URL ending in /qnamaker
}
Campo Valor
QnAKnowledgebaseId A ID da base de dados de conhecimento que o portal QnA Maker gerou para você.
QnAAuthKey (QnAEndpointKey em Python) A chave do ponto de extremidade que o portal QnA Maker gerou para você.
QnAEndpointHostName A URL do host que o portal QnA Maker gerou. Use a URL completa, começando com https:// e terminando com /qnamaker. A cadeia de caracteres de URL completa se parecerá com "https:// <knowledge-base-name> . Azure.net/qnamaker".

Agora salve suas edições.

Atualizar seu bot para consultar a base de dados de conhecimento

Atualize seu código de inicialização para carregar as informações de serviço para sua base de dados de conhecimento.

  1. Adicione o pacote NuGet Microsoft.Bot.Builder.AI.QnA ao projeto.

    você pode fazer isso por meio do gerenciador de pacotes NuGet ou da linha de comando:

    dotnet add package Microsoft.Bot.Builder.AI.QnA
    

    Para obter mais informações sobre o NuGet, consulte a Documentação do NuGet.

  2. No arquivo Startup. cs , adicione a seguinte referência de namespace.

    Startup.cs

    using Microsoft.Bot.Builder.AI.QnA;
    
  3. Modifique o ConfigureServices método em Startup. cs para criar um QnAMakerEndpoint objeto que se conecta à base de dados de conhecimento definida no appsettings.jsno arquivo.

    Startup.cs

    // Create QnA Maker endpoint as a singleton
    services.AddSingleton(new QnAMakerEndpoint
    {
        KnowledgeBaseId = Configuration.GetValue<string>("QnAKnowledgebaseId"),
        EndpointKey = Configuration.GetValue<string>("QnAAuthKey"),
        Host = Configuration.GetValue<string>("QnAEndpointHostName")
    });
    
  4. No arquivo EchoBot. cs , adicione as seguintes referências de namespace.

    Bots\EchoBot.cs

    using System.Linq;
    using Microsoft.Bot.Builder.AI.QnA;
    
  5. Adicione uma EchoBotQnA propriedade e adicione um construtor para inicializá-la.

    EchoBot.cs

    public QnAMaker EchoBotQnA { get; private set; }
    
    public EchoBot(QnAMakerEndpoint endpoint)
    {
       // connects to QnA Maker endpoint for each turn
       EchoBotQnA = new QnAMaker(endpoint);
    }
    
  6. Adicione um AccessQnAMaker método:

    EchoBot.cs

    private async Task AccessQnAMaker(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
       var results = await EchoBotQnA.GetAnswersAsync(turnContext);
       if (results.Any())
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("QnA Maker Returned: " + results.First().Answer), cancellationToken);
       }
       else
       {
          await turnContext.SendActivityAsync(MessageFactory.Text("Sorry, could not find an answer in the knowledge base."), cancellationToken);
       }
    }
    
  7. Atualize o OnMessageActivityAsync método para chamar o novo AccessQnAMaker método.

    EchoBot.cs

    protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
    {
        var replyText = $"Echo: {turnContext.Activity.Text}";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    
        await AccessQnAMaker(turnContext, cancellationToken);
    }
    

Testar o bot localmente

Neste ponto, seu bot deve ser capaz de responder a algumas perguntas. Execute o bot localmente e abra-o no Emulador.

Exemplo de interação com o bot e o QnA Maker.

Republique seu bot

Agora você pode republicar seu bot de volta no Azure. Você precisa compactar a pasta do projeto e, em seguida, executar o comando para implantar o bot no Azure. Para obter detalhes, leia o artigo implantar seu bot .

Compactar sua pasta de projeto

Com o uso da API de implantação de zip não configurada para implantar o código de seu bot, o comportamento do Aplicativo Web/Kudu será o seguinte:

O Kudu assume por padrão que as implantações a partir de arquivos zip estão prontas para serem executadas e não exigem etapas de compilação adicionais durante a implantação, como npm install ou dotnet restore/dotnet publish.

É importante incluir seu código compilado com todas as dependências necessárias no arquivo zip a ser implantado, caso contrário, seu bot não funcionará como esperado.

Importante

Antes de zipar os arquivos do projeto, verifique se você está na pasta do projeto do bot.

  • Para bots C#, será a pasta que tiver o arquivo .csproj.
  • Para bots JavaScript, será a pasta que tiver o arquivo app.js ou index.js.
  • Para bots TypeScript, será a pasta que inclui a pasta src (em que os arquivos bot.ts e index.ts estão).
  • Para bots Python, será a pasta que tem o arquivo app.py.

Dentro da pasta do projeto, certifique-se de selecionar todos os arquivos e pastas antes de executar o comando para criar o arquivo zip. Isso criará um arquivo zip na pasta do projeto. Se o local da pasta raiz estiver incorreto, o bot não será executado no portal do Azure.

Implantar seu código no Azure

Dica

Se o token de sessão expirou, execute az login novamente. Se você não estiver usando sua assinatura padrão, também Redefina sua assinatura.

Neste ponto, estamos prontos para implantar o código no aplicativo Web do Azure.

Execute o seguinte comando na linha de comando para executar a implantação usando o serviço de implantação de zip por push do kudu para um aplicativo web.

az webapp deployment source config-zip --resource-group "<resource-group-name>" --name "<name-of-web-app>" --src "<project-zip-path>"
Opção Descrição
resource-group O nome do grupo de recursos do Azure que contém o bot.
name Nome do Aplicativo Web que você usou anteriormente.
src O caminho para o arquivo de projeto compactado que você criou.

Observação

A conclusão dessa etapa pode levar alguns minutos. Além disso, pode levar mais alguns minutos entre a conclusão da implantação e a disponibilidade do bot para teste.

Se você não quiser continuar usando este aplicativo, exclua os recursos associados seguindo estas etapas:

  1. No portal do Azure, abra o grupo de recursos para seu bot.
  2. Selecione excluir grupo de recursos para excluir o grupo e todos os recursos que ele contém.
  3. Insira o nome do grupo de recursos no painel de confirmação e selecione excluir.

Próximas etapas

Para obter informações sobre como adicionar recursos ao seu bot, confira o artigo Enviar e receber mensagem de texto e os outros artigos da seção de instruções de desenvolvimento.