Esercizio 2: Aggiungere un nuovo enunciazione (AWS CLI) - Amazon Lex versione 1

Se utilizzi Amazon Lex V2, consulta invece la guida Amazon Lex V2.

 

Se utilizzi Amazon Lex V1, ti consigliamo di aggiornare i bot ad Amazon Lex V2. Non stiamo più aggiungendo nuove funzionalità alla V1 e consigliamo vivamente di utilizzare la V2 per tutti i nuovi bot.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esercizio 2: Aggiungere un nuovo enunciazione (AWS CLI)

Per migliorare il modello di machine learning che Amazon Lex utilizza per riconoscere le richieste da parte degli utenti, aggiungi un'altra enunciazione di esempio al bot.

L'aggiunta di una nuova enunciazione è un processo diviso in quattro fasi.

  1. Utilizzo dell'GetIntentoperazione per ottenere un intento da Amazon Lex.

  2. Aggiorna l'intento.

  3. Utilizzo dell'PutIntentoperazione per inviare l'intento aggiornato nuovamente ad Amazon Lex.

  4. Usa le operazioni GetBot e PutBot per ricreare qualsiasi bot che utilizza l'intento.

Per eseguire i comandi di questo esercizio, devi conoscere la regione in cui verranno eseguiti i comandi. Per l'elenco delle regioni, consulta Quote per la creazione di modelli .

La risposta dell'operazione GetIntent contiene un campo denominato checksum che identifica una specifica revisione dell'intento. È necessario fornire il valore checksum quando si utilizza l'operazione PutIntent per aggiornare un intento. In caso contrario, verrà visualizzato il messaggio di errore seguente:

            An error occurred (PreconditionFailedException) when calling 
            the PutIntent operation: Intent intent name already exists. 
            If you are trying to update intent name you must specify the 
            checksum.
        
Nota

L'esempio seguente di AWS CLI è formattato per Unix, Linux e macOS. Per Windows, modifica "\$LATEST" in $LATEST e sostituisci il carattere di continuazione UNIX barra rovesciata (\) al termine di ogni riga con un accento circonflesso (^).

Per aggiornare l'intento OrderFlowers (AWS CLI)
  1. NellaAWS CLI, ottieni l'intento da Amazon Lex. Amazon Lex invia l'output a un file denominatoOrderFlowers-V2.json.

    aws lex-models get-intent \ --region region \ --name OrderFlowers \ --intent-version "\$LATEST" > OrderFlowers-V2.json
  2. Aprire OrderFlowers-V2.json in un editor di testo.

    1. Individua e cancella i campi createdDate, lastUpdatedDate e version.

    2. Aggiungi il testo seguente nel campo sampleUtterances:

      I want to order flowers
    3. Salvare il file.

  3. Invia l'intento aggiornato ad Amazon Lex con il comando seguente:

    aws lex-models put-intent \ --region region \ --name OrderFlowers \ --cli-input-json file://OrderFlowers-V2.json

    Amazon Lex invia la risposta seguente:

    {
        "confirmationPrompt": {
            "maxAttempts": 2, 
            "messages": [
                {
                    "content": "Okay, your {FlowerType} will be ready for pickup by {PickupTime} on {PickupDate}.  Does this sound okay?", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "name": "OrderFlowers", 
        "checksum": "checksum", 
        "version": "$LATEST", 
        "rejectionStatement": {
            "messages": [
                {
                    "content": "Okay, I will not place your order.", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "createdDate": timestamp, 
        "lastUpdatedDate": timestamp, 
        "sampleUtterances": [
            "I would like to pick up flowers", 
            "I would like to order some flowers", 
            "I want to order flowers"
        ], 
        "slots": [
            {
                "slotType": "AMAZON.TIME", 
                "name": "PickupTime", 
                "slotConstraint": "Required", 
                "valueElicitationPrompt": {
                    "maxAttempts": 2, 
                    "messages": [
                        {
                            "content": "Pick up the {FlowerType} at what time on {PickupDate}?", 
                            "contentType": "PlainText"
                        }
                    ]
                }, 
                "priority": 3, 
                "description": "The time to pick up the flowers"
            }, 
            {
                "slotType": "FlowerTypes", 
                "name": "FlowerType", 
                "slotConstraint": "Required", 
                "valueElicitationPrompt": {
                    "maxAttempts": 2, 
                    "messages": [
                        {
                            "content": "What type of flowers would you like to order?", 
                            "contentType": "PlainText"
                        }
                    ]
                }, 
                "priority": 1, 
                "slotTypeVersion": "$LATEST", 
                "sampleUtterances": [
                    "I would like to order {FlowerType}"
                ], 
                "description": "The type of flowers to pick up"
            }, 
            {
                "slotType": "AMAZON.DATE", 
                "name": "PickupDate", 
                "slotConstraint": "Required", 
                "valueElicitationPrompt": {
                    "maxAttempts": 2, 
                    "messages": [
                        {
                            "content": "What day do you want the {FlowerType} to be picked up?", 
                            "contentType": "PlainText"
                        }
                    ]
                }, 
                "priority": 2, 
                "description": "The date to pick up the flowers"
            }
        ], 
        "fulfillmentActivity": {
            "type": "ReturnIntent"
        }, 
        "description": "Intent to order a bouquet of flowers for pick up"
    }

Ora che l'intento è stato aggiornato, ricrea qualsiasi bot che lo utilizza.

Per ricreare il bot OrderFlowersBot (AWS CLI)
  1. In AWS CLI, ottieni la definizione del bot OrderFlowersBot e salvala in un file con il comando seguente:

    aws lex-models get-bot \ --region region \ --name OrderFlowersBot \ --version-or-alias "\$LATEST" > OrderFlowersBot-V2.json
  2. In un editor di testo, apri OrderFlowersBot-V2.json. Rimuovi i campi createdDate, lastUpdatedDate, status e version.

  3. In un editor di testo, aggiungi la seguente riga alla definizione del bot:

    "processBehavior": "BUILD",
  4. In AWS CLI, crea una nuova revisione del bot eseguendo il comando riportato di seguito:

    aws lex-models put-bot \ --region region \ --name OrderFlowersBot \ --cli-input-json file://OrderFlowersBot-V2.json

    La risposta del server è:

    {
        "status": "BUILDING", 
        "intents": [
            {
                "intentVersion": "$LATEST", 
                "intentName": "OrderFlowers"
            }
        ], 
        "name": "OrderFlowersBot", 
        "locale": "en-US", 
        "checksum": "checksum", 
        "abortStatement": {
            "messages": [
                {
                    "content": "Sorry, I'm not able to assist at this time", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "version": "$LATEST", 
        "lastUpdatedDate": timestamp, 
        "createdDate": timestamp 
        "clarificationPrompt": {
            "maxAttempts": 2, 
            "messages": [
                {
                    "content": "I didn't understand you, what would you like to do?", 
                    "contentType": "PlainText"
                }
            ]
        }, 
        "voiceId": "Salli", 
        "childDirected": false, 
        "idleSessionTTLInSeconds": 600, 
        "description": "Bot to order flowers on the behalf of a user"
    }
    

Fase successiva

Esercizio 3: Aggiungere una funzione Lambda (AWS CLI)