Usar vários modelos LUIS e QnA com Orchestrator

APLICA-SE A: SDK v4

Observação

O QnA Maker de IA do Azure será desativado em 31 de março de 2025. A partir de 1º de outubro de 2022, você não poderá criar novos recursos ou bases de dados de conhecimento do QnA Maker. Uma versão mais recente da funcionalidade de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure.

Respostas às perguntas personalizadas, um recurso da Linguagem de IA do Azure, é a versão atualizada do serviço QnA Maker. Para obter mais informações sobre o suporte a perguntas e respostas no SDK do Bot Framework, consulte Compreensão da linguagem natural.

Observação

Reconhecimento vocal (LUIS) será desativado em 1º de outubro de 2025. A partir de 1º de abril de 2023, você não poderá criar novos recursos do LUIS. Uma versão mais recente do reconhecimento vocal agora está disponível como parte da Linguagem de IA do Azure.

O CLU (reconhecimento vocal de conversa), um recurso da Linguagem de IA do Azure, é a versão atualizada do LUIS. Para obter mais informações sobre o suporte à compreensão da linguagem no SDK do Bot Framework, consulte Reconhecimento de linguagem natural.

Se um bot usar vários modelos de Reconhecimento vocal (LUIS) e bases de dados de conhecimento do QnA Maker, você poderá usar o Bot Framework Orchestrator para determinar qual modelo luis ou QnA Maker base de dados de conhecimento melhor corresponde à entrada do usuário. Você pode usar o comando da bf orchestrator CLI para criar um arquivo de instantâneo do Orchestrator e, em seguida, usar o arquivo instantâneo para rotear a entrada do usuário para o modelo correto em tempo de execução.

Este artigo descreve como usar um QnA Maker base de dados de conhecimento existente com o Orchestrator.

Pré-requisitos

Sobre este exemplo

Este exemplo é baseado em um conjunto predefinido de projetos do LUIS e do QnA Maker. No entanto, para usar o QnA Maker em seu bot, você precisa de uma base de dados de conhecimento existente no portal do QnA Maker. Em seguida, o bot pode usar a base de dados de conhecimento para responder às perguntas do usuário.

Para o desenvolvimento de novos bots, considere usar o Power Virtual Agents. Se você precisar criar um novo base de dados de conhecimento para um bot do SDK do Bot Framework, confira os seguintes artigos sobre os serviços de IA do Azure:

Diagrama de classe C#.

OnMessageActivityAsync é chamado em cada entrada do usuário recebida. Esse módulo localiza a intenção do usuário com a maior pontuação e transmite o resultado a DispatchToTopIntentAsync. DispatchToTopIntentAsync, por sua vez, chama o manipulador de aplicativo apropriado.

  • ProcessSampleQnAAsync – para perguntas frequentes sobre bot.
  • ProcessWeatherAsync: para consultas de previsão do tempo.
  • ProcessHomeAutomationAsync: para comandos de iluminação doméstica.

O manipulador chama o serviço LUIS ou QnA Maker e retorna o resultado gerado para o usuário.

Criar aplicativos LUIS

Antes de criar um arquivo de instantâneo do Orchestrator, você precisa de aplicativos LUIS e bases de dados de conhecimento QnA criadas e publicadas. O bot de exemplo referenciado neste artigo usa os seguintes modelos, incluídos com o exemplo NLP With Orchestrator na \CognitiveModels pasta:

Nome Descrição
HomeAutomation Um aplicativo LUIS que reconhece uma intenção de automação residencial com dados de entidade associados.
Clima Um aplicativo LUIS que reconhece intenções relacionadas ao clima com os dados de localização.
QnAMaker Uma base de dados de conhecimento do QnA Maker que fornece respostas a perguntas simples sobre o bot.

Crie o LUIS aplicativos

Crie aplicativos LUIS com base nos arquivos HomeAutomation e Weather .lu no diretório de modelos cognitivos do exemplo.

  1. Execute o comando a seguir para importar, treinar e publicar o aplicativo no ambiente de produção.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Registre as IDs do aplicativo, os nomes de exibição, a chave de criação e a localização.

Para obter mais informações, confira como Criar um aplicativo LUIS no portal do LUIS e Obter valores para se conectar ao seu aplicativo LUIS em Adicionar compreensão de linguagem natural ao bot e a documentação do LUIS sobre como treinar e publicar um aplicativo no ambiente de produção.

Obtenha os valores para conectar seu bot à base de conhecimento

Observação

O QnA Maker de IA do Azure será desativado em 31 de março de 2025. A partir de 1º de outubro de 2022, você não poderá criar novos recursos ou bases de dados de conhecimento do QnA Maker. Uma versão mais recente da funcionalidade de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure.

Respostas às perguntas personalizadas, um recurso da Linguagem de IA do Azure, é a versão atualizada do serviço QnA Maker. Para obter mais informações sobre o suporte a perguntas e respostas no SDK do Bot Framework, consulte Compreensão da linguagem natural.

Você precisa de um base de dados de conhecimento existente e seu nome de host e chave de ponto de extremidade do QnA Maker.

Dica

A documentação do QnA Maker tem instruções sobre como criar, treinar e publicar seus base de dados de conhecimento.

Criar o arquivo de instantâneo do Orchestrator

A interface da CLI para a ferramenta Orchestrator cria o arquivo orchestrator instantâneo para roteamento para o aplicativo LUIS ou QnA Maker correto em tempo de execução.

  1. Instalar a versão mais recente com suporte do pacote Pacote Redistribuível do Visual C++

  2. Abra um prompt de comando ou uma janela de terminal e altere os diretórios para o diretório de exemplo

  3. Verifique se você tem a versão atual do npm e da CLI do Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Baixar o arquivo de modelo base do Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Criar o arquivo de instantâneo do Orchestrator

    mkdir generated
    bf orchestrator:create --hierarchical --in ./CognitiveModels --out ./generated --model ./model
    

Instalar pacotes

Antes de executar esse aplicativo pela primeira vez, verifique se vários pacotes NuGet estão instalados:

  • Microsoft.Bot.Builder
  • Microsoft.Bot.Builder.AI.Luis
  • Microsoft.Bot.Builder.AI.QnA
  • Microsoft.Bot.Builder.AI.Orchestrator

Atualizar manualmente o arquivo appsettings.json

Depois que todos os aplicativos de serviço forem criados, as informações para cada um precisarão ser adicionadas ao arquivo “appsettings.json”. O exemplo inicial do código C# (arquivado) contém um arquivo appsettings.json vazio:

appsettings.json

C# (arquivado)

Para cada uma das entidades mostradas abaixo, adicione os valores que você registrou anteriormente nas instruções:

"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",

"LuisHomeAutomationAppId": "<app-id-for-home-automation-app>",
"LuisWeatherAppId": "<app-id-for-weather-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",

Quando todas as alterações tiverem sido concluídas, salve esse arquivo.

Conectar-se aos serviços do seu bot

Para se conectar aos serviços LUIS e QnA Maker, o bot extrai informações do arquivo de configurações.

Em BotServices.cs, as informações contidas no arquivo de configuração appsettings.json são usadas para conectar o bot do Orchestrator aos HomeAutomationserviços e WeatherSampleQnA . Os construtores usam os valores fornecidos para se conectarem a esses serviços.

BotServices.cs

C# (arquivado)

Chamar os serviços do seu bot

Para cada entrada do usuário, a lógica do bot passa a entrada do usuário para o Orchestrator Recognizer, localiza a intenção retornada superior e usa essas informações para chamar o serviço apropriado para a entrada.

No arquivo DispatchBot.cs sempre que o OnMessageActivityAsync método é chamado, marcar a mensagem de usuário de entrada e obtemos a intenção superior do Orchestrator Recognizer. Em seguida, passamos o topIntent e recognizerResult para o método correto para chamar o serviço e retornar o resultado.

bots\DispatchBot.cs

C# (arquivado)

Trabalhar com os resultados de reconhecimento

Quando o reconhecedor orchestrator produz um resultado, ele indica qual serviço pode processar mais adequadamente o enunciado. O código neste bot encaminha a solicitação para o serviço correspondente e, então, resume a resposta do serviço chamado. Dependendo da intenção retornada do Orchestrator, esse código usa a intenção retornada para rotear para o modelo luis correto ou serviço QnA.

bots\DispatchBot.cs

C# (arquivado)

Os ProcessHomeAutomationAsync métodos e ProcessWeatherAsync usam a entrada do usuário contida no contexto de turno para obter a intenção e as entidades superiores do modelo luis correto.

O ProcessSampleQnAAsync método usa a entrada do usuário contida no contexto de turno para gerar uma resposta do base de dados de conhecimento e exibir esse resultado para o usuário.

Observação

Se fosse um aplicativo de produção, aqui é onde os métodos LUIS selecionados se conectariam ao serviço especificado, transmitiriam a entrada do usuário e processariam a intenção do LUIS e os dados de entidade retornados.

Testar seu bot

  1. Usando o ambiente de desenvolvimento, inicie o código de exemplo. Observe o endereço localhost mostrado na barra de endereços da janela do navegador aberta pelo aplicativo: https://localhost:<Port_Number>.

  2. Abra Bot Framework Emulator, clique no botão Abrir Bot.

  3. Na caixa de diálogo Abrir um bot , insira a URL do ponto de extremidade do bot, como http://localhost:3978/api/messages. Clique em Conectar.

  4. Para sua referência, aqui estão algumas das perguntas e dos comandos cobertos pelos serviços criados para o bot:

    • QnA Maker
      • hi, good morning
      • what are you, what do you do
    • LUIS (automação doméstica)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS (clima)
      • whats the weather in redmond washington
      • what's the forecast for london
      • show me the forecast for nebraska

Encaminhar o enunciado do usuário para o QnA Maker

  1. No Emulador, insira o texto hi e envie o enunciado. O bot envia essa consulta ao Orchestrator e obtém uma resposta indicando qual aplicativo filho deve obter esse enunciado para processamento adicional.

  2. Selecionando a Orchestrator Recognition Trace linha no log, você pode ver a resposta JSON no Emulador. O resultado do Orchestrator é exibido no Inspetor.

    {
    "type": "trace",
    "timestamp": "2021-05-01T06:26:04.067Z",
    "serviceUrl": "http://localhost:58895",
    "channelId": "emulator",
    "from": {
      "id": "36b2a460-aa43-11eb-920f-7da472b36492",
      "name": "Bot",
      "role": "bot"
    },
    "conversation": {
      "id": "17ef3f40-aa46-11eb-920f-7da472b36492|livechat"
    },
    "recipient": {
      "id": "5f8c6123-2596-45df-928c-566d44426556",
      "role": "user"
    },
    "locale": "en-US",
    "replyToId": "1a3f70d0-aa46-11eb-8b97-2b2a779de581",
    "label": "Orchestrator Recognition",
    "valueType": "OrchestratorRecognizer",
    "value": {
      "text": "hi",
      "alteredText": null,
      "intents": {
        "QnAMaker": {
          "score": 0.9987310956576168
        },
        "HomeAutomation": {
          "score": 0.3402091165577196
        },
        "Weather": {
          "score": 0.24092200496795158
        }
      },
      "entities": {},
      "result": [
        {
          "Label": {
            "Type": 1,
            "Name": "QnAMaker",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.9987310956576168,
          "ClosestText": "hi"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "HomeAutomation",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.3402091165577196,
          "ClosestText": "make some coffee"
        },
        {
          "Label": {
            "Type": 1,
            "Name": "Weather",
            "Span": {
              "Offset": 0,
              "Length": 2
            }
          },
          "Score": 0.24092200496795158,
          "ClosestText": "soliciting today's weather"
        }
      ]
    },
    "name": "OrchestratorRecognizerResult",
    "id": "1ae65f30-aa46-11eb-8b97-2b2a779de581",
    "localTimestamp": "2021-04-30T23:26:04-07:00"
    }
    

    Como o enunciado, hi, faz parte da intenção do QnAMaker do Orchestrator e é selecionado como o topScoringIntent, o bot fará uma segunda solicitação, desta vez para o aplicativo QnA Maker, com o mesmo enunciado.

  3. Selecione a QnAMaker Trace linha no log do Emulador. O resultado do QnA Maker é exibido no Inspetor.

    {
        "questions": [
            "hi",
            "greetings",
            "good morning",
            "good evening"
        ],
        "answer": "Hello!",
        "score": 1,
        "id": 96,
        "source": "QnAMaker.tsv",
        "metadata": [],
        "context": {
            "isContextOnly": false,
            "prompts": []
        }
    }
    

[Python (arquivado)]: (https://github.com/microsoft/BotBuilder-Samples/tree/main/archive/samples/python/14.nlp-with-orchestrator