Compartir vía


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 o 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 personalizadas, una característica de Lenguaje de 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 Comprensión del lenguaje natural.

Nota:

Reconocimiento del lenguaje (LUIS) se retirará el 1 de octubre de 2025. A partir del 1 de abril de 2023, no podrás crear nuevos recursos de LUIS. Hay disponible una versión más reciente de las funcionalidades de reconocimiento del lenguaje como parte del Lenguaje de Azure AI.

Reconocimiento del lenguaje conversacional (CLU), una característica del lenguaje de Azure AI, es la versión actualizada de LUIS. Para obtener más información sobre la compatibilidad con reconocimiento del lenguaje en Bot Framework SDK, consulte reconocimiento natural del lenguaje.

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 base de conocimiento de QnA Maker coinciden mejor 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 una base de conocimiento de QnA Maker existente 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 base de conocimiento existente en el portal de QnA Maker . Después, el bot puede utilizar la base de conocimiento para responder a las preguntas del usuario.

Para el nuevo desarrollo de bots, considere la posibilidad de usar Copilot Studio. Si necesita crear una base de conocimiento para un bot de SDK de Bot Framework, 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 aplicación 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 creación de una aplicación de LUIS en el portal de LUIS y Obtención de valores para conectarse a la aplicación de LUIS en Incorporación de comprensión 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 o 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 personalizadas, una característica de Lenguaje de 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 Comprensión del lenguaje natural.

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

Sugerencia

La documentación de QnA Maker contiene instrucciones sobre cómo crear, entrenar y publicar una base de conocimiento.

Creación del archivo de instantáneas de Orchestrator

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

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

  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 de retorno 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 topIntent recognizerResult 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. Dependiendo de la intención devuelta de Orchestrator, este código usa la intención devuelta para enrutar al modelo de LUIS correcto o al servicio QnA.

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 de la base de conocimiento 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.

Pruebe su 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 y 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 doméstica)
      • 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 obtiene 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 en el registro, puede ver la respuesta JSON en el emulador. El resultado del orquestador 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 en 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