Uso de varios modelos de LUIS y QnAUse multiple LUIS and QnA models

se aplica a: SDK V4APPLIES TO: SDK v4

Si un bot utiliza varios modelos LUIS e instancias de QnA Maker Knowledge Base de QnA Maker (Knowledge Base), puede utilizar la herramienta de distribución para determinar qué modelo LUIS o Knowledge Base de QnA Maker es el que mejor se adapta a la entrada del usuario.If a bot uses multiple LUIS models and QnA Maker knowledge bases (knowledge bases), you can use Dispatch tool to determine which LUIS model or QnA Maker knowledge base best matches the user input. La herramienta de distribución lo hace mediante la creación de una única aplicación LUIS para dirigir la entrada del usuario al modelo correcto.The dispatch tool does this by creating a single LUIS app to route user input to the correct model. Para obtener más información sobre Dispatch, incluidos los comandos de la CLI, consulte el archivo LÉAME de distribución.For more information about the Dispatch, including the CLI commands, refer to the dispatch README.

Requisitos previosPrerequisites

Acerca de este ejemploAbout this sample

Este ejemplo se basa en un conjunto predefinido de LUIS y QnA Maker aplicaciones.This sample is based on a predefined set of LUIS and QnA Maker apps.

CS de flujo de lógica de ejemplo de código

Se llama a OnMessageActivityAsync para cada entrada del usuario recibida.OnMessageActivityAsync is called for each user input received. Este módulo busca la intención del usuario con mayor puntuación y pasa el resultado a DispatchToTopIntentAsync.This module finds the top scoring user intent and passes that result on to DispatchToTopIntentAsync. DispatchToTopIntentAsync, a su vez, llama al controlador de aplicación adecuado.DispatchToTopIntentAsync, in turn, calls the appropriate app handler.

  • ProcessSampleQnAAsync -para las preguntas más frecuentes sobre bot.ProcessSampleQnAAsync - for bot faq questions.
  • ProcessWeatherAsync -para las consultas sobre el tiempo.ProcessWeatherAsync - for weather queries.
  • ProcessHomeAutomationAsync -para los comandos de iluminación doméstica.ProcessHomeAutomationAsync - for home lighting commands.

El controlador llama al servicio LUIS o QnA Maker y devuelve el resultado generado al usuario.The handler calls the LUIS or QnA Maker service and returns the generated result back to the user.

Creación de aplicaciones de LUIS y Knowledge Base de QnACreate LUIS apps and QnA knowledge base

Antes de que pueda crear el modelo de distribución, tendrá que crear y publicar las aplicaciones de LUIS y Knowledge Base de QnA.Before you can create the dispatch model, you'll need to have your LUIS apps and QnA knowledge bases created and published. En este artículo, se publicarán los siguientes modelos que se incluyen con el ejemplo NLP con distribución en la carpeta \CognitiveModels:In this article, we'll publish the following models that are included with the NLP With Dispatch sample in the \CognitiveModels folder:

NombreName DescripciónDescription
HomeAutomationHomeAutomation Una aplicación LUIS que reconoce una intención de automatización de dispositivos del hogar con datos de la entidad asociada.A LUIS app that recognizes a home automation intent with associated entity data.
TiempoWeather Una aplicación de LUIS que reconoce las intenciones relacionadas con el tiempo con datos de ubicación.A LUIS app that recognizes weather-related intents with location data.
QnAMakerQnAMaker Una instancia de Knowledge Base de QnA Maker que proporciona respuestas a preguntas sencillas sobre el bot.A QnA Maker knowledge base that provides answers to simple questions about the bot.

Crear las aplicaciones de LUISCreate the LUIS apps

  1. Cree una aplicación de LUIS a partir del archivo JSON de automatización del hogar en el directorio cognitive models del ejemplo.Create a LUIS app from the home automation JSON file in the cognitive models directory of the sample.
    1. Entrena y publica la aplicación en el entorno de producción.Train and publish the app to the production environment.
    2. Registre el identificador de la aplicación, el nombre para mostrar, la clave de creación y la ubicación.Record the application ID, display name, authoring key, and location.
  2. Repita estos pasos para el archivo JSON meteorológico.Repeat these steps for the weather JSON file.

Para 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 Agregar 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.For more information, see how to Create a LUIS app in the LUIS portal and Obtain values to connect to your LUIS app in Add natural language understanding to your bot and the LUIS documentation on how to train and publish an app to the production environment.

Cree el QnA Maker knowledge baseCreate the QnA Maker knowledge base

El primer paso para configurar una instancia de Knowledge Base de QnA Maker es configurar un servicio QnA Maker en Azure.The first step to setting up a QnA Maker knowledge base is to set up a QnA Maker service in Azure. Para ello, siga las instrucciones paso a paso que se encuentran en el artículo configuración del servicio qnamaker.To do that, follow the step-by-step instructions found the set up qnamaker service article.

Una vez creado el servicio QnA Maker en Azure, debe registrar la clave Key 1 de Cognitive Services proporcionada para el servicio QnA Maker.Once your QnA Maker Service has been created in Azure, you need to record the Cognitive Services Key 1 provided for your QnA Maker service. Se usará como al <azure-qna-service-key1> agregar la aplicación de QnA Maker a la aplicación de distribución.This will be used as <azure-qna-service-key1> when adding the QnA Maker app to your dispatch application.

Obtenga más información sobre los dos tipos diferentes de claves que se usan con QnA Maker.Learn more about the two different types of keys used with QnA Maker.

Los pasos siguientes le proporcionan esta clave:The following steps provide you with this key:

Selección de Cognitive Services

  1. Desde Azure Portal, seleccione el servicio QnA Maker de Cognitive Services.From within your Azure portal, select your QnA Maker cognitive service.

    Selección de las claves de Cognitive Services

  2. Seleccione el icono de claves que se encuentra en la sección Administración de recursos en el menú izquierdo.Select the Keys icon found under the Resource Management section on the left-hand menu.

    Selección de Cognitive Service Key1

  3. Copie el valor de Key 1 en el Portapapeles y guárdelo en local.Copy the value of Key 1 to your clipboard and save this locally. se usará más adelante para el valor de clave (-k) al agregar la <azure-qna-service-key1> QnA Maker aplicación a la aplicación de distribución.this will later be used for the (-k) key value <azure-qna-service-key1> when adding the QnA Maker app to your dispatch application.

  4. Ahora, inicie sesión en el portal web de QnAMaker.Now sign in to the QnAMaker web portal.

  5. En el paso 2, seleccione lo siguiente:At step 2, select the following:

    • La cuenta de Azure AD.Your Azure AD account.
    • El nombre de la suscripción de Azure.Your Azure subscription name.
    • El nombre que ha creado para el servicio QnA Maker.The name you created for your QnA Maker service. (Si el servicio Azure QnA no aparece inicialmente en esta lista desplegable, pruebe a actualizar la página).(If your Azure QnA service does not initially appear in this pull down list, try refreshing the page.)

    Paso 2, crear QnA

  6. En el paso 3, proporcione un nombre para la instancia de Knowledge Base de QnA Maker.At step 3, provide a name for your QnA Maker knowledge base. En este ejemplo, utilice el nombre "sample-qna".For this example use the name 'sample-qna'.

    Paso 3, crear QnA

  7. En el paso 4, seleccione la opción + Add File (+ Agregar archivo), vaya a la carpeta CognitiveModel del código de ejemplo y seleccione el archivo "QnAMaker.tsv".At step 4, select the option + Add File, navigate to the CognitiveModel folder of your sample code, and select the file 'QnAMaker.tsv'. Hay una selección adicional para agregar una personalidad de charla a la instancia de Knowledge Base, pero nuestro ejemplo no incluye esta opción.There is an additional selection to add a Chit-chat personality to your knowledge base but our example does not include this option.

    Paso 4, crear QnA

  8. En el paso 5, seleccione Create your knowledge base (Crear una Knowledge Base).At step 5, select Create your knowledge base.

  9. Una vez creada una instancia de Knowledge Base a partir del archivo cargado, seleccione Save and train (Guardar y entrenar) y, cuando finalice, seleccione la pestaña PUBLISH (Publicar) y publique la aplicación.Once the knowledge base is created from your uploaded file, select Save and train and when finished, select the PUBLISH Tab and publish your app.

  10. Una vez que se publique la aplicación de QnA Maker, seleccione la pestaña SETTINGS (Configuración) y desplácese hacia abajo hasta "Deployment details" (Detalles de la implementación).Once your QnA Maker app is published, select the SETTINGS Tab, and scroll down to 'Deployment details'. Registre los valores siguientes en la solicitud HTTP de Postman de ejemplo.Record the following values from the Postman Sample HTTP request.

    POST /knowledge bases/<knowledge-base-id>/generateAnswer
    Host: <your-hostname>  // NOTE - this is a URL.
    Authorization: EndpointKey <qna-maker-resource-key>
    

    La cadena completa de la dirección URL del nombre de host se verá como "https://.azure.net/qnamaker".The full URL string for your hostname will look like "https://.azure.net/qnamaker". Estos valores se utilizarán más adelante en el archivo appsettings.json o .env.These values will later be used within your appsettings.json or .env file.

La aplicación de distribución necesita acceso de lectura a las aplicaciones existentesDispatch app needs read access to existing apps

La herramienta de distribución necesita acceso de creación para leer las aplicaciones LUIS y QnA Maker existentes con el fin de crear una nueva aplicación LUIS primaria que distribuya a las aplicaciones LUIS y QnA Maker.The dispatch tool needs authoring access to read the existing LUIS and QnA Maker apps in order to create a new parent LUIS app that dispatches to the LUIS and QnA Maker apps. Este acceso se proporciona con los id. de la aplicación y las claves de creación.This access is provided with the app IDs and authoring keys.

Claves de creación de serviciosService authoring keys

La clave de creación solo se usa para crear y editar los modelos.The authoring key is only used for creating and editing the models. Necesita un id. y clave para cada una de las dos aplicaciones LUIS y la aplicación QnA Maker.You need an ID and key for each of the two LUIS apps and the QnA Maker app.

  • para LUISfor LUIS
    • El identificador de aplicación se encuentra en el portal de LUIS para cada aplicación, Administrar > configuración > configuración de la aplicación.The App ID is found in the LUIS portal for each app, Manage > Settings > Application Settings
    • La clave de creación se encuentra en el portal de LUIS, en la esquina superior derecha, seleccione su propio usuario y, a continuación, Configuración.The Authoring Key is found in the LUIS portal, top-right corner, select your own User, then Settings.
  • para Qna Makerfor Qna Maker
    • El identificador de aplicación se encuentra en QnA Maker portal en la página Configuración después de publicar la aplicación.The App ID is found in the QnA Maker portal on the Settings page after you publish the app. Este es el identificador encontrado en la primera parte del comando POST después de knowledgebase.This is the ID found in first part of the POST command after the knowledgebase. Un ejemplo de dónde encontrar el id. de la aplicación es POST /knowledgebases/<APP-ID>/generateAnswer.An example of where to find the app ID is POST /knowledgebases/<APP-ID>/generateAnswer.
    • La clave de creación se encuentra en la Azure Portal, para el recurso QnA Maker, en claves.The Authoring Key is found in the Azure portal, for the QnA Maker resource, under the Keys. Solo necesita una de las claves.You only need one of the keys.

La clave de creación no se utiliza para obtener una puntuación de predicción o una puntuación de confianza de la aplicación publicada.The authoring key is not used to get a prediction score or confidence score from the published application. Necesita las claves del punto de conexión para esta acción.You need the endpoint keys for this action. Las claves del punto de conexión se encuentran y se usan más adelante en este tutorial.The endpoint keys are found and used later in this tutorial.

Obtenga más información sobre los dos tipos diferentes de claves que se usan con QnA Maker.Learn more about the two different types of keys used with QnA Maker.

Creación del modelo de distribuciónCreate the dispatch model

La interfaz de la CLI para la herramienta de distribución crea el modelo para la distribución a la aplicación LUIS o QnA Maker correcta.The CLI interface for the dispatch tool creates the model for dispatching to the correct LUIS or QnA Maker app.

  1. Abra un símbolo del sistema o una ventana del terminal y cambie los directorios al directorio CognitiveModels.Open a command prompt or terminal window, and change directories to the CognitiveModels directory

  2. Asegúrese de que tiene la versión actual de npm y la herramienta Dispatch.Make sure you have the current version of npm and the Dispatch tool.

    npm i -g npm
    npm i -g botdispatch
    
  3. Use dispatch init para inicializar y cree un archivo .dispatch para el modelo de distribución.Use dispatch init to initialize create a .dispatch file for your dispatch model. Créelo con un nombre de archivo que pueda reconocer.Create this using a filename you will recognize.

    dispatch init -n <filename-to-create> --luisAuthoringKey "<your-luis-authoring-key>" --luisAuthoringRegion <your-region>
    
  4. Utilice dispatch add para agregar las aplicaciones LUIS y las instancias de Knowledge Base de QnA Maker al archivo .dispatch.Use dispatch add to add your LUIS apps and QnA Maker knowledge bases to the .dispatch file.

    dispatch add -t luis -i "<app-id-for-weather-app>" -n "<name-of-weather-app>" -v <app-version-number> -k "<your-luis-authoring-key>" --intentName l_Weather
    dispatch add -t luis -i "<app-id-for-home-automation-app>" -n "<name-of-home-automation-app>" -v <app-version-number> -k "<your-luis-authoring-key>" --intentName l_HomeAutomation
    dispatch add -t qna -i "<knowledge-base-id>" -n "<knowledge-base-name>" -k "<azure-qna-service-key1>" --intentName q_sample-qna
    
  5. Use dispatch create para generar un modelo de distribución desde el archivo .dispatch.Use dispatch create to generate a dispatch model from the .dispatch file.

    dispatch create
    
  6. Publique la aplicación LUIS de distribución que acaba de crear.Publish the dispatch LUIS app, just created.

Uso de la aplicación LUIS de distribuciónUse the dispatch LUIS app

La aplicación LUIS generada define las intenciones para cada una de las aplicaciones secundarias e instancias de Knowledge Base, así como ninguna intención para cuando la expresión no encaje bien.The generated LUIS app defines intents for each of the child apps and the knowledge base, as well as a none intent for when the utterance doesn't have a good fit.

  • l_HomeAutomation
  • l_Weather
  • None
  • q_sample-qna

Tenga en cuenta que estos servicios deben publicarse con los nombres correctos para que el bot funcione correctamente.These services need to be published under the correct names for the bot to run properly. El bot necesita información sobre los servicios publicados para poder acceder a ellos.The bot needs information about the published services, so that it can access those services.

Claves del punto de conexión de servicioService endpoint keys

El bot necesita los puntos de conexión de predicción de consulta para las tres aplicaciones LUIS (distribución, tiempo y automatización del hogar) y la única instancia de Knowledge Base de QnA Maker.The bot needs the query prediction endpoints for the three LUIS apps (dispatch, weather, and home automation) and the single QnA Maker knowledge base. Busque las claves de punto de conexión en luis y QnA Maker portales:Find the endpoint keys in the LUIS and QnA Maker portals:

  • En el portal de LUIS, para cada aplicación LUIS, en la sección Administrar, seleccione Configuración de claves y puntos de conexión para encontrar las claves asociadas con cada aplicación.In the LUIS portal, for each LUIS app, in the Manage section, select Keys and Endpoint settings to find the keys associated with each app. Si está siguiendo este tutorial, la clave del punto de conexión es la misma clave que <your-luis-authoring-key>.If you are following this tutorial, the endpoint key is the same key as the <your-luis-authoring-key>. La clave de creación permite 1000 visitas al punto de conexión y después expira.The authoring key allows for 1000 endpoint hits then expires.
  • En el portal de QnA Maker, para la instancia de Knowledge Base, en la opción Administrar, use el valor de clave que se muestra en la configuración de Postman para el encabezado Autorización, sin el texto de EndpointKey.In the QnA Maker portal, for the knowledge base, in the Manage settings, use the key value shows in the Postman settings for the Authorization header, without the text of EndpointKey.

Estos valores se usan en el archivo de configuración del ejemplo: appsettings.json (C#), .env (JavaScript) o config.py (Python).These values are used in the sample's configuration file: appsettings.json (C#), .env (JavaScript), or config.py (Python).

Instalación de paquetesInstalling packages

Antes de ejecutar esta aplicación por primera vez, asegúrese de que hay varios paquetes NuGet instalados:Prior to running this app for the first time ensure that several NuGet packages are installed:

  • Microsoft.Bot.BuilderMicrosoft.Bot.Builder
  • Microsoft.Bot.Builder.AI.LuisMicrosoft.Bot.Builder.AI.Luis
  • Microsoft.Bot.Builder.AI.QnAMicrosoft.Bot.Builder.AI.QnA

Actualización manual del archivo appsettings.jsonManually update your appsettings.json file

Una vez creadas todas las aplicaciones de servicio, la información de cada una de ellas debe agregarse al archivo "appsettings.json".Once all of your service apps are created, the information for each needs to be added into your 'appsettings.json' file. El código inicial de Ejemplo en C# contiene un archivo appsettings.json vacío:The initial C# Sample code contains an empty appsettings.json file:

appsettings.jsonappsettings.json


"LuisHomeAutomationAppId": "",
"LuisWeatherAppId": "",
"LuisAPIKey": "",
"LuisAPIHostName": "",

"AllowedHosts": "*",

"Orchestrator": {
  "ModelFolder": ".\\model",

Para cada una de las entidades que se muestran a continuación, agregue los valores que ha registrado antes en estas instrucciones:For each of the entities shown below, add the values you recorded earlier in these instructions:

appsettings.jsonappsettings.json

"MicrosoftAppId": "",
"MicrosoftAppPassword": "",

"QnAKnowledgebaseId": "<knowledge-base-id>",
"QnAEndpointKey": "<qna-maker-resource-key>",
"QnAEndpointHostName": "<your-hostname>",

"LuisAppId": "<app-id-for-dispatch-app>",
"LuisAPIKey": "<your-luis-endpoint-key>",
"LuisAPIHostName": "<your-dispatch-app-region>",

Cuando se hayan realizado todos los cambios, guarde este archivo.When all changes are complete, save this file.

Conexión a los servicios desde el botConnect to the services from your bot

Para conectarse a los servicios Dispatch, LUIS y QnA Maker, su bot extrae información del archivo de configuración.To connect to the Dispatch, LUIS, and QnA Maker services, your bot pulls information from the settings file.

En BotServices.js la información contenida en el archivo de configuración appsettings.json se usa para conectar el bot de distribución a los servicios Dispatch y SampleQnA.In BotServices.cs, the information contained within configuration file appsettings.json is used to connect your dispatch bot to the Dispatch and SampleQnA services. Los constructores utilizan los valores que proporcionó para conectarse a estos servicios.The constructors use the values you provided to connect to these services.

BotServices.csBotServices.cs

{
    public class BotServices : IBotServices
    {
        public BotServices(IConfiguration configuration, OrchestratorRecognizer dispatcher)
        {
            // Read the setting for cognitive services (LUIS, QnA) from the appsettings.json
            // If includeApiResults is set to true, the full response from the LUIS api (LuisResult)
            // will be made available in the properties collection of the RecognizerResult
            LuisHomeAutomationRecognizer = CreateLuisRecognizer(configuration, "LuisHomeAutomationAppId");
            LuisWeatherRecognizer = CreateLuisRecognizer(configuration, "LuisWeatherAppId");

            Dispatch = dispatcher;

            SampleQnA = new QnAMaker(new QnAMakerEndpoint
            {
                KnowledgeBaseId = configuration["QnAKnowledgebaseId"],
                EndpointKey = configuration["QnAEndpointKey"],
                Host = configuration["QnAEndpointHostName"]
            });
        }

        public OrchestratorRecognizer Dispatch { get; private set; }
        
        public QnAMaker SampleQnA { get; private set; }
        
        public LuisRecognizer LuisHomeAutomationRecognizer { get; private set; }

        public LuisRecognizer LuisWeatherRecognizer { get; private set; }

        private LuisRecognizer CreateLuisRecognizer(IConfiguration configuration, string appIdKey)
        {
            var luisApplication = new LuisApplication(
                configuration[appIdKey],
                configuration["LuisAPIKey"],
                configuration["LuisAPIHostName"]);

            // Set the recognizer options depending on which endpoint version you want to use.
            // More details can be found in https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-migration-api-v3

Nota

De forma predeterminada, el parámetro includeApiResults está establecido en false, lo que significa que el reconocedor solo devolverá información básica acerca de las entidades y las intenciones.By default the includeApiResults parameter is set to false, meaning the recognizer will only return basic information about entities / intents. Si necesita la respuesta completa de LUIS (como el valor de ConnectedServiceResult que se usa más adelante en este tutorial), establezca este parámetro en true.If you require the full response from LUIS (such as the ConnectedServiceResult used later in this tutorial), then set this parameter to true. A continuación, se agregará la respuesta completa del servicio LUIS a la colección Properties en RecognizerResult.This will then add the full response from the LUIS service into the Properties collection on the RecognizerResult.

Llamada a los servicios desde el botCall the services from your bot

Para cada entrada del usuario, la lógica del bot comprueba la entrada del usuario contra el modelo de Dispatch combinado, encuentra la intención devuelta superior y utiliza esa información para llamar al servicio apropiado para la entrada.For each input from your user, the bot logic checks user input against the combined Dispatch model, finds the top returned intent, and uses that information to call the appropriate service for the input.

En el archivo DispatchBot.cs cada vez que se llama al método OnMessageActivityAsync, comprobamos el mensaje de usuario entrante con el modelo de Dispatch.In the DispatchBot.cs file whenever the OnMessageActivityAsync method is called, we check the incoming user message against the Dispatch model. Después, se pasan topIntent y recognizerResult del modelo de Dispatch al método correcto para llamar al servicio y devolver el resultado.We then pass the Dispatch Model's topIntent and recognizerResult on to the correct method to call the service and return the result.

bots\DispatchBot.csbots\DispatchBot.cs

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    // Top intent tell us which cognitive service to use.
    var allScores = await _botServices.Dispatch.RecognizeAsync(turnContext, cancellationToken);
    var topIntent = allScores.Intents.First().Key;
    
    // Next, we call the dispatcher with the top intent.
    await DispatchToTopIntentAsync(turnContext, topIntent, cancellationToken);
}

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)

Trabajo con los resultados de reconocimientoWork with the recognition results

Cuando el modelo genera un resultado, indica qué servicio puede procesar de la manera más adecuada la declaración.When the model produces a result, it indicates which service can most appropriately process the utterance. El código de este bot enruta la solicitud al servicio correspondiente y, a continuación, resume la respuesta del servicio que llama.The code in this bot routes the request to the corresponding service, and then summarizes the response from the called service. Dependiendo de la intención devuelta desde Dispatch, este código utiliza la intención devuelto para dirigir al modelo LUIS o servicio QnA correcto.Depending on the intent returned from Dispatch, this code uses the returned intent to route to the correct LUIS model or QnA service.

bots\DispatchBot.csbots\DispatchBot.cs

    switch (intent)
    {
        case "HomeAutomation":
            await ProcessHomeAutomationAsync(turnContext, cancellationToken);
            break;
        case "Weather":
            await ProcessWeatherAsync(turnContext, cancellationToken);
            break;
        case "QnAMaker":
            await ProcessSampleQnAAsync(turnContext, cancellationToken);
            break;
        default:
            _logger.LogInformation($"Dispatch unrecognized intent: {intent}.");
            await turnContext.SendActivityAsync(MessageFactory.Text($"Dispatch unrecognized intent: {intent}."), cancellationToken);
            break;
    }
}

private async Task ProcessHomeAutomationAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)

Si se llama al método ProcessHomeAutomationAsync o ProcessWeatherAsync, se pasan los resultados del modelo de Dispatch a luisResult.ConnectedServiceResult.If method ProcessHomeAutomationAsync or ProcessWeatherAsync are invoked, they are passed the results from the dispatch model within luisResult.ConnectedServiceResult. El método especificado proporciona los comentarios del usuario que muestran la intención superior del modelo de Dispatch, además de una lista clasificada de todas las intenciones y entidades que se detectaron.The specified method then provides user feedback showing the dispatch model top intent, plus a ranked listing of all intents and entities that were detected.

Si se llama al método q_sample-qna, utiliza la entrada de usuario contenida en la clase turnContext para generar una respuesta desde la instancia de Knowledge Base y mostrar el resultado al usuario.If method q_sample-qna is invoked, it uses the user input contained within the turnContext to generate an answer from the knowledge base and display that result to the user.

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.If this were a production application, this is where the selected LUIS methods would connect to their specified service, pass in the user input, and process the returned LUIS intent and entity data.

Prueba del botTest your bot

  1. Con el entorno de desarrollo, inicie el código de ejemplo.Using your development environment, start the sample code. Tenga en cuenta la dirección localhost que se muestra en la barra de direcciones de la ventana del explorador que abre la aplicación: "https://localhost:<Port_Number>".Note the localhost address shown in the address bar of the browser window opened by your App: "https://localhost:<Port_Number>".

  2. Abra Bot Framework Emulator y, a continuación, seleccione Create a new bot configuration .Open Bot Framework Emulator, then select Create a new bot configuration. Un archivo le permite usar el inspector en el emulador .bot para ver el JSON devuelto de LUIS y QnA Maker. A .bot file enables you to use the Inspector in the Emulator to see the JSON returned from LUIS and QnA Maker.

  3. En el cuadro de diálogo New bot configuration (Nueva configuración de bot), escriba el nombre del bot y la dirección URL del punto de conexión, como http://localhost:3978/api/messages.In the New bot configuration dialog box, enter your bot name, and your endpoint URL, such as http://localhost:3978/api/messages. Guarde el archivo en la raíz del proyecto de código de ejemplo de bot.Save the file at the root of your bot sample code project.

  4. Abra el archivo de bot y agregue secciones para las aplicaciones LUIS y QnA Maker.Open the bot file and add sections for your LUIS and QnA Maker apps. Use este archivo de ejemplo como plantilla para la configuración.Use this example file as a template for settings. Guarde los cambios.Save the changes.

  5. Seleccione el nombre del bot en la lista Mis Bots para tener acceso a su bot de ejecución.Select the bot name in the My Bots list to access your running bot. Como referencia, estas son algunas de las preguntas y los comandos que están cubiertos por los servicios creados para el bot:For your reference, here are some of the questions and commands that are covered by the services built for your bot:

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

Distribución de la expresión de usuario a QnA MakerDispatch for user utterance to QnA Maker

  1. En el emulador del bot, escriba el texto hi y envíe la expresión.In the bot Emulator, enter the text hi and submit the utterance. El bot envía esta consulta a la aplicación LUIS de distribución y recibe una respuesta que indica qué aplicación secundaria debe obtener esta instrucción para su posterior procesamiento.The bot submits this query to the dispatch LUIS app and gets back a response indicating which child app should get this utterance for further processing.

  2. Al seleccionar la línea en el registro, puede ver la LUIS Trace respuesta de LUIS en el emulador del bot .By selecting the LUIS Trace line in the log, you can see the LUIS response in the bot Emulator . El resultado de LUIS de la aplicación LUIS de distribución se muestra en Inspector.The LUIS result from the dispatch LUIS app displays in the Inspector.

    {
      "luisResponse": {
        "entities": [],
        "intents": [
          {
            "intent": "q_sample-qna",
            "score": 0.9489713
          },
          {
            "intent": "l_HomeAutomation",
            "score": 0.0612499453
          },
          {
            "intent": "None",
            "score": 0.008567564
          },
          {
            "intent": "l_Weather",
            "score": 0.0025761195
          }
        ],
        "query": "Hi",
        "topScoringIntent": {
          "intent": "q_sample-qna",
          "score": 0.9489713
        }
      }
    }
    

    Dado que la expresión, hi, forma parte de la intención q_sample qna de la aplicación LUIS de distribución y se selecciona como topScoringIntent, el bot realizará una segunda solicitud, esta vez a la aplicación de QnA Maker con la misma expresión.Because the utterance, hi, is part of the dispatch LUIS app's q_sample-qna intent, and is selected as the topScoringIntent, the bot will make a second request, this time to the QnA Maker app, with the same utterance.

  3. Seleccione la QnAMaker Trace línea en el registro del emulador del bot.Select the QnAMaker Trace line in the bot Emulator log. El resultado de QnA Maker se muestra en Inspector.The QnA Maker result displays in the Inspector.

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

Resolución de la intención superior incorrecta de la distribuciónResolving incorrect top intent from Dispatch

Una vez que el bot se esté ejecutando, es posible mejorar su rendimiento mediante la eliminación de expresiones parecidas o superpuestas entre las aplicaciones distribuidas.Once your bot is running, it is possible to improve the bot's performance by removing similar or overlapping utterances between the dispatched apps.

Puede usar la herramienta de línea de comandos Dispatch para probar y evaluar el modelo de envío.You can use the Dispatch command-line tool to test and evaluate your dispatch model.

Para actualizar o crear un nuevo modelo de LUISTo update or create a new LUIS model

Este ejemplo se basa en un modelo de LUIS preconfigurado.This sample is based on a preconfigured LUIS model. Puede encontrar información adicional para ayudarle a actualizar este modelo o crear un nuevo modelo de LUIS en el artículo Diseño de aplicaciones iterativas para LUIS.Additional information to help you update this model, or create a new LUIS model, can be found in the article Iterative app design for LUIS.

Después de actualizar los modelos subyacentes (QnA o LUIS), ejecute dispatch refresh para actualizar la aplicación de distribución de LUIS.After updating the underlying models (QnA or LUIS) run dispatch refresh to update your Dispatch LUIS app. dispatch refresh es básicamente el mismo comando que dispatch create, excepto en que no crea ningún nuevo identificador de aplicación de LUIS.dispatch refresh is basically the same command as dispatch create except no new LUIS app ID is created.

Tenga en cuenta las expresiones que se agregaron directamente en LUIS no se conservarán al ejecutar dispatch refresh.Note that utterances that were added directly in LUIS will not be retained when running dispatch refresh. Para conservar esas expresiones adicionales en la aplicación de distribución, agréguelas a un archivo de texto (una expresión por línea) y, a continuación, agregue el archivo a la aplicación de distribución ejecutando el comando:To keep those extra utterances in the Dispatch app add those utterances in a text file (one utterance per line), and then add the file to Dispatch by running the command:

dispatch add -t file -f <file path> --intentName <target intent name, ie l_General>

Cuando se agrega el archivo con las expresiones adicionales a la aplicación de distribución, las expresiones se conservarán en cada actualización.Once the file with extra utterances is added to Dispatch the utterances will stay with every refresh.

Para eliminar recursosTo delete resources

en este ejemplo se crea una serie de aplicaciones y recursos que puede eliminar mediante los pasos que se indican a continuación, pero no debe eliminar los recursos en los que se basan otras aplicaciones o servicios.This sample creates a number of applications and resources that you can delete using the steps listed below, but you should not delete resources that any other apps or services rely on.

Para eliminar los recursos de LUIS:To delete LUIS resources:

  1. Inicie sesión en el portal luis.ai.Sign in to the luis.ai portal.
  2. Vaya a la página My Apps (Mis aplicaciones).Go to the My Apps page.
  3. Seleccione las aplicaciones creadas por este ejemplo.Select the apps created by this sample.
    • Home Automation
    • Weather
    • NLP-With-Dispatch-BotDispatch
  4. Haga clic en Eliminar y haga clic en Aceptar para confirmar.Click Delete, and click Ok to confirm.

Para eliminar los recursos de QnA Maker:To delete QnA Maker resources:

  1. Inicie sesión en el portal qnamaker.ai.Sign in to the qnamaker.ai portal.
  2. Vaya a la página My knowledge bases (Mis bases de conocimiento).Go to the My knowledge bases page.
  3. Haga clic en el botón Delete (Eliminar) de la base de conocimiento Sample QnA y haga clic en Delete para confirmar.Click the delete button for the Sample QnA knowledge base, and click Delete to confirm.

Procedimiento recomendadoBest practice

para mejorar los servicios utilizados en este ejemplo, consulte los procedimientos recomendados para LUIS y QnA Maker.To improve services used in this sample, refer to best practice for LUIS, and QnA Maker.