Share via


Utilizar vários modelos LUIS e FAQ com o Orchestrator

APLICA-SE A: SDK v4

Nota

O Criador de FAQ do Azure AI será descontinuado a 31 de março de 2025. A partir de 1 de outubro de 2022, não poderá criar novos recursos ou bases de dados de conhecimento do Criador de FAQ. Uma versão mais recente da capacidade de perguntas e respostas está agora disponível como parte da Linguagem de IA do Azure.

A resposta a perguntas personalizadas, uma funcionalidade da Linguagem de IA do Azure, é a versão atualizada do serviço Criador de FAQ. Para obter mais informações sobre o suporte para perguntas e respostas no SDK do Bot Framework, veja Compreensão de linguagem natural.

Nota

Language Understanding (LUIS) será descontinuado a 1 de outubro de 2025. A partir de 1 de abril de 2023, não poderá criar novos recursos do LUIS. Está agora disponível uma versão mais recente do language understanding como parte da Linguagem de IA do Azure.

A compreensão de linguagem de conversação (CLU), uma funcionalidade da Linguagem de IA do Azure, é a versão atualizada do LUIS. Para obter mais informações sobre o suporte de compreensão de linguagem no SDK do Bot Framework, veja Compreensão de linguagem natural.

Se um bot utilizar vários modelos de Language Understanding (LUIS) e bases de dados de conhecimento do Criador de FAQ, pode utilizar o Bot Framework Orchestrator para determinar que modelo luis ou Criador de FAQ base de dados de conhecimento melhor corresponde à entrada do utilizador. Pode utilizar o comando da bf orchestrator CLI para criar um ficheiro de instantâneo do Orchestrator e, em seguida, utilizar o ficheiro de instantâneo para encaminhar a entrada do utilizador para o modelo correto no tempo de execução.

Este artigo descreve como utilizar um Criador de FAQ existente base de dados de conhecimento com o Orchestrator.

Pré-requisitos

Sobre este exemplo

Este exemplo baseia-se num conjunto predefinido de projetos do LUIS e do Criador de FAQ. No entanto, para utilizar o Criador de FAQ no bot, precisa de uma base de dados de conhecimento existente no portal do Criador de FAQ. Em seguida, o bot pode utilizar a base de dados de conhecimento para responder às perguntas do utilizador.

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

Diagrama de classe C#.

OnMessageActivityAsync é chamado para cada entrada de utilizador recebida. Este módulo localiza a intenção de utilizador com melhor classificação e transmite esse resultado para DispatchToTopIntentAsync. DispatchToTopIntentAsync, por sua vez, chama o processador de aplicações adequado.

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

O processador chama o serviço LUIS ou Criador de FAQ e devolve o resultado gerado ao utilizador.

Criar aplicações LUIS

Antes de poder criar um ficheiro de instantâneo do Orchestrator, precisa que as aplicações LUIS e as bases de dados de conhecimento de FAQ tenham sido criadas e publicadas. O bot de exemplo referenciado neste artigo utiliza os seguintes modelos, incluídos com o exemplo NLP With Orchestrator na \CognitiveModels pasta:

Nome Descrição
HomeAutomation Uma aplicação LUIS que reconhece uma intenção de automatização doméstica com dados de entidade associados.
Meteorologia Uma aplicação LUIS que reconhece intenções relacionadas com a meteorologia com dados de localização.
QnAMaker Um Criador de FAQ base de dados de conhecimento que fornece respostas a perguntas simples sobre o bot.

Criar as aplicações LUIS

Crie aplicações LUIS a partir dos ficheiros HomeAutomation e Weather .lu no diretório cognitive models do exemplo.

  1. Execute o seguinte comando para importar, preparar e publicar a aplicação no ambiente de produção.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Registe os IDs da aplicação, os nomes a apresentar, a chave de criação e a localização.

Para obter mais informações, veja Como Criar uma aplicação LUIS no portal do LUIS e Obter valores para ligar à sua aplicação LUIS em Adicionar compreensão de linguagem natural ao bot e a documentação do LUIS sobre como preparar e publicar uma aplicação no ambiente de produção.

Obter valores para ligar o bot ao base de dados de conhecimento

Nota

O Criador de FAQ do Azure AI será descontinuado a 31 de março de 2025. A partir de 1 de outubro de 2022, não poderá criar novos recursos ou bases de dados de conhecimento do Criador de FAQ. Uma versão mais recente da capacidade de perguntas e respostas está agora disponível como parte da Linguagem de IA do Azure.

A resposta a perguntas personalizadas, uma funcionalidade da Linguagem de IA do Azure, é a versão atualizada do serviço Criador de FAQ. Para obter mais informações sobre o suporte para perguntas e respostas no SDK do Bot Framework, veja Compreensão de linguagem natural.

Precisa de um base de dados de conhecimento existente e do nome de anfitrião e da chave de ponto final do Criador de FAQ.

Dica

A documentação do Criador de FAQ tem instruções sobre como criar, preparar e publicar o seu base de dados de conhecimento.

Criar o ficheiro de instantâneo do Orchestrator

A interface da CLI da ferramenta Orchestrator cria o ficheiro de instantâneo do Orchestrator para encaminhar para a aplicação LUIS ou Criador de FAQ correta no tempo de execução.

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

  2. Abra uma linha de comandos ou janela de terminal e altere os diretórios para o diretório de exemplo

  3. Confirme que tem a versão atual do npm e a CLI do Bot Framework.

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

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

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

Instalar os pacotes

Antes de executar esta aplicação pela primeira vez, certifique-se de que estão instalados vários pacotes NuGet:

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

Atualizar manualmente o ficheiro appsettings.json

Assim que todas as suas aplicações de serviço forem criadas, as informações de cada uma delas têm de ser adicionadas ao ficheiro "appsettings.json". O exemplo inicial do código C# (arquivado) contém um ficheiro appsettings.json vazio:

appsettings.json

C# (arquivado)

Para cada uma das entidades apresentadas abaixo, adicione os valores que registou 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, guarde este ficheiro.

Ligar aos serviços a partir do bot

Para ligar aos serviços luis e Criador de FAQ, o bot obtém informações do ficheiro de definições.

No BotServices.cs, as informações contidas no ficheiro de configuração appsettings.json são utilizadas para ligar o bot do HomeAutomationWeather Orchestrator aos serviços e SampleQnA . Os construtores utilizam os valores que forneceu para ligar a estes serviços.

BotServices.cs

C# (arquivado)

Ligar para os serviços a partir do bot

Para cada entrada do utilizador, a lógica do bot transmite a entrada do utilizador para o Reconhecedor do Orchestrator, localiza a intenção devolvida na parte superior e utiliza essas informações para chamar o serviço adequado para a entrada.

No ficheiro DispatchBot.cs sempre que o OnMessageActivityAsync método é chamado, verificamos a mensagem de utilizador recebida e obtemos a intenção principal do Reconhecedor do Orchestrator. Em seguida, transmitimos e topIntentrecognizerResult para o método correto para chamar o serviço e devolver o resultado.

bots\DispatchBot.cs

C# (arquivado)

Trabalhar com os resultados do reconhecimento

Quando o reconhecedor do Orchestrator produz um resultado, indica qual o serviço que mais adequadamente pode processar a expressão. O código neste bot encaminha o pedido para o serviço correspondente e, em seguida, resume a resposta do serviço chamado. Consoante a intenção devolvida pelo Orchestrator, este código utiliza a intenção devolvida para encaminhar para o modelo ou serviço de FAQ correto do LUIS.

bots\DispatchBot.cs

C# (arquivado)

Os ProcessHomeAutomationAsync métodos e ProcessWeatherAsync utilizam a entrada de utilizador contida no contexto de viragem para obter a intenção e as entidades principais do modelo luis correto.

O ProcessSampleQnAAsync método utiliza a entrada de utilizador contida no contexto turn para gerar uma resposta a partir do base de dados de conhecimento e apresentar esse resultado ao utilizador.

Nota

Se se tratasse de uma aplicação de produção, era aqui que os métodos LUIS selecionados se ligavam ao serviço especificado, transmitiam a entrada do utilizador e processavam a intenção do LUIS devolvida e os dados da entidade.

Testar o bot

  1. Com o seu ambiente de desenvolvimento, inicie o código de exemplo. Tenha em atenção o endereço localhost apresentado na barra de endereço da janela do browser aberta pela sua Aplicação: https://localhost:<Port_Number>.

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

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

  4. Para sua referência, eis algumas das perguntas e comandos abrangidos pelos serviços criados para o seu bot:

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

Encaminhar a expressão de utilizador para o Criador de FAQ

  1. No Emulador, introduza o texto hi e submeta a expressão. O bot submete esta consulta ao Orchestrator e obtém uma resposta que indica que aplicação subordinada deve obter esta expressão para processamento adicional.

  2. Ao selecionar a Orchestrator Recognition Trace linha no registo, 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"
    }
    

    Uma vez que a expressão , hifaz parte da intenção do Criador de FAQ do Orchestrator e está selecionada como , topScoringIntento bot fará um segundo pedido, desta vez para a aplicação Criador de FAQ, com a mesma expressão.

  3. Selecione a QnAMaker Trace linha no registo do Emulador. O resultado do Criador de FAQ é apresentado 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