Partilhar via


Use vários modelos LUIS e QnA com o Orchestrator

APLICA-SE A: SDK v4

Nota

O Azure AI QnA Maker 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 conhecimento do QnA Maker. Uma versão mais recente do recurso de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure.

A resposta a 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 de linguagem natural.

Nota

O Language Understanding (LUIS) será aposentado em 1 de outubro de 2025. A partir de 1 de abril de 2023, não será possível criar novos recursos LUIS. Uma versão mais recente do entendimento de idiomas agora está disponível como parte do Azure AI Language.

O entendimento de linguagem conversacional (CLU), um recurso do Azure AI Language, é a versão atualizada do LUIS. Para obter mais informações sobre o suporte à compreensão de linguagem no Bot Framework SDK, consulte Compreensão de linguagem natural.

Se um bot usar vários modelos de Compreensão de Linguagem (LUIS) e bases de conhecimento do QnA Maker, você poderá usar o Bot Framework Orchestrator para determinar qual modelo LUIS ou base de conhecimento do QnA Maker melhor corresponde à 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 conhecimento existente do QnA Maker com o Orchestrator.

Pré-requisitos

Sobre este exemplo

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

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

Diagrama de classe C#.

OnMessageActivityAsync é chamada para cada entrada de usuário recebida. Este módulo localiza a intenção do usuário com a melhor pontuação e passa esse resultado para DispatchToTopIntentAsync. DispatchToTopIntentAsync, por sua vez, chama o manipulador de aplicativo apropriado.

  • ProcessSampleQnAAsync - para perguntas frequentes sobre bots.
  • ProcessWeatherAsync - para consultas meteorológicas.
  • ProcessHomeAutomationAsync - para comandos de iluminação doméstica.

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

Criar aplicações LUIS

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

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

Criar as aplicações LUIS

Crie aplicativos LUIS a partir dos arquivos .lu HomeAutomation e Weather no diretório de modelos cognitivos da amostra.

  1. Execute o seguinte comando 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 para exibição, a chave de criação e o local.

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

Obter valores para conectar seu bot à base de dados de conhecimento

Nota

O Azure AI QnA Maker 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 conhecimento do QnA Maker. Uma versão mais recente do recurso de perguntas e respostas agora está disponível como parte da Linguagem de IA do Azure.

A resposta a 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 de linguagem natural.

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

Gorjeta

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

Criar o arquivo de instantâneo do Orchestrator

A interface CLI para a 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. Instale a versão mais recente suportada do pacote Visual C++ Redistributable

  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 a 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
    

Instalação de pacotes

Antes de executar este 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 seus aplicativos de serviço são criados, as informações de cada um precisam ser adicionadas ao seu arquivo 'appsettings.json'. O exemplo inicial para 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 registrados anteriormente nestas 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 estiverem concluídas, salve este arquivo.

Conecte-se aos serviços do seu bot

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

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

BotServices.cs

C# (arquivado)

Chame 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, 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 mais adequadamente o enunciado. O código neste bot roteia a solicitação para o serviço correspondente e, em seguida, 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 principal e as entidades 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.

Nota

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

Teste seu bot

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

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

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

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

    • QnA Criador
      • hi, good morning
      • what are you, what do you do
    • LUIS (domótica)
      • 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 a declaração 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 receber esse enunciado para processamento posterior.

  2. Ao selecionar 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