Google Assistant. Desarrollo de aplicaciones IoT para Arduino y ESP8266

Text
Read preview
Mark as finished
How to read the book after purchase
Font:Smaller АаLarger Aa

5.1.2 Menú lateral

Ya conoce las opciones que encabezan el menú lateral de la consola de Dialogflow. Debajo, se encuentran las opciones con las que se administran los elementos que componen el agente del proyecto que esté seleccionado, de las que se destacan las siguientes:

• «Intents»: una intención es una interacción con el usuario en la que se busca un objetivo; por ejemplo, las expresiones «pon la calefacción» y «enciende la luz», declaran la misma intención: la de poner en funcionamiento un dispositivo domótico (la calefacción o una luz). Use esta opción para crear y configurar todas las intenciones de su asistente.

Cuando se crea un agente, lo hace con dos intenciones predeterminadas: la de bienvenida («Default Welcome Intent») y la alternativa («Default Fallback Intent»). La primera se ejecuta cuando el usuario invoca la acción principal. La segunda se cumple cuando lo que ha dicho no se puede tratar con ninguna otra intención. Pronto tendrá ocasión de crear sus propias intenciones.

• «Entities»: las entidades representan el tipo de información que se va a extraer como parámetros de las intenciones; por ejemplo, si un usuario dijera «enciende la luz», la palabra «luz» sería un parámetro cuyo valor sería del tipo (entidad) «dispositivo domótico». Dicho parámetro es el que permitiría al asistente conocer y, por lo tanto, encender el dispositivo adecuado. Desde esta opción, podrá administrar las entidades que su agente pueda identificar en las expresiones del usuario. En una sección posterior, aprenderá a utilizar entidades y parámetros.

• «Fulfillment»: al programa que ejecuta las tareas asociadas a una intención en la que se genera una respuesta dinámica se lo llama «cumplimiento» (entrega). Seleccionando esta opción, podrá desarrollar el programa con el editor Inline o establecer el webhook (tecnología que estudiará en detalle más adelante) desde el que se podrá invocar, en caso de haberlo hecho en un servicio externo.

Dicho programa tomará como entrada los parámetros extraídos de las expresiones del usuario. Durante su ejecución, se podrán invocar otros servicios para el envío o recogida de información, por ejemplo, de aplicaciones que se ejecuten en dispositivos ESP8266 y controlen una luz o la calefacción. En casi todas las prácticas de este libro, deberá desarrollar el código de un cumplimiento.

• «Integrations»: se utiliza para configurar la integración con otras plataformas conversacionales, entre las que destaca Google Assistant, objeto de este libro.


La forma de trabajar con cada una de estas opciones se estudiará en detalle más adelante.

Del resto de las opciones, solo se hará mención a las últimas (seguramente, tendrá que desplazarse hacia abajo para verlas); en concreto, la que lleva a la documentación del servicio («Docs»), la que le indica el plan de precios que tiene (en su caso «Standard») o permite modificarlo, la de soporte cuando requiera ayuda técnica («Support»), la que contiene los datos de su cuenta («Account») y, finalmente, la utilizada para salir de la consola («Logout»).



Al salir de la herramienta, no lo habrá hecho de la cuenta de Google, que permanecerá activa en el navegador. Para salir también de su cuenta, algo muy conveniente si el ordenador es compartido, pulse sobre el icono que contiene la inicial de su nombre (o la imagen de su perfil, si la tuviera), situada en la parte superior derecha de las pestañas que hubiera abierto en el navegador. En el menú desplegable que aparece, seleccione la opción «Cerrar sesión».


Unidad 6
CONCEPTOS BÁSICOS PARA EL DESARROLLO DE SISTEMAS CONVERSACIONALES CON DIALOGFLOW

Para poder utilizar todo el potencial proporcionado por esta plataforma, es necesario conocer una serie de conceptos básicos de desarrollo de sistemas conversacionales. Se trata de las intenciones, los contextos, las entidades y los cumplimientos. Cada uno de ellos se explicará de forma individual utilizando sencillos ejercicios que ayuden a mejorar su conocimiento.

6.1 INTENCIONES (INTENTS)

Las intenciones, como indica su nombre, se utilizan para identificar lo que desea el usuario en cada momento. Cuando este se dirija al asistente, el agente Dialogflow buscará la intención que mejor se adapte a lo que haya expresado, activándola para que ejecute la tarea solicitada y devuelva la respuesta correspondiente. En caso de que no encuentre ninguna, se activará la intención alternativa o de fallback.

Las intenciones se componen de los siguientes elementos:

• Frases de entrenamiento: son frases de ejemplo que podría llegar a decir un usuario para realizar peticiones (o dar información). Por ejemplo, para encender la televisión, este podría decir «enciende la televisión» o «pon la tele». Sería muy difícil, por no decir imposible, indicar todas las formas posibles en las que alguien podría dirigirse al asistente. Por eso, se requiere el empleo de algoritmos de aprendizaje automático que amplíen dicha lista con otras frases similares. El agente buscaría la más parecida a la expresión dada por el usuario, activando la intención correspondiente.

• Acción: nombre que se podrá utilizar en el cumplimiento (fulfillment) para identificar la intención que se ha activado.

• Parámetros: cuando se cumple una intención, Dialogflow extrae como parámetros la información relevante de la expresión dada por el usuario. Cada parámetro tiene un valor perteneciente a un tipo (llamado «entidad»). Dialogflow proporciona muchos tipos predefinidos, como fechas, horas, ciudades, colores, etc. También podrá crear sus propias entidades —por ejemplo, «dispositivo»— para agrupar (y, así, identificar) todo lo que se pueda encender y apagar con un relé conectado a un ESP8266, como una luz, la lavadora o la televisión.

A diferencia de la entrada sin procesar del usuario, los parámetros son datos estructurados que se pueden usar con facilidad por cualquier tipo de programas. En la siguiente sección, aprenderá a manejarlos.

• Respuestas: representa la salida estática (imagen, texto o voz) devuelta al usuario. En su primer asistente, la respuesta era, simplemente, una frase de saludo.

Para crear una intención, debe pulsar el signo «+», que está a la derecha de la opción «Intents» del menú lateral izquierdo.


En el panel principal, aparecerán todas las opciones de configuración encabezadas por un campo de texto («Intent name»), en el que se asignará el nombre de la intención. A su derecha está el botón «SAVE», que deberá pulsar para guardar los cambios realizados cuando termine de editarla.


Para ver el contenido de cada una de las opciones de configuración, tiene que pulsar el icono con forma de punta de flecha que hay a su derecha que, de forma resumida, es el siguiente:

• «Contexts»: contiene los contextos en los que se ejecutan las intenciones. Su significado es el mismo que en la vida real, ya que se utilizan para interpretar (con base en información previa obtenida de la conversación) lo que dice un usuario cuando sus expresiones son vagas o puedan tener diversos significados. Por ejemplo, imagine que una persona está diciendo algo a otra y se pone a escuchar en medio de la conversación. Si en ese momento oyera «súbelo», no sabría a qué se estaban refiriendo hasta que se diera cuenta de que estaban hablando de que no se oía la televisión y había que subir el volumen. Usando contextos, una palabra que, en principio, no tiene sentido (o podía tener varios) cobra ahora todo el significado.

• «Events»: como sabe, las intenciones se cumplen cuando las expresiones del usuario «encajan» dentro de alguna de sus frases de entrenamiento. Pero esta no es la única forma de activar una intención, ya que los eventos consiguen lo mismo con base en sucesos ocurridos en otras plataformas con las que se puede integrar Dialogflow. Ya ha usado uno, que es el evento de bienvenida producido por Google Assistant al invocar la acción principal de su primer asistente («Welcome»). Puede verlo en la intención de bienvenida («Default Welcome Intent»), desplegando el contenido de esta sección.


• «Training phrases»: aquí añadirá las frases de entrenamiento que permitan activar la intención. Cuantas más frases agregue, mayor será la precisión con la que el agente de Dialogflow asociará la expresión de un usuario a la intención correcta.

 

• «Action and parameters»: en esta sección, es donde se decide qué información relevante (parámetros) debe ser extraída de las expresiones del usuario.

• «Responses»: contiene las respuestas estáticas ofrecidas al usuario.

• «Fulfillment»: habilita la ejecución del programa (en su caso, escrito en JavaScript) que realizará las tareas asociadas a la activación de las intenciones que generan respuestas dinámicas. Al invocar este programa (cumplimiento), se le proporcionará la información relevante de la conversación en curso, como la intención activada, los valores de sus parámetros o los contextos activos en ese momento. Durante su ejecución, para realizar las tareas asociadas a la intención, podrá integrarse con otros servicios que le permitan, por ejemplo, la comunicación con aplicaciones que se ejecuten en dispositivos ESP8266.

Como curiosidad, verá que todas las intenciones tienen un pequeño círculo azul a la izquierda de su nombre. En cualquier momento, puede pulsar sobre él para cambiar su prioridad de ejecución. Si la expresión del usuario permitiera activar varias intenciones, el agente de Dialogflow elegiría aquella con la prioridad más alta.



Para deshabilitar una intención con el objeto de que no se cumpla, seleccione la opción «Ignore».

Ponga en práctica estos nuevos conceptos modificando su primer asistente, para que salude por su nombre a la persona que lo está utilizando. Seguirá siendo un asistente muy sencillo, pero le permitirá experimentar con las frases de entrenamiento, los parámetros extraídos de las expresiones dichas por el usuario y las respuestas devueltas por una intención.

6.1.1 Práctica de uso de intenciones

En esta práctica, mejorará el comportamiento del asistente para que pregunte cómo se llama y, así, poder saludarlo por su nombre. Utilizará la misma acción principal, por lo que no tendrá que acceder a la plataforma Actions on Google. Una vez invocada dicha acción diciendo, por ejemplo, «quiero hablar con mi primer asistente», este responderá con un saludo del estilo: «hola, ¿cómo se llama?». Usted contestará con su nombre y la conversación finalizará con la frase «encantado de conocerlo, ***» (u otras similares), donde los asteriscos representarían el nombre de la persona a quien se ha dirigido al asistente.

Para tener esta breve conversación, lo primero que va a hacer es modificar la intención de bienvenida. Acceda a la consola de Dialogflow, seleccione la opción «Intents» del menú lateral y, a continuación, pulse en «Default Welcome Intents». Una vez dentro, borre todas las frases que introdujo pulsando sobre el icono de la papelera situada a la derecha de «Text Response».


Una vez borradas las frases existentes, pulse sobre el botón «ADD RESPONSES», seleccione la opción «Text Response» del desplegable que aparece y añada la respuesta «Hola, ¿cómo se llama?».

No se olvide de quitar la selección de la opción «Set this intent as end of conversation», que indicaba que dicha intención finalizaba la conversación (si le preguntamos a alguien cómo se llama, es obvio que esta continúa). Finalmente, pulse sobre el botón «SAVE», para guardar los cambios realizados.


Ahora va a proceder a crear la intención que se activará cuando el usuario diga su nombre. Para ello, pulse sobre el icono «+», situado a la derecha del elemento «Intents» del menú lateral. Llámela «obtener nombre».



El nombre de las intenciones es case sensitive; es decir, diferencia entre mayúsculas y minúsculas.

Luego, en la sección «Training phrases», pulse sobre «ADD TRAINING PHRASES». Deberá dar ejemplos de frases que podría decir un usuario para indicar su nombre. Se van a añadir, por ejemplo, «Mi nombre es Tomás», «Me llamo Tomás», «Soy Tomás» y «Tomás». Naturalmente, puede poner su nombre o cualquier otro en vez del mío. No olvide que son frases de ejemplo usadas para que el algoritmo de aprendizaje generalice el tipo de expresiones que el usuario podría utilizar para presentarse. Cuantas más frases añada, más aprenderá el agente y más acierto tendrá a la hora de reconocer el nombre del usuario.

Introduzca la primera de dichas frases: «Me llamo Tomás». Cuando presione sobre el retorno de carro, se debe haber identificado el parámetro «person», cuyo valor («Tomás») pertenece a la entidad del sistema @sys.person, es decir, aquella que agrupa nombres de personas.


Si no se hubiera identificado dicho parámetro automáticamente, seleccione la palabra «Tomás» (o su nombre). Aparecerá un menú desplegable con todas las entidades existentes. Desplácese por ellas hasta encontrar la @sys.person y selecciónela.



También pudo haber elegido la entidad del sistema @sys.given-name, pero está en desuso (al igual que @sys.last-name para los apellidos), sustituyéndose por la utilizada en este ejercicio, que podrá contener el nombre de una persona, sus apellidos o una combinación de ambos.


Existen multitud de entidades de sistema que puede utilizar, como números, fechas, horas, días, colores, ciudades, monedas, etc. Recorra los elementos de la lista desplegable para tener una idea de todos los que hay porque, seguramente, tendrá la necesidad de usar alguno de ellos en el futuro.

Haga lo mismo con el resto de las frases de entrenamiento. El resultado obtenido debe ser el mostrado en la imagen inferior.



Recuerde que, aunque yo he utilizado el nombre «Tomás», usted puede utilizar cualquier otro. Se trata solo de frases de ejemplo.

Continúe configurando la intención en la sección «Actions and parameters». Allí encontrará la lista con todos los parámetros definidos en la intención (en este caso, solo uno), cada uno de los cuales se describe con los siguientes campos:

• «REQUIRED»: establece si el parámetro es obligatorio. Si marcara dicha casilla, esta intención se activaría únicamente por expresiones que contuvieran necesariamente el nombre de una persona. Selecciónela, porque el objetivo de esta intención es, precisamente, obtener dicho nombre. Al hacerlo, aparecerá un nuevo campo «PROMPTS». Pulse en el enlace «Define prompts», situado debajo.


Surgirá una ventana emergente, en la que podrá introducir cualquier frase que informe al usuario de que es indispensable que dé su nombre. Ponga, por ejemplo, «Es necesario que me diga su nombre» aunque, como siempre, podrá usar las expresiones que usted prefiera. Cuando haya terminado, pulse sobre el botón «CLOSE», para volver de nuevo a la pantalla en la que estaba editando el parámetro.


• «PARAMETER NAME»: nombre que identifica al parámetro. Al haberlo asociado a la entidad «@sys.person», Dialogflow le ha asignado automáticamente el nombre «person». Cámbielo por «nombre».

• «ENTITY»: nombre de la entidad a la que pertenece el parámetro. Puede utilizar cualquiera de las que ya vienen definidas en Dialogflow, tal como se ha hecho en este caso con «@sys.person», o crear sus propias entidades, como aprenderá a hacer más adelante.

• «VALUE»: es una referencia al valor del parámetro. Es como una variable que contuviera dicho valor. Pronto sabrá cómo utilizarla.

• «IS LIST»: la casilla de este campo se marcará cuando los valores de un parámetro no sean únicos, sino una lista. Por ejemplo, si hubiera solicitado al usuario sus colores favoritos, este podía haber contestado con el rojo y el verde. Ambos colores formarían parte del mismo parámetro, cuyo valor hubiera sido una lista con dichos colores. En el caso que le ocupa, como el nombre es único, dejará sin marcar dicha casilla.

Ya solo queda establecer la respuesta que dará al usuario una vez obtenido su nombre. Para ello, vaya a la sección «Responses» y pulse sobre el botón «ADD RESPONSE». En el campo «Enter a text response», introduzca el texto «Encantado de conocerlo, $nombre». En realidad, la última parte del texto no tendrá que terminar de introducirla ya que, al escribir el símbolo del dólar, Dialogflow sabrá que quiere añadir el valor de un parámetro y desplegará una lista con todos los que haya definido; en este caso, solo uno: «$nombre». Selecciónelo para completar la frase. Finalice pulsando sobre el retorno de carro.


Añada nuevas respuestas como, por ejemplo, «Hola, $nombre», «Bienvenido, $nombre», etc. No se olvide de indicar que esta intención finaliza la conversación, activando la opción «Set this intent as end of conversation». Para guardar todos los cambios realizados, pulse «SAVE».


Para ver esta nueva intención en la consola, pulse en la opción «Intents» del menú lateral izquierdo. Deberá aparecer en el panel principal, junto con las dos intenciones creadas por defecto con el agente.

Ya está en disposición de comprobar el comportamiento de su nuevo asistente. Para ello, acceda a la consola de Actions on Google y seleccione la pestaña «Test».


Una vez abierta la pestaña del simulador en su navegador, escriba: «Hablar con mi primer asistente». Este le preguntará: «Hola, ¿cómo se llama?». Si, por ejemplo, contestara «Mi nombre es Tomás», procedería a saludarlo con la frase: «Encantado de conocerlo, Tomás».


Vuelva a invocar la acción conversacional, pero esta vez, cuando le pregunte su nombre, diga: «Soy Pedro». Verá cómo ahora lo saludará diciendo: «Bienvenido, Pedro» (o cualquier otra de las frases de respuesta). El asistente ha sido capaz de asociar ambas expresiones con la intención «obtener nombre» y extraer de ellas el nombre con el que ha compuesto el saludo adecuado.



Aunque el grado de acierto de las entidades de sistema resulta elevado, no es infalible, por lo que puede dar por buenos nombres que no lo son y viceversa.

 

6.2 CONTEXTOS (CONTEXTS)

Como se ha comentado anteriormente, los contextos de Dialogflow cumplen una función similar a los de una conversación en la vida real. Una palabra o una frase puede tener significados diferentes dependiendo del contexto. Por ejemplo, la palabra «planta» puede hacer referencia a la planta de un pie o a la planta de un edificio. Palabras ambiguas o con diversos significados como esta solo pueden interpretarse en el contexto de la propia conversación.

Ahora analice la siguiente conversación:

—¿Cuál va a ser el tiempo en Madrid este fin de semana?

—Hará un sol espléndido.

—¿Y en León?

—Lluvioso.

La frase del usuario «¿Y en León?» no tendría sentido si la escuchara de forma aislada. Sin embargo, ha sido correctamente interpretada, debido a la existencia de un contexto por el que se sabe que se está hablando de un tema (la climatología), en un determinado periodo de tiempo (este fin de semana). Por eso, al usuario no le ha hecho falta decir: «¿Cuál va a ser el tiempo en León este fin de semana?».

Los contextos permiten al agente de Dialogflow determinar las intenciones que deben cumplirse en cada turno de palabra de una conversación; es decir, las intenciones no solo se activarán únicamente en función de lo que diga el usuario en un momento determinado (utilizando las frases de entrenamiento), sino también de lo que haya dicho en el pasado (contexto).

Para manejar estas situaciones, Dialogflow distingue dos tipos de contexto:

• Contexto de entrada: asociado a una intención, hace que las expresiones del usuario solo se evalúen cuando este se encuentre activo.

• Contexto de salida: se activará cuando se cumpla la intención a la que esté ligado, renovándose su periodo de vigencia, si ya estuviera activo.

Un contexto de salida está activo durante un tiempo de vida útil, que se establece en un número de turnos de conversación. De forma predeterminada, suele ser de cinco turnos para las intenciones normales y de dos turnos para las de seguimiento (las conocerá más adelante). Durante la configuración de las intenciones, podrá modificar la duración de cualquiera de sus contextos. Además, estos caducarán de forma automática 20 minutos después de su activación.

Los contextos de entrada asociados a una intención obligan a que se activen previamente las intenciones que tienen esos mismos contextos como salida. Las reglas de activación de intenciones con contextos de entrada son las siguientes:

• Una intención solo podrá llegar a cumplirse si la lista de contextos de entrada es un subconjunto de la lista de contextos activos en ese momento.

• De todas las intenciones que satisfagan el punto anterior, Dialogflow elegirá aquella cuya lista de contextos de entrada sea más similar a la lista de contextos activos en cada instante.

Los contextos de salida contienen los valores de los parámetros de las intenciones que los activan, transmitiéndolos a las intenciones que se cumplan con dichos contextos de entrada. Para acceder a ellos, en los textos de respuesta se utilizará la siguiente sintaxis:

#contexto.parámetro

El uso de contextos permite definir un tipo especial de intenciones: las de seguimiento. Una intención de seguimiento (follow-up intent) es aquella que solo se puede activar si lo ha hecho previamente la intención de la que depende. Por ejemplo, si el cumplimiento de una intención provocase que el asistente preguntara al usuario si quiere jugar, este podría contestar que sí o que no. Cada una de dichas respuestas provocaría la activación de sendas intenciones (una de confirmación y otra de negación), que llevaría la conversación por caminos divergentes. Tanto la intención de confirmación como la de negación son, por lo tanto, intenciones de seguimiento de aquella en la que se ha preguntado si quería jugar. Eso es debido a que, en ambos casos, la respuesta del usuario (que consistirá seguramente en el monosílabo «sí» o «no») solo podría interpretarse en el contexto de dicha pregunta.

Cuando se crea una intención de seguimiento, se le añade automáticamente un contexto de entrada, que se agrega a la vez como contexto de salida a la intención de la que depende. De esta forma, se asegura que la intención de seguimiento solo se cumpla cuando previamente se haya activado la intención de la que depende.

Dialogflow proporciona diferentes tipos de intenciones de seguimiento predefinidos, como los de confirmación o negación del ejemplo anterior, los de cancelación, etc. Naturalmente, también puede crear sus propias intenciones de seguimiento para manejar respuestas personalizadas.