Alexa. Desarrollo de aplicaciones IoT para Arduino y ESP8266

Tekst
Loe katkendit
Märgi loetuks
Kuidas lugeda raamatut pärast ostmist
Šrift:Väiksem АаSuurem Aa

5.4.3 Creación de los tipos de slot

Los tipos de slots establecen cómo se reconocen y manejan los datos contenidos en los slots. En el caso de los personalizados, estarán formados por una lista de valores representativos. Asegúrese de que cubran todas las entradas esperadas del usuario.

Las expresiones de muestra de la habilidad “Máquina de café” contienen slots de tres tipos diferentes, cuyos valores son los siguientes:

• “TipoCafe”: “café normal” o “café descafeinado”.

• “CantidadLeche”: “solo”, “cortado” o “con leche”.

• “TipoEdulcorante”: “azúcar”, “sacarina” o “sin edulcorante”.


Recuerde que el nombre de un tipo de slot personalizado solo puede contener caracteres alfabéticos y el guion bajo (“_”).

Para crear un tipo de slot, pulse la opción “Assets” del menú lateral izquierdo, luego en “Slot Types” que aparece debajo y, finalmente, el botón “+Add Slot Type” del panel principal. Verá un campo en el que podrá introducir su nombre. Empezará por el que recoge el tipo de café. Por lo tanto, escriba “TipoCafe” (sin acento) y pulse el botón “Next”.


Ahora asígnele los valores “café normal” y “café descafeinado”. Escriba cada uno de estos valores y pulse retorno de carro o el icono “+” que hay a la derecha del campo.



Al igual que sucedía con las intenciones, también dispone de las opciones “Bulk Edit” y “Export” para editar, importar o exportar en formato CSV los valores de un tipo de slot.

Si observa bien, la lista de valores que aparecen es realmente una tabla cuyas columnas son “VALUE”, “ID” y “SYNONYMS”. Debajo de la columna “VALUE” están los valores que ha introducido, a los que se les conoce como valores canónicos. Los sinónimos, son palabras que expresan lo mismo que el canónico. Por ejemplo, para pedir un café normal, lo más habitual es que el usuario solicite un café a secas. Así, las expresiones: “Prepárame un café normal con leche” y “Prepárame un café con leche” son equivalentes. Por lo tanto, “café” podría considerarse como un sinónimo de “café normal”. Lo mismo sucedería con la palabra “descafeinado”, que sería un sinónimo de “café descafeinado”. Por eso, la expresión: “Dame un café descafeinado con leche” sería equivalente a “Dame un descafeinado con leche”.

El identificador es único para cada valor. El manejo del ID puede facilitar la programación, ya que, independientemente de lo que haya dicho el usuario (el valor canónico o uno de sus sinónimos), el ID del tipo de slot siempre será el mismo.

Para añadir un sinónimo al valor de un tipo de slot, solo tiene que escribirlo en el campo “Add synonym” correspondiente y pulsar retorno de carro (o el icono “+” que aparece a su derecha). Empiece agregando “café” como sinónimo de “café normal” y luego haga lo mismo con “descafeinado” en el caso del valor “café descafeinado”. Finalmente, pulse el botón “Save Model” para guardar los cambios.



Se ha añadido también como sinónimo de “café normal” la palabra “normal” porque, aunque nadie va a decir expresiones del tipo “Quiero un normal con leche”, como verá más adelante, a lo largo de la conversación podría tener que aclararse el tipo de café que desea el usuario con preguntas del tipo: “¿Quiere café normal o descafeinado?”, a lo que podría contestar diciendo simplemente: “normal” para referirse al café normal.


Para borrar un valor junto con todos sus sinónimos, pulse en el icono de la papelera que hay en su extremo derecho. Si únicamente quisiera borrar un sinónimo, pulse sobre el aspa (×) que hay a su derecha.

Ahora, cree el tipo de slot “CantidadLeche” con los valores: “solo” “cortado” y “con leche”. Añada los sinónimos que quiera. Yo solo lo he hecho con el valor “solo”, al que he puesto esa misma palabra sin acento como sinónimo. El último tipo de slot que creará es “TipoEdulcorante”, cuyos valores son: “azúcar”, “sacarina” y “sin edulcorante”. Añada también todos los sinónimos que se le ocurran. Yo solamente he agregado la palabra “amargo” como sinónimo de “sin edulcorante”.


Cuando una palabra tenga significados diferentes dependiendo de si lleva acento o no, aunque en el contexto de la expresión de muestra no haya ambigüedad, conviene añadirla como sinónimo. Por eso, le aconsejo que ponga “solo” como sinónimo de “sólo”. Algo similar sucede con la palabra “azúcar”. Si utiliza el teclado en el simulador de Alexa, en vez del micrófono, y escribiera “azucar” (sin acento), puede que no se reconozca esta palabra. Para evitar el problema, deberá añadirla como sinónimo de “azúcar”.

El resultado lo puede ver en la siguiente imagen, donde los tipos de slots creados hasta el momento se muestran en el panel principal después de haber pulsado la opción “Slot Types” del menú lateral izquierdo. Cada tipo de slot se caracteriza por el número de valores que tiene (“SLOT VALUES”) y su tipo (“TYPE”). A la derecha de cada uno de ellos hay dos enlaces que le permitirán editarlo (“Edit”) o borrarlo (“Delete”).


Los tipos de slots también aparecen debajo de la opción “Slot Types” del menú lateral. El número que tiene entre paréntesis es el de tipos de slot existentes. Pulsando en cada uno de ellos, podrá volver a editar sus valores. El icono con forma de papelera que hay a la derecha de sus nombres (si existiera), como ya habrá imaginado, se utiliza para borrarlos.

Ahora que ya tiene creados los tipos de slots, lo que debe hacer es asociarlos a los slots creados anteriormente. Para ello, seleccione la intención “SolicitudCafe” del menú lateral izquierdo y, en el panel principal, desplácese hacia abajo hasta verlos en la sección “Intent Slots”.


Como puede observar, cada uno de ellos se describe con los campos “ORDER”, “NAME”, “SLOT TYPE” y “ACTIONS”. El campo “NAME” contiene el nombre del slot, y “SLOT TYPE”, el tipo al que pertenece (de momento ninguno). El último campo (ACTIONS), permite borrar el slot o editar su modelo de diálogo. El campo “ORDER” se describirá en el siguiente apartado, cuando se establezca el modelo de diálogo.

Empiece asignando el tipo de slot “TipoCafe” al slot “cafe”. Para ello, pulse en el campo “Select a slot type” y selecciónelo del menú desplegable.


Haga lo mismo con el slot “leche”, al que signará el tipo “CantidadLeche”. Y con el slot “edulcorante”, que asociará a “TipoEdulcorante”. El resultado es el que puede ver en la siguiente imagen. Guarde los cambios realizados pulsando el botón “Save Model”.


5.4.4 Modelo de diálogo

Una vez que ya dispone de la intención que permita realizar las solicitudes de café, sus correspondientes expresiones de muestra y los slots con los que recogerá la información necesaria para prepararlo, solo queda delegar el modelo de diálogo a Alexa para que, en caso de que alguno de ellos no tenga un valor válido, se encargue de pedírselo al usuario. Es lo que normalmente haría un camarero.

La estrategia de delegación del diálogo de una intención se establece en la sección “Dialog Delegation Strategy”, que se localiza entre las secciones “Sample Utterances” e “Intent Slots” de la intención.


Inicialmente, el campo de dicha sección está deshabilitado. El motivo es porque todavía no ha definido un modelo de diálogo. Si recuerda, básicamente estaría formado por el conjunto de preguntas que habría que hacer al usuario con el fin de obtener la información que falta para invocar una intención, así como el tipo de respuestas con las que podría proporcionarla.

Para solicitar un café es imprescindible especificar si se quiere normal o descafeinado, la cantidad de leche y el tipo de edulcorante. Por lo tanto, lo primero que se tiene que hacer es declarar los slots “cafe”, “leche” y “edulcorante” como obligatorios.

 

Empiece por el primero (“cafe”). Para ello, en la sección “Intent Slots”, pulse sobre el enlace “Edit Dialog” de dicho slot situado en la columna “ACTIONS”.



Otra forma de editar el modelo de diálogo de un slot es seleccionándolo en el menú lateral izquierdo. Se localizan debajo de la intención a la que pertenecen (en este caso, “SolicitudCafe”).


En el panel principal verá dos pestañas:

• “Dialogs” (seleccionada por defecto). En ella se introducen las preguntas que habría que hacer al usuario para solicitarle el valor del slot (si se hubiera declarado como obligatorio), además de las posibles respuestas que podría dar para proporcionarlo. Aquí también se incluyen las frases que confirmarían al usuario el valor facilitado.

• “Validations.” Sirve para establecer las reglas de validación del valor del slot y las respuestas que habría que darle al usuario en caso de que no se cumplieran.

Lo primero que va a hacer es declarar el slot “cafe” como obligatorio. Para ello, active la opción “Is this slot required to fulfill the intent?”


Aparecerá un par de campos, en los que será posible añadir las preguntas que le haría al usuario en caso de que no hubiera dicho el tipo de café (“Alexa speech prompts”), y las respuestas más representativas con la que podría contestar (“User utterances”). Podrá añadir todas las expresiones que desee en cada caso.


Si no se hubiera dicho el tipo de café, la pregunta que se le haría es: “¿Desea café normal o descafeinado?”. Una vez escrita, pulse retorno de carro o el icono “+” que tiene a su derecha. El usuario podría responder a esta pregunta diciendo: “Un café normal”, “Normal”, “Descafeinado”, etc. Por lo tanto, añada en el segundo campo: “{cafe}”. Al estar en la misma intención, las expresiones pueden utilizar cualquiera de los slots definidos en su ámbito.

Aunque por simplicidad solamente se haya incluido una pregunta y una respuesta, le invito a que añada todas las que se le ocurran. Cuantas más, mejor.



No se olvide de pulsar siempre retorno de carro o el icono “+” después de haber escrito una expresión. Si no lo hiciera, aunque pulsará el botón “Save Model”, no se guardarían.

Seleccione ahora la pestaña “Validations”. En ella, verá un campo en el que podrá elegir el tipo de reglas de validación que utilizará para determinar si el valor dado por el usuario es correcto. En este caso, usará la más sencilla (y la más utilizada): aquella que comprueba si el valor coincide con alguno de los del tipo de slot al que pertenece (o sus sinónimos). Por lo tanto, despliegue el menú del campo y seleccione la opción “Value within slot type’s slot values”. Luego pulse en el icono “+” que hay a su derecha.


Aparecerá el campo en el que tendrá que introducir las frases que podrá decirle al usuario para indicarle que el tipo de café que ha pedido no existe. Aproveche para dejarle claro lo que únicamente puede pedir, diciendo, por ejemplo: “Solo hay café normal y descafeinado. ¿Cuál prefiere?”. No se olvide de pulsar el icono “+” para que esta frase sea incorporada al modelo de diálogo. Naturalmente, podrá agregar todas las que quiera con este mismo objetivo. Cuando haya terminado, pulse el botón “Save Model” para guardar los cambios.



Guarde siempre periódicamente los cambios realizados porque en cualquier momento puede expirar la sesión y perderlos.

Haga lo mismo con el slot “leche”. Selecciónelo en el menú lateral izquierdo y, en la pestaña “Dialogs” del panel principal, active la opción “Is this slot required to fulfill the intent?” para que sea obligatorio. Luego añada la pregunta: “¿Solo, cortado o con leche?”. A esta pregunta el usuario podría contestar: “Solo”, “Cortado” o “Con leche”, por lo que deberá incluir la expresión: “{leche}”, formada únicamente por el slot cuyo tipo contiene como valores dichas respuestas. Naturalmente, podrá añadir las preguntas y respuestas representativas que considere oportuno.


En la pestaña de validación, seleccione la regla que compruebe que el valor del slot coincide con uno de los que componen el tipo al que está asociado (“CantidadLeche”) y, en caso de no cumplirse, el enunciado: “El café únicamente puede ser solo, cortado o con leche”. Cuando haya acabado pulse el botón “Save Model” para guardar los cambios.


Proceda de igual forma con el slot “edulcorante”, asociándolo como pregunta para obtener dicho valor: “¿Quiere azúcar, sacarina o sin edulcorante?” y como respuesta esperada: “{edulcorante}”.


Seleccione la misma regla de validación que en los slots anteriores, y como respuesta en caso de no haber dicho un valor correcto: “Solo puede poner azúcar o sacarina. ¿O lo prefiere sin edulcorante?”.



Insistir en el hecho de que cada vez que introduzca una frase tiene que pulsar retorno de carro o en el icono “+” situado a la derecha del campo. De lo contrario, aunque las vea en pantalla y pulse el botón “Save Model”, no quedarían incorporadas al modelo de diálogo.

Ahora vuelva de nuevo a la intención pulsando sobre su nombre (“SolicitudCafe”) en el menú lateral izquierdo. En el panel principal, desplácese hasta que vea sus slots en la sección “Intent slots”. Ha llegado el momento de explicar el campo “ORDER”. El número que muestra indica el orden en el que se va a preguntar al usuario por el valor de cada uno de ellos, en caso de no haberlo dicho. Así, en la siguiente imagen puede observar que lo primero que se le preguntaría es por el tipo de café, luego por la cantidad de leche que desea y, finalmente, el edulcorante que habría que poner. Si quisiera cambiar el orden, solo tendría que pulsar en los iconos con punta de flecha hacia arriba o hacia abajo, para subirlo o bajarlo en la posición que ocupa.


Ahora, desplácese más abajo hasta ver la sección “Intent Confirmation”. Aquí es donde introducirá la frase que confirmará la solicitud realizada por el usuario cuando todos los slots obligatorios tengan su correspondiente valor. Seleccione la opción “Does this intent require confirmation?”.


Le aparecerá un campo en el que tendrá que introducir la frase de confirmación con la que preguntará al usuario si se han recogido sin errores los datos necesarios para preparar el café. Por ejemplo, si este fuera un descafeinado con leche y azúcar, la frase podría ser: “Ha solicitado un café descafeinado con leche y azúcar. ¿Es correcto?”. Evidentemente, dicha frase deberá ser general para cualquier variedad de café solicitado. Por lo tanto, tendrá que usar slots, quedando la frase de la siguiente forma: “Ha solicitado un {cafe} {leche} y {edulcorante}. ¿Es correcto?”. Luego pulse el icono “+” que hay a la derecha para añadirla al modelo de diálogo. Por simplicidad, solo se ha incluido una frase de confirmación, pero podrá introducir todas las que quiera. Finalmente, pulse “Save Model” para guardar los cambios realizados.


Con esto ha finalizado el modelo de diálogo de la intención. Ahora solo falta delegárselo a Alexa. Para ello, desplácese hacia arriba en el panel principal hasta ver la sección “Dialog Delegation Strategy”. Ahora, el campo que contiene sí estará activado, por lo que al pulsarlo aparecerá un menú desplegable en el que podrá ver las estrategias de delegación que puede adoptar:

• “enable auto delegation.” Se activa la delegación automática, es decir, será Alexa quien se encargue de preguntar al usuario por los valores de los slots obligatorios que no se conozcan.

• “disable auto delegation.” Se desactiva la delegación automática, es decir, será desde el código de la habilidad desde donde se controle la conversación que se tenga que establecer para obtener los valores de dichos slots.

• “fallback to skill setting.” Se asume la estrategia de delegación de la habilidad.

La última opción es la seleccionada por defecto, que será la que mantendrá.


Para saber cuál es la estrategia de delegación de la habilidad, pulse la opción “Interfaces” del menú lateral izquierdo. Desplácese hacia abajo hasta que vea la última opción de configuración (“Auto Delegation”). Observe que está activada, lo que significa que, por defecto, todas las intenciones de la habilidad tienen delegado el modelo de diálogo. Como la intención “SolicitudCafe” asume la estrategia de delegación de la habilidad, y esta es la delegar el diálogo en Alexa, esta intención tendrá el diálogo delegado.



Si hubiera seleccionado la opción “enable auto delegation”, el resultado sería el mismo. No así en caso de haberlo hecho con “disable auto delegation”, ya que la estrategia de delegación de una intención tiene prioridad sobre la de la habilidad.

Con esto habrá concluido el desarrollo del modelo de diálogo, y con ello, el modelo de interacción de la habilidad. Ahora lo que tiene que hacer es construirlo para que pueda ser utilizado.

5.4.5 Construcción del modelo de interacción

Lo que ha hecho hasta ahora es crear y configurar todos los elementos del modelo de interacción de su habilidad: la intención “SolicitudCafe”, sus expresiones de muestra junto con sus slots, los tipos a los que pertenecen y el modelo de diálogo asociado a cada uno de ellos. A continuación, deberá “cargar” toda esta información en el servicio de Alexa con el fin de que la habilidad pueda ser utilizada desde cualquier dispositivo habilitado para Alexa. Eso se hace pulsando el botón “Build Model”, que inicia un proceso en el que se guarda el modelo (en caso de no haberlo hecho previamente), se valida y, finamente, se construye, quedando listo para ser utilizado.

 

El proceso de construcción se realiza en dos etapas:

1 Construcción rápida. Finaliza en tan solo unos segundos y le permite comenzar a utilizar su habilidad. En la consola del desarrollador se mostrará un mensaje indicándolo. A partir de este momento, aunque todavía se siga con las labores de construcción, la habilidad ya podrá probarse, a excepción (principalmente) del modelo de diálogo.

2 Construcción completa. Tarda algo más que la anterior (alrededor de un minuto), pero permite probar todas las partes del modelo de interacción. De nuevo, sabrá que ha finalizado por un mensaje que se mostrará en la consola. Le recomiendo que espere a que aparezca dicho mensaje para empezar las pruebas. La diferencia de tiempo entre ambos tipos de compilación no es tan grande como para arriesgarse a usar un modelo construido parcialmente.

Por lo tanto, pulse el botón “Build Model”.


En la parte inferior derecha de la consola irán apareciendo sucesivamente los siguientes mensajes informativos.


Cuando se muestre el mensaje “Build Succesful”, habrá finalizado la construcción del modelo de interacción de su habilidad.

En la parte superior del panel principal hay una serie de botones, de los que ha utilizado dos: “Save Model”, cada vez que quería guardar los cambios realizados, y “Build Model”, para construir el modelo, dejándolo listo para ser utilizado desde cualquier dispositivo Alexa (o el simulador). Ya está en condiciones de entender para qué sirven el resto de botones que los acompañan. Veamos cada uno de ellos.


Cada vez que realiza cambios en un modelo de interacción y lo reconstruye, se guarda una versión de este. Si quiere volver a utilizar cualquiera de ellas, pulse el botón “View Model Versions” para ver las disponibles, junto con su fecha de creación. Solo deberá seleccionar el radio button situado a su izquierda y luego el botón “Revert Version” para volver a tenerla disponible.



Cuando vuelva a una versión anterior del modelo de interacción, perderá los cambios del que tenga en curso. Por lo tanto, si quiere mantenerlo, asegúrese de construir el modelo de interacción actual antes de cargar otro anterior.

El botón “Update live skill” se encuentra desactivado porque sirve para actualizar habilidades que han sido ya publicadas. Puesto que las que usted desarrolle serán de carácter privado, no publicará ninguna. Por este motivo, dicho botón permanecerá desactivado y, por lo tanto, sin uso.

El último botón (“Evaluate Model”) sirve para probar el modelo de interacción una vez creado. Al pulsarlo, le aparecerá una pequeña ventana desde la que podrá experimentar con frases de prueba, verificando las intenciones que se invocan y los valores que toman sus slots. De esta forma, si el comportamiento no es el esperado, podrá modificar las expresiones de muestra o cualquier otro componente del modelo de interacción antes de empezar a escribir el código de la habilidad. Será la base de las pruebas realizadas en el siguiente apartado.


La ventana de pruebas está formada por dos pestañas: “Utterance Profiler” y ”NLU Evaluation”. En la pestaña “Utterance Profiler ”, podrá introducir expresiones y comprobar la respuesta que le ofrece el asistente. En cambio, en la pestaña “NLU Evaluation”, las pruebas se realizarán de forma automática. Para ello, se emplea la herramienta de evaluación NLU, que toma como entrada un conjunto de expresiones vinculadas a un comportamiento esperado, y devuelve como salida la comparación del resultado obtenido con el previsto. Esta herramienta es imprescindible en modelos complejos con muchas intenciones, ya que agiliza drásticamente las pruebas. Imagine, por ejemplo, que para probar el modelo de interacción de una habilidad necesitara utilizar 100 expresiones diferentes. Si cada vez que realizara un cambio en el modelo, tuviera que escribir y verificar el comportamiento de todas estas expresiones, las pruebas consumirían mucho tiempo. En cambio, si estas 100 expresiones de prueba se pudieran probar de forma automática y, además, se comparara también automáticamente el comportamiento obtenido con el esperado, podría conocer de forma inmediata si el asistente funciona correctamente.

Puesto que las habilidades que va a tener que crear no serán complejas, se ha optado por no utilizar esta herramienta, cuyo uso tendría que aprender. En cualquier caso, dado su enorme interés, le animo que profundice en su conocimiento consultando https://developer.amazon.com/es-ES/docs/alexa/custom-skills/batch-test-your-nlu-model.html.