Uso de varios modelos de LUIS y QnA con Orchestrator

SE APLICA A: SDK v4

Nota

Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos ni bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.

La respuesta a preguntas personalizada, una característica del lenguaje azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Reconocimiento del lenguaje natural.

Nota

Language Understanding (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrá crear nuevos recursos de LUIS. Ahora hay disponible una versión más reciente de Language Understanding como parte del lenguaje de Azure AI.

Conversational Language Understanding (CLU), una característica del lenguaje azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con Language Understanding en Bot Framework SDK, consulte Comprensión del lenguaje natural.

Si un bot usa varios modelos de Language Understanding (LUIS) y bases de conocimiento de QnA Maker, puede usar Bot Framework Orchestrator para determinar qué modelo de LUIS o QnA Maker knowledge base mejor coincide con la entrada del usuario. Puede usar el comando de la bf orchestrator CLI para crear un archivo de instantáneas de Orchestrator y, a continuación, usar el archivo de instantáneas para enrutar la entrada del usuario al modelo correcto en tiempo de ejecución.

En este artículo se describe cómo usar un knowledge base existente de QnA Maker con Orchestrator.

Requisitos previos

Acerca de este ejemplo

Este ejemplo se basa en un conjunto predefinido de proyectos de LUIS y QnA Maker. Sin embargo, para usar QnA Maker en el bot, necesita una knowledge base existente en el portal de QnA Maker. A continuación, el bot puede usar el knowledge base para responder a las preguntas del usuario.

Para el nuevo desarrollo de bots, considere la posibilidad de usar Power Virtual Agents. Si necesita crear un nuevo knowledge base para un bot de Bot Framework SDK, consulte los siguientes artículos sobre los servicios de Azure AI:

Diagrama de clases de C#.

Se llama a OnMessageActivityAsync para cada entrada del usuario recibida. Este módulo busca la intención del usuario con mayor puntuación y pasa el resultado a DispatchToTopIntentAsync. DispatchToTopIntentAsync, a su vez, llama al controlador de aplicaciones adecuado.

  • ProcessSampleQnAAsync - para preguntas más frecuentes sobre bots.
  • ProcessWeatherAsync -para las consultas sobre el tiempo.
  • ProcessHomeAutomationAsync -para los comandos de iluminación doméstica.

El controlador llama al servicio LUIS o QnA Maker y devuelve el resultado generado al usuario.

Creación de aplicaciones de LUIS

Para poder crear un archivo de instantáneas de Orchestrator, necesita aplicaciones de LUIS y bases de conocimiento de QnA creadas y publicadas. El bot de ejemplo al que se hace referencia en este artículo usa los siguientes modelos, incluidos con el ejemplo NLP With Orchestrator en la \CognitiveModels carpeta :

Nombre Descripción
HomeAutomation Una aplicación LUIS que reconoce una intención de automatización de dispositivos del hogar con datos de la entidad asociada.
Tiempo Una aplicación de LUIS que reconoce las intenciones relacionadas con el tiempo con datos de ubicación.
QnAMaker Una instancia de Knowledge Base de QnA Maker que proporciona respuestas a preguntas sencillas sobre el bot.

Crear las aplicaciones de LUIS

Cree aplicaciones de LUIS desde los archivos HomeAutomation y Weather .lu en el directorio de modelos cognitivos del ejemplo.

  1. Ejecute el siguiente comando para importar, entrenar y publicar la aplicación en el entorno de producción.

    bf luis:build --in CognitiveModels --authoringKey <YOUR-KEY> --botName <YOUR-BOT-NAME>
    
  2. Registre los identificadores de aplicación, los nombres para mostrar, la clave de creación y la ubicación.

Para obtener más información, consulte cómo crear una aplicación de LUIS en el portal de LUIS y Obtener valores para conectarse a la aplicación de LUIS en Incorporación de reconocimiento del lenguaje natural al bot y la documentación de LUIS sobre cómo entrenar y publicar una aplicación en el entorno de producción.

Obtención de valores para conectar el bot a la base de conocimiento

Nota

Azure AI QnA Maker se retirará el 31 de marzo de 2025. A partir del 1 de octubre de 2022, no podrá crear nuevos recursos ni bases de conocimiento de QnA Maker. Ya hay disponible una versión más reciente de la funcionalidad de preguntas y respuestas como parte de Lenguaje de Azure AI.

La respuesta a preguntas personalizada, una característica del lenguaje azure AI, es la versión actualizada del servicio QnA Maker. Para obtener más información sobre la compatibilidad con preguntas y respuestas en Bot Framework SDK, consulte Reconocimiento del lenguaje natural.

Necesita una knowledge base existente y el nombre de host y la clave de punto de conexión de QnA Maker.

Sugerencia

La documentación de QnA Maker tiene instrucciones sobre cómo crear, entrenar y publicar el knowledge base.

Creación del archivo de instantáneas de Orchestrator

La interfaz de la CLI de la herramienta Orchestrator crea el archivo de instantáneas de Orchestrator para el enrutamiento a la aplicación correcta de LUIS o QnA Maker en tiempo de ejecución.

  1. Instalación de la versión compatible más reciente del paquete de Visual C++ Redistributable

  2. Abra un símbolo del sistema o una ventana de terminal y cambie los directorios al directorio de ejemplo.

  3. Asegúrese de que tiene la versión actual de npm y la CLI de Bot Framework.

    npm i -g npm
    npm i -g @microsoft/botframework-cli
    
  4. Descarga del archivo de modelo base de Orchestrator

    mkdir model
    bf orchestrator:basemodel:get --out ./model
    
  5. Creación del archivo de instantáneas de Orchestrator

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

Instalación de paquetes

Antes de ejecutar esta aplicación por primera vez, asegúrese de que hay varios paquetes NuGet instalados:

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

Actualización manual del archivo appsettings.json

Una vez creadas todas las aplicaciones de servicio, la información de cada una de ellas debe agregarse al archivo "appsettings.json". El ejemplo inicial para el código de C# (archivado) contiene un archivo appsettings.json vacío:

appsettings.json

C# (archivado)

Para cada una de las entidades que se muestran a continuación, agregue los valores que ha registrado antes en estas instrucciones:

"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>",

Cuando se hayan realizado todos los cambios, guarde este archivo.

Conexión a los servicios desde el bot

Para conectarse a los servicios luis y QnA Maker, el bot extrae información del archivo de configuración.

En BotServices.cs, la información contenida en el archivo de configuración appsettings.json se usa para conectar el bot de Orchestrator a los HomeAutomationWeather servicios y SampleQnA . Los constructores utilizan los valores que proporcionó para conectarse a estos servicios.

BotServices.cs

C# (archivado)

Llamada a los servicios desde el bot

Para cada entrada del usuario, la lógica del bot pasa la entrada del usuario a Orchestrator Recognizer, busca la intención devuelta en la parte superior y usa esa información para llamar al servicio adecuado para la entrada.

En el archivo DispatchBot.cs cada vez que se llama al OnMessageActivityAsync método , comprobamos el mensaje de usuario entrante y obtenemos la intención superior de Orchestrator Recognizer. A continuación, pasamos y topIntentrecognizerResult al método correcto para llamar al servicio y devolver el resultado.

bots\DispatchBot.cs

C# (archivado)

Trabajo con los resultados de reconocimiento

Cuando el reconocedor de Orchestrator genera un resultado, indica qué servicio puede procesar la expresión de forma más adecuada. El código de este bot enruta la solicitud al servicio correspondiente y, a continuación, resume la respuesta del servicio que llama. Según la intención devuelta por Orchestrator, este código usa la intención devuelta para enrutar al modelo de LUIS o al servicio QnA correcto.

bots\DispatchBot.cs

C# (archivado)

Los ProcessHomeAutomationAsync métodos y ProcessWeatherAsync usan la entrada del usuario contenida en el contexto de turno para obtener la intención y las entidades principales del modelo de LUIS correcto.

El ProcessSampleQnAAsync método usa la entrada del usuario contenida en el contexto de turno para generar una respuesta a partir del knowledge base y mostrar ese resultado al usuario.

Nota

Si se tratara de una aplicación de producción, aquí es donde los métodos LUIS seleccionados se conectarían al servicio especificado, pasarían la entrada del usuario y procesarían los datos de intención y entidad de LUIS devueltos.

Prueba del bot

  1. Con el entorno de desarrollo, inicie el código de ejemplo. Anote la dirección localhost que se muestra en la barra de direcciones de la ventana del explorador abierta por la aplicación: https://localhost:<Port_Number>.

  2. Abra Bot Framework Emulator, haga clic en el botón Abrir bot.

  3. En el cuadro de diálogo Abrir un bot , escriba la dirección URL del punto de conexión del bot, como http://localhost:3978/api/messages. Haga clic en Conectar.

  4. Como referencia, estas son algunas de las preguntas y los comandos que están cubiertos por los servicios creados para el bot:

    • QnA Maker
      • hi, good morning
      • what are you, what do you do
    • LUIS (automatización del hogar)
      • turn on bedroom light
      • turn off bedroom light
      • make some coffee
    • LUIS (tiempo)
      • whats the weather in redmond washington
      • what's the forecast for london
      • show me the forecast for nebraska

Enrutamiento de la expresión de usuario a QnA Maker

  1. En el Emulador, escriba el texto hi y envíe la expresión. El bot envía esta consulta a Orchestrator y devuelve una respuesta que indica qué aplicación secundaria debe obtener esta expresión para su posterior procesamiento.

  2. Al seleccionar la Orchestrator Recognition Trace línea del registro, puede ver la respuesta JSON en el emulador. El resultado de Orchestrator se muestra en el Inspector.

    {
    "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"
    }
    

    Dado que la expresión , hi, forma parte de la intención QnAMaker de Orchestrator y está seleccionada como topScoringIntent, el bot realizará una segunda solicitud, esta vez a la aplicación QnA Maker, con la misma expresión.

  3. Seleccione la QnAMaker Trace línea en el registro del emulador. El resultado de QnA Maker se muestra en Inspector.

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

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