Compartilhar via


Usar vários modelos de LUIS e QnA com o Orchestrator

APLICA-SE A: SDK v4

Observação

O QnA Maker da IA do Azure será desativada em 31 de março de 2025. A partir de 1° de outubro de 2022, não será mais possível criar recursos ou bases 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 de 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, confira reconhecimento de linguagem natural.

Observação

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

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

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

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

Pré-requisitos

Sobre este exemplo

Este exemplo se baseia 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 informações para responder às perguntas do usuário.

Para o desenvolvimento de novos bots, considere usar o Copilot Studio. Caso você precise criar uma nova base de informações para um bot do SDK do Bot Framework, confira os seguintes artigos dos Serviços de IA do Azure:

Diagrama de classes C#.

OnMessageActivityAsync é chamado em cada entrada de 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 bots.
  • 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 criados e publicados. O bot de exemplo referenciado neste artigo usa os seguintes modelos, incluídos no exemplo de NLP com Orchestrator \CognitiveModels na 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 dos arquivos .lu HomeAutomation e Weather 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 o local.

Para obter mais informações, consulte como criar um aplicativo LUIS no portal do LUIS e Obter valores para se conectar ao seu aplicativo LUIS em Adicionar reconhecimento vocal 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 da IA do Azure será desativada em 31 de março de 2025. A partir de 1° de outubro de 2022, não será mais possível criar recursos ou bases 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 de 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, confira reconhecimento de linguagem natural.

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

Dica

A documentação do QnA Maker contém instruções sobre como criar, treinar e publicar sua base de informações.

Criar o arquivo de instantâneo do Orchestrator

A interface CLI da ferramenta Orchestrator cria o arquivo de instantâneo do Orchestrator 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 redistribuível do Visual C++

  2. Abra um prompt de comando ou 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 a CLI do Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Baixar o arquivo do modelo básico 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 do LUIS e do QnA Maker, o bot extrai informações do arquivo de configurações.

No BotServices.cs, as informações contidas no arquivo de configuração appsettings.json são usadas para conectar o bot do Orchestrator aos serviços e Weather SampleQnA .HomeAutomation 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 principal 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, verificamos a mensagem do usuário de entrada e obtemos a intenção principal 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 do Orchestrator produz um resultado, ele indica qual serviço pode processar o enunciado de forma mais adequada. 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 correto do LUIS ou serviço de QnA.

bots\DispatchBot.cs

C# (arquivado)

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

O ProcessSampleQnAAsync método usa a entrada do usuário contida no contexto de turno para gerar uma resposta da 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 do host local mostrado na barra de endereços da janela do navegador aberta pelo seu aplicativo: https://localhost:<Port_Number>.

  2. Abra o 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 residencial)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS (tempo)
      • 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 recebe uma resposta indicando qual aplicativo filho deve obter esse enunciado para processamento adicional.

  2. Ao selecionar a Orchestrator Recognition Trace linha no log, você pode ver a resposta JSON no emulador. O resultado do Orchestrator é apresentado 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