Inicio rápido: Cambio del modelo con Node.jsQuickstart: Change model using Node.js

En esta guía de inicio rápido, agregará expresiones de ejemplo a una aplicación de agente de viajes y entrenará la aplicación.In this quickstart, add example utterances to a Travel Agent app and train the app. Las expresiones de ejemplo son texto de usuario conversacional que se asigna a una intención.Example utterances are conversational user text mapped to an intent. Al proporcionar expresiones de ejemplo para las intenciones, enseñará a LUIS qué clases de texto suministrado por el usuario pertenecen a qué intención.By providing example utterances for intents, you teach LUIS what kinds of user-supplied text belongs to which intent.

Para más información, consulte la documentación técnica de las API agregar expresión de ejemplo a intención, entrenar y estado del entrenamiento.For more information, see the technical documentation for the add example utterance to intent, train, and training status APIs.

Para este artículo, necesita una cuenta gratuita de LUIS.For this article, you need a free LUIS account.

Requisitos previosPrerequisites

  • Su clave de creación de LUIS.Your LUIS authoring key.
  • Importe la aplicación TravelAgent desde el repositorio de GitHub cognitive-services-language-understanding.Import the TravelAgent app from the cognitive-services-language-understanding GitHub repository.
  • El id. de aplicación de LUIS para la aplicación TravelAgent importada.The LUIS application ID for the imported TravelAgent app. El identificador de aplicación se muestra en el panel de la aplicación.The application ID is shown in the application dashboard.
  • El archivo utterances.json que contiene las expresiones de ejemplo para importar.The utterances.json file containing the example utterances to import.
  • El identificador de versión dentro de la aplicación que recibe las expresiones.The version ID within the application that receives the utterances. El id. predeterminado es "0.1".The default ID is "0.1".

Nota

La solución completa, que incluye un archivo utterances.json de ejemplo, está disponible en el repositorio cognitive-services-language-understanding de GitHub.The complete solution including an example utterances.json file are available from the cognitive-services-language-understanding GitHub repository.

Archivo JSON de expresiones de ejemploExample utterances JSON file

El archivo de expresiones de ejemplo, utterances.json, sigue un formato específico.The example utterances file, utterances.json, follows a specific format.

El campo text contiene el texto de la expresión de ejemplo.The text field contains the text of the example utterance. El campo intentName debe corresponder al nombre de una intención existente en la aplicación de LUIS.The intentName field must correspond to the name of an existing intent in the LUIS app. El campo entityLabels es obligatorio.The entityLabels field is required. Si no desea etiquetar ninguna entidad, proporcione una matriz vacía.If you don't want to label any entities, provide an empty array.

Si la matriz entityLabels no está vacía, startCharIndex y endCharIndex tienen que marcar la entidad a la que se hace referencia en el campo entityName.If the entityLabels array is not empty, the startCharIndex and endCharIndex need to mark the entity referred to in the entityName field. El índice está basado en cero, lo que significa que 6 en el ejemplo superior hace referencia a la "S" de Seattle y no al espacio antes de la S mayúscula. Si comienza o termina la etiqueta en un espacio en el texto, se produce un error en la llamada de API para agregar las expresiones.The index is zero-based, meaning 6 in the top example refers to the "S" of Seattle and not the space before the capital S. If you begin or end the label at a space in the text, the API call to add the utterances fails.

[
  {
    "text": "go to Seattle today",
    "intentName": "BookFlight",
    "entityLabels": [
      {
        "entityName": "Location::LocationTo",
        "startCharIndex": 6,
        "endCharIndex": 12
      }
    ]
  },
  {
    "text": "purple dogs are difficult to work with",
    "intentName": "BookFlight",
    "entityLabels": []
  }
]

Creación de código de inicio rápidoCreate quickstart code

Agregue las dependencias de NPM al archivo llamado add-utterances.js.Add the NPM dependencies to the file named add-utterances.js.

// NPM Dependencies
var rp = require('request-promise');
var fse = require('fs-extra');
var path = require('path');

Agregue las constantes de LUIS al archivo.Add the LUIS constants to the file. Copie el código siguiente y especifique su clave de creación, identificador de aplicación e identificador de versión.Copy the following code and change to your authoring key, application ID, and version ID.

// To run this sample, change these constants.

// Authoring key, available in luis.ai under Account Settings
const LUIS_authoringKey = "YOUR-AUTHORING-KEY";

// ID of your LUIS app to which you want to add an utterance
const LUIS_appId = "YOUR-APP-ID";

// The version number of your LUIS app
const LUIS_versionId = "0.1";

Agregue el nombre y la ubicación del archivo de carga que contiene las expresiones.Add the name and location of the upload file containing your utterances.

// uploadFile is the file containing JSON for utterance(s) to add to the LUIS app.
// The contents of the file must be in this format described at: https://aka.ms/add-utterance-json-format
const uploadFile = "./utterances.json"

Agregue el método y el objeto para la función addUtterance.Add method and object for addUtterance function.

// upload configuration 
var configAddUtterance = {
    LUIS_authoringKey: LUIS_authoringKey,
    LUIS_appId: LUIS_appId,
    LUIS_versionId: LUIS_versionId,
    inFile: path.join(__dirname, uploadFile),
    uri: "https://westus.api.cognitive.microsoft.com/luis/api/v2.0/apps/{appId}/versions/{versionId}/examples".replace("{appId}", LUIS_appId).replace("{versionId}", LUIS_versionId)
};


// Call add-utterance
var addUtterance = async (config) => {

    try {

        // Extract the JSON for the request body
        // The contents of the file to upload need to be in this format described in the comments above.
        var jsonUtterance = await fse.readJson(config.inFile);

        // Add an utterance
        var utterancePromise = sendUtteranceToApi({
            uri: config.uri,
            method: 'POST',
            headers: {
                'Ocp-Apim-Subscription-Key': config.LUIS_authoringKey
            },
            json: true,
            body: jsonUtterance
        });

        let results = await utterancePromise;

        console.log(JSON.stringify(results));

    } catch (err) {
        console.log(`Error adding utterance:  ${err.message} `);
        //throw err;
    }

}

Agregue el método y el objeto para la función train.Add method and object for train function.

// training configuration 
var configTrain = {
    LUIS_authoringKey: LUIS_authoringKey,
    LUIS_appId: LUIS_appId,
    LUIS_versionId: LUIS_versionId,
    uri: "https://westus.api.cognitive.microsoft.com/luis/api/v2.0/apps/{appId}/versions/{versionId}/train".replace("{appId}", LUIS_appId).replace("{versionId}", LUIS_versionId),
    method: 'POST', // POST to request training, GET to get training status
};

// Call train
var train = async (config) => {

    try {

        var trainingPromise = sendUtteranceToApi({
            uri: config.uri,
            method: config.method, // Use POST to request training, GET to get training status 
            headers: {
                'Ocp-Apim-Subscription-Key': config.LUIS_authoringKey
            },
            json: true,
            body: null      // The body can be empty for a training request
        });

        let results = await trainingPromise;
        console.log(JSON.stringify(results));
        
    } catch (err) {
        console.log(`Error in Training:  ${err.message} `);
        // throw err;
    }

}

Agregue la función sendUtteranceToApi para enviar y recibir llamadas HTTP.Add the function sendUtteranceToApi to send and receive HTTP calls.

// Send JSON as the body of the POST request to the API
var sendUtteranceToApi = async (options) => {
    try {

        var response; 
        if (options.method === 'POST') {
            response = await rp.post(options);
        } else if (options.method === 'GET') {
            response = await rp.get(options);
        }
        
        return { request: options.body, response: response };

    } catch (err) {
        throw err;
    }
}

Agregue el código principal que elija qué acción.Add the main code that chooses which action.

var main = async() =>{
    try{

        console.log("Add utterances complete.");
        await addUtterance(configAddUtterance);

        console.log("Train");
        configTrain.method = 'POST';
        await train(configTrain, false);

        console.log("Train status.");
        configTrain.method = 'GET';
        await train(configTrain, true);

        console.log("process done");

    }catch(err){
        throw err;
    }
}

// MAIN
main();

Instalación de dependenciasInstall dependencies

Cree un archivo package.json con el siguiente texto:Create package.json file with the following text:

{
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "add-utterances.js",
  "scripts": {
    "start":"node add-utterances.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "fs-extra": "^5.0.0",
    "request": "^2.83.0",
    "request-promise": "^4.2.2"
  }
}

En la línea de comandos del directorio que tiene el archivo package.json, instale las dependencias con NPM: npm install.On the command-line, from the directory that has the package.json, install dependencies with NPM: npm install.

Ejecución del códigoRun code

Ejecute la aplicación desde una línea de comandos con Node.js.Run the application from a command-line with Node.js.

Al llamar a npm start se agregan las expresiones, se realiza el entrenamiento y se obtiene el estado de entrenamiento.Calling npm startadds the utterances, trains, and gets training status.

> npm start 

Esta línea de comandos muestra el resultado de llamar a la API de adición de expresiones.This command-line displays the results of calling the add utterances API.

La matriz response para agregar las expresiones de ejemplo indica el estado correcto o erróneo para cada expresión de ejemplo con la propiedad hasError.The response array for adding the example utterances indicates success or failure for each example utterance with the hasError property. La respuesta JSON siguiente muestra que ambas expresiones se han agregado correctamente.The following JSON response shows both utterances were added successfully.

    "response": [
        {
            "value": {
                "UtteranceText": "go to seattle today",
                "ExampleId": -5123383
            },
            "hasError": false
        },
        {
            "value": {
                "UtteranceText": "book a flight",
                "ExampleId": -169157
            },
            "hasError": false
        }
    ]

El siguiente código JSON muestra el resultado de una solicitud de entrenamiento correcta:The following JSON shows the result of a successful request to train:

{
    "request": null,
    "response": {
        "statusId": 9,
        "status": "Queued"
    }
}

El siguiente código JSON muestra el resultado de una solicitud correcta para el estado de entrenamiento.The following JSON shows the result of a successful request for training status. Cada modelID es una intención.Each modelID is an intent. Cada intención debe entrenarse en todas las expresiones a fin de identificar correctamente las expresiones que pertenezcan a la intención, así como expresiones que no pertenecen a la intención.Each intent has to be trained on all the utterances to correctly identify utterances to do belong to the intent as well as utterances that do not belong to the intent.

[
    {
        "modelId": "0c694cf9-8c32-44b8-9ea0-3d30a7d901ca",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "10e53836-ade4-494e-9531-3bd6a944c510",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "21e48732-a512-4c33-b5ed-8ea629465269",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "edee15b1-9999-45c2-bbab-591d3a643033",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "aa78e06e-df81-4bb2-b2d9-a2fbb2f81c54",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "e39bb7bd-b417-41a9-a24f-caf4c47fc62c",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "3782eac7-db84-4d66-ba00-0598dffb48ee",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "a941d926-cb0f-47a8-ab7e-deba4378b96f",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "8137f40e-ce6d-40a5-881f-dfd46a05f7e0",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "dc08f95a-58b4-4064-a210-03fe34f75a3c",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    },
    {
        "modelId": "4fabdbed-5697-4562-8c7d-36e174efff2e",
        "details": {
            "statusId": 3,
            "status": "InProgress",
            "exampleCount": 48
        }
    }
]

Limpieza de recursosClean up resources

Cuando haya terminado con la guía de inicio rápido, quite todos los archivos creados en ella.When you are done with the quickstart, remove all the files created in this quickstart.

Pasos siguientesNext steps