Amazon Lex es un servicio de AWS que permite crear interfaces de conversación con voz y texto en cualquier aplicación. Con la misma tecnología de Alexa, Amazon Lex le proporciona las herramientas necesarias para abordar problemas de aprendizaje profundo exigentes, como el reconocimiento del habla y la comprensión del lenguaje mediante un servicio completamente administrado de uso sencillo. Amazon Lex se integra con AWS Lambda, que puede utilizar a fin de activar de manera sencilla funciones de ejecución de su lógica de negocio de back-end para la recuperación y las actualizaciones de datos. Una vez creado, su bot se puede implementar directamente en plataformas de chat, clientes móviles y dispositivos de IoT. También puede utilizar los informes proporcionados para monitorizar las métricas de su bot. Amazon Lex proporciona una solución escalable, segura, integral y de uso sencillo para crear, publicar y monitorizar sus bots.
Primeros pasos con Amazon Lex
Para empezar a experimentar con este servicio, lo único que necesitamos es acceso a una consola de AWS. Habiendo ingresado, debemos buscar Lex dentro del catálogos de servicios.
Dentro de la consola de Amazon Lex, veremos este mensaje:
¿Qué quiere decir? Bueno, en enero del 2021 AWS lanzó la versión 2 de la consola y API de Amazon Lex, la cual implementa nuevas características que facilitan la creación, implementación y administración de bots. Los bots existentes previos a esta fecha están basados en la versión 1 y la migración no es automática, sino es un proceso que los diferentes usuarios deben realizar. Por lo tanto, la versión 1 continúa siendo mantenida y se encuentra disponible para quien desee trabajar un bot utilizando aún esta versión. Las mejoras de uso que brinda la API y consola V2 son:
Una arquitectura de información actualizada para brindar un control de versiones simplificado (muy útil para diferenciar etapas típicas de proyectos como dev, test, prod)
Compatibilidad para varios idiomas en un mismo bot
Capacidades de streaming (el bot puede permanecer escuchando activamente y puede diseñarse para responder proactivamente a interrupciones del usuario y pausas)
Guardado de configuraciones de bot parcialmente completadas
Capacidad de renombrar recursos
Navegación simplificada
Carga en masa de expresiones
Depuración detallada
Por lo tanto, si se está iniciando un completo desde 0 que involucre a Amazon Lex, lo mejor es trabajar desde un inicio con la V2.
Creando nuestro primer bot
AWS ofrece la facilidad de iniciar con ejemplos preconfigurados, con la finalidad de empezar a interacturar con Lex de una manera mucho más rápida. Estando en la consola, debemos seguir los siguientes pasos para poder desplegar alguno de los ejemplos:
En el lado derecho de la pantalla, buscamos el botón que dice Crear bot
Nos abre la ventana de Configurar los ajustes del bot, ahí seleccionamos la opción que dice Comience con un ejemplo
Al hace la selección anterior, nos aparecen tres ejemplos:
BookTrip, bot para hacer las reservaciones necesarias para visitar una ciudad
MakeAppointment, bot para realizar una cita con el dentista
OrderFlowers, bot para ordenar flores en nombre de un usuario
En este caso, hacemos click sobre BookTrip
Le ponemos un nombre al bot, como por ejemplo MyFirstBookTripBot
En la sección de Permisos de IAM seleccionamos la opción de Crear un rol con permisos básicos de Amazon Lex
En la sección de Ley de Protección de la Privacidad Infantil en Internet, seleccionamos No
Dejamos el resto con la configuración por defecto, y hasta abajo, hacemos click en el botón que dice Siguiente
Nos abre la ventana de Agregar idoma al bot
Al hacer click sobre la parte de Seleccionar idioma, se nos despliegan todas las opciones de idiomas disponibles para implementar. En el caso de trabajar con un bot de los ejemplos de AWS, debemos seleccionar un idioma aceptado por dicho ejemplo
En nuestro caso, seleccionamos la opción de Español (LATAM)
Una parte interesante de esta sección es la Interacción por voz, donde Lex nos enlista las diferentes voces disponibles para el idioma seleccionado (una única opción en el caso de Español LATAM). El botón de Reproducir nos permite escuchar la voz seleccionada leyendo el texto ejemplo que se muestra a su izquierda.
El valor ingresado en la casilla de Umbral de confianza de clasificación de intenciones es el valor mínimo de “confianza” que Lex debe tener para mapear lo que dijo un usuario a una Intención en específico. Dejamos el valor de 0.4 que aparece por defecto y damos click en Terminado para que se cree nuestro bot.
Revisando el bot
Una vez creado nuestro bot, podemos visualizar las intenciones y los enunciados que las definen. Una intención representa una acción que cumple con la solicitud de un usuario. Los enunciados son las diferentes frases que puede decir un usuario para invocar una intención, por ejemplo para hacer un pedido a domicilio, un usuario podría decir exactamante “quiero hacer un pedido a domicilio” o bien podría decir “quisiera ordenar algo”.Las intenciones pueden llevar ranuras (slots en inglés) que son valores variables en los diferentes enunciados que definen a la intención. Por ejemplo, en la intención “quiero ordenar un helado de chocolate” los valores de helado y chocolate son ranuras, puesto que podrían tomar diferentes valores como “licuado” y “fresa” o “pie” y “queso”, por nombrar algunos.
Estando en la consola con nuestro bot recién creado, podemos navegar por las diferentes intenciones de nuestro bot, que son tres:
BookCar – para reservar un vehículo
BookHotel – para reservar hotel
FallbackIntent – intención integrada por Lex, que es a la que mapea cualquier frase que no haya podido mapear a alguna de las otras intenciones.
Hacemos click sobre BookHotel
Aquí podemos visualizar los diferentes tipos de enunciados que definen la intención, así como las ranuras, que en este caso son Location, CheckInDate, Nights y RoomType.
La sección de Solicitudes de confirmación y rechazo de respuestas son partes opcionales en el flujo de la conversación, que permiten que antes de dar por finalizada la intención esta sea confirmada por el usuario
En este caso, el mensaje de confirmación le indica al usuario los valores llenados en las ranuras y pregunta si completa la reservación o no. En caso que el usuario diga que no, el bot responderá con lo que se haya configurado en rechazar respuestas.
Las respuestas de cierre son frases para que el bot las diga/despliegue al finalizar la intención, como por ejemplo “¡Ha sido un gusto haberte atendido!”
La sección de Ganchos de código es para cuando queremos tener un mayor control de cómo se maneja el bot o necesitamos interactuar con otros servicios, SNS o DynamoDB por ejemplo. Lo que se hace en este caso es que una función Lambda programada por nosotros, sea quien reciba todos los datos que Lex maneja internamente (la intención a la que se mapeo, cuáles ranuras ya están llenas, qué frase dijo el usuario, etc) y es esa función la que realiza algo con esa información (como almacenar datos en una tabla de DynamoDB) y le devuelve a Lex lo que debe responder, manejando todo el contexto de la conversación internamente en la función.
Probando el bot
Podemos probar nuestro bot directamente en la consola, para ello necesitamos primero darle click en el botón que dice Crear en la parte inferior de la pantalla.
Cuando nuestro bot haya terminado de construirse, damos click en el botón que dice Prueba para que nos despliegue una pequeña ventana donde podremos interactuar con nuestro bot.
Conclusiones
¡Ya creamos nuestro primer bot! Con los ejemplos disponibles de AWS es muy sencillo comenzar a interactuar con el servicio de Lex, y ahora con la V2 disponible, es mucho más sencillo llevar control de las versiones de nuestro bot, el manejo de los idiomas y pruebas de funcionamiento. contáctanos: contacto@myappsoftware.com