curso
Tutorial Amazon Lex: Guía para principiantes sobre chatbots de IA
Los chatbots conscientes del contexto hacen un seguimiento de las entradas anteriores del usuario y las relacionan con interacciones recientes. Esto les permite interactuar con los usuarios en un estilo conversacional y mejorar la experiencia del usuario. Amazon Lex es un chatbot consciente del contexto de la suite Amazon Web Services (AWS). Se lanzó en 2017, y en 2021 se lanzó una versión mejorada, Lex V2.
En este tutorial, introduzco los conceptos básicos de AWS Lex V2 y demuestro cómo utilizarlo. Hablaré de cómo instalar y configurar Lex, crear tu primer chatbot Lex e interactuar con backends externos. También daré una visión general de la integración de Lex con plataformas de terceros, como sitios web y aplicaciones de mensajería.
¿Qué es Amazon Lex?
Amazon Lex es un motor conversacional basado en IA que ofrece AWS. Lex acepta la entrada del usuario en forma de voz y texto. El programador especifica el flujo de la conversación. Basándose en esto, Lex gestiona el diálogo respondiendo a las entradas del usuario. La interfaz conversacional puede desplegarse como un bot de voz, una aplicación web, una plataforma de chat (como Slack o Facebook Messenger), etc. Lex también se utiliza para crear Amazon Alexa.
Lex combina dos funcionalidades básicas: la comprensión del lenguaje natural (NLU ) y el reconocimiento automático del habla (ASR). Permite a los desarrolladores sin experiencia en aprendizaje profundo crear interfaces conversacionales para chatbots, asistentes virtuales y similares.
Al ser una oferta de Amazon, se integra con otros servicios de AWS como:
- Amazon Cognito (para la gestión de identidades)
- Amazon CloudWatch (para monitorizar el servicio)
- DynamoDB (para el backend de la base de datos)
- Amazon Lambda (para conectar con fuentes de datos externas como Salesforce y HubSpot), etc.
Estas integraciones facilitan el despliegue y la ampliación del servicio de IA conversacional.
Configurar Amazon Lex
En esta sección, muestro cómo configurar Amazon Lex.
Ten en cuenta que la interfaz de usuario de AWS cambia con frecuencia. Por tanto, la disposición y el texto de los distintos apartados y títulos de las instrucciones y capturas de pantalla pueden cambiar con el tiempo o de una región a otra.
Paso 1: Inicia sesión en la consola de AWS
Supongo que ya tienes una cuenta de AWS. Si no es así, sigue las instrucciones de la páginae AWS Signup y registra una nueva cuenta.
En esta guía utilizaremos la consola de AWS para configurar y utilizar Lex. Introduce tus credenciales de AWS para iniciar sesión en la consola de AWS Lex y aterriza en la página de inicio de Lex.
Paso 2: Crear un nuevo bot
- Para crear un nuevo bot, visita la consola de Amazon Lex.
- Selecciona Empezar.
Lo anterior conduce a la página de inicio de Bots (mostrada a continuación). Esta página muestra la lista de Bots que ya has creado.
Página principal de Amazon Lex Bots.
- En esta página, selecciona Crear Bot.
Esto te llevará a la página de configuración de un nuevo bot. Muestra dos métodos para crear bots: Tradicional y Generativa IA.
Crea un nuevo bot.
Queremos aprender el proceso de instalación y configuración de bots. Por tanto, elige elmétodo Tradicional y empieza con un bot en blanco .
- Nombre bot: Dale al bot un nombre y una descripción. En este artículo, crearemos un bot sencillo llamado "CabBookBot" para reservar un taxi .
- Permisos IAM: Elige el rol adecuado para gestionar la autorización y autenticación del bot.
- Si ya has creado bots anteriormente, elige en el desplegable de roles existentes.
- Si es tu primer bot, elige "Crear un rol con permisos básicos de Amazon Lex".
- COPPA: Si este bot está diseñado para servir a niños y menores, especifica que está sujeto a la Ley de Protección de la Privacidad Infantil en Internet (COPPA). Elegimos "No".
- Tiempo de espera de sesión inactiva: Los robots deben recordar los mensajes anteriores del usuario para mantener el "contexto" a lo largo de la conversación. Si un usuario no ha respondido en un tiempo, suponemos que ya no utiliza el bot y restablecemos el contexto para un nuevo usuario. Déjalo en el valor por defecto.
No es necesario que actualices los ajustes avanzados opcionales; simplemente pasa a la siguiente sección.
También debes configurar el idioma o idiomas del bot, porque los bots de Lex se basanen el procesamiento del lenguaje natural (PLN).
- En este ejemplo, utilizamos la opción por defecto español (EE.UU.) idioma.
- Mantén la configuración por defecto y selecciona Hecho.
A continuación, serás conducido a la sección Intentos que configuraremos en la siguiente sección.
Una vez creado un bot básico, ahora te explico cómo configurarlo para nuestro caso de uso deseado: reservar un taxi.
Paso 3: Configurar intentos
Como su nombre indica, las intenciones representan la intención del usuario o el objetivo de la conversación. Por ejemplo, el usuario puede querer reservar un hotel o un vuelo. Cada bot puede servir para múltiples objetivos.
Si se le proporcionan unos cuantos textos de ejemplo (llamados enunciados de muestra) para cada intención, Lex utiliza la PNL para recognizar y hacer coincidir la entrada del usuario con la intención correcta basándose en estos enunciados. Por ejemplo, un robot de reserva de taxis puede tener enunciados de muestra como "quiero reservar un taxi", "resérvame un taxi de X a Y en esta fecha", etc.
Después de seleccionar Hecho en la página de creación del bot en el paso anterior, accederás a la página donde puedes crear una nueva intent llamada NewIntent
.
En la página Intención:
- Busca el Flujo de Conversación en la parte superior. Esto ilustra el flujo y los mensajes de texto de muestra para cada paso de la conversación.
- Actualiza el nombre de la intent a algo significativo, como "CabBookIntent", y proporciona una descripción relevante.
Paso 4: Añadir expresiones de muestra
Lex necesita unos cuantos enunciados de muestra para cada intención a fin de reconocer si la necesidad del usuario coincide con la intención actual.
- En la página Intención, desplázate hasta la sección Ejemplos de enunciados.
- Cambia la ventana del editor a Texto sin formato.
- Añade algunas expresiones de muestra, una en cada línea, por ejemplo:
- Quiero reservar un taxi
- Resérvame un taxi
- Necesito reservar un taxi
Ejemplos de expresiones.
- Añade una Respuesta inicial, como "Vale, te ayudaré a reservar un taxi", para reconocer la petición del usuario.
Crear un flujo de conversación
Los robots Lex siguen una estructura de conversación predefinida. El flujo de la conversación esboza y da las especificaciones de los componentes de la conversación. En esta sección, explico cómo diseñar la conversación para comunicarse con el usuario y obtener la información necesaria para satisfacer su petición.
Paso 1: Añadir ranuras para capturar la entrada del usuario
El bot tiene que pedir al usuario información relevante. Las ranuras contienen información que el robot necesita para satisfacer la petición del usuario. Por ejemplo, el robot de reserva de taxis recibe las ciudades de partida y destino y la fecha del viaje como valores de ranura.
Añade ranuras a los intentos.
Para cada ranura, tienes que especificar estos parámetros:
- Nombre de la ranura: El bot utiliza este nombre como marcador de posición para el valor de la ranura. Por ejemplo, puedes configurar la respuesta del bot como "Quieres viajar desde {CiudadFuente}" y sustituirá automáticamente el valor de la ranura
SourceCity
introducido por el usuario. - Tipo de ranura: Al igual que las variables de programación, las ranuras Lex pueden ser de varios tipos. Existen muchos tipos de ranuras preconstruidas, como
AMAZON.City
,AMAZON.Date
, etc. También puedes añadir tipos de ranura personalizados (de los que hablaremos más adelante). - Prompt: Proporciona una plantilla de texto que el bot pueda utilizar para preguntar (preguntar) al usuario el valor de cada ranura.
- Selecciona Añadir ranura, y añade las siguientes ranuras, marcándolas según sea necesario:
Nombre de la ranura |
Tipo de ranura |
Pregunta |
FuenteCiudad |
AMAZON.City |
¿Desde qué ciudad vas a viajar? |
DestinoCiudad |
AMAZON.City |
¿A qué ciudad viajarás? |
FechaViaje |
AMAZON.Date |
¿En qué fecha viajarás? |
- Añade algunas expresiones adicionales que capten directamente los valores de las ranuras. Por ejemplo:
- Reserva un taxi en {FechaDelViaje} de {CiudadDeFuente} a {CiudadDestino}
- Reserva un taxi de {CiudadDeFuente} a {CiudadDeDestino} para {FechaDeViaje}
Ranuras personalizadas
Los tipos de ranura incorporados no siempre son suficientes para todos los casos de uso. Por ejemplo, un servicio de reserva de taxis puede tener un tipo de ranura para el tipo de coche (compacto, utilitario, sedán, todoterreno, etc.) que quiera el usuario.
Para añadir una ranura personalizada:
- Ir a Tipos de ranuras del menú de la columna izquierda:
- CabBookBot > Versiones del bot > Versión borrador > Todos los idiomas > Español (US) > Tipos de ranuras).
- Añade un nombre (como
CabType
) y una descripción para el nuevo tipo de ranura. - Elige uno de los dos tipos de valores de ranura:
- Expande: Proporcionas algunos valores de muestra para la ranura, y Lex los utiliza como ejemplos para aprender nuevos valores posibles. Por ejemplo, dada una lista de apellidos, Lex adapta el tipo de ranura para aceptar apellidos similares que no hayas enumerado explícitamente.
- Restringe: La ranura sólo acepta valores de la lista que proporciones. No aprenderá nuevos valores.
En este caso, tenemos unos cuantos tipos de cabina predeterminados. Por tanto, restringimos nuestros valores de ranura a estos tipos.
- También puedes proporcionar valores alternativos para cada valor. Por ejemplo, para el tipo de cabina,
Limo
es un valor aceptable paraLimousine
.
Ranuras personalizadas.
- Selecciona Guardar tipo de ranura. El nuevo tipo de ranura está disponible cuando se añade una ranura a la intent.
Paso 2: Configurar la gestión de avisos y errores
Cuando el usuario da una respuesta no válida a una pregunta sobre un valor de ranura, Lex repite la pregunta. La sesión finaliza cuando el usuario no da repetidamente una respuesta adecuada (como un nombre de ciudad válido).
Configura Lex para que lance un mensaje de error (antes de terminar la sesión) si el usuario no proporciona repetidamente un valor de ranura válido:
- Selecciona una ranura individual y elige Opciones avanzadas para esa ranura.
- Desplázate por la ventana de opciones avanzadas hasta la sección Captura de ranuras: respuesta ante fallos.
- Proporciona una respuesta adecuada para las entradas no válidas. Por ejemplo, si el usuario introduce repetidamente una ciudad que no se reconoce, el bot puede responder: "Lo sentimos, no prestamos servicio en esa ciudad".
Tratamiento de errores y respuesta a fallos.
Todos los robots tienen un FallbackIntent
, que se invoca cuando la entrada del usuario no coincide con las intenciones existentes. Como esta intención se invoca por defecto, sus expresiones no pueden personalizarse.
- Especifica una respuesta de cierre significativa con el
FallbackIntent
y termina la conversación.
Respuesta final.
Paso 3: Confirmación, cumplimiento y cierre
Confirma la intención del usuario después de obtener los valores adecuados para las ranuras y antes de satisfacer la petición.
- Utiliza la sección Confirmación para proporcionar un mensaje de confirmación.
- Observa que hay un pequeño interruptor para el diálogo de Confirmación. Actívalo.
Es habitual incluir los valores de las ranuras en el mensaje de confirmación. Por ejemplo: "Confirma (sí o no) que quieres hacer una reserva de {CiudadDeFuente} a {CiudadDeDestino} en {FechaDeViaje}".
- Proporciona una respuesta de Rechazar en caso de que el usuario responda negativamente a la pregunta de confirmación. Por ejemplo: "Vale, no haremos esta reserva".
Indicación de confirmación.
La respuesta de cumplimiento indica al usuario que el bot está empezando a atender su solicitud (reservar el taxi).
- En la sección Cumplimiento, proporciona otro mensaje después de cumplir con éxito la solicitud. Por ejemplo: "Vale, hemos hecho esta reserva".
La respuesta de cierre es el mensaje final que se envía al usuario. Por ejemplo: "Gracias por viajar con nosotros. Buen viaje!".
- Actualiza las respuestas y selecciona Guardar intento.
Respuestas de cumplimiento y cierre.
Prueba tu bot de Amazon Lex
Ahora que hemos creado el bot y su estructura de conversación, ¡podemos probarlo!
Paso 1: Prueba en la consola Lex
- Busca los botones Construir y Probar en la parte superior de la página Intenciones.
- Construye el robot. Debes reconstruir el bot después de cada cambio.
- Selecciona Probar para probar el bot en la consola Lex.
- Introduce mensajes relevantes en la ventana de chat emergente y responde a las indicaciones del bot.
Probando el bot Amazon Lex.
Errores comunes de configuración
Algunas de las secciones, como Confirmación, Cumplimiento y Respuesta final, son, en principio, opcionales. Para activar una sección, activa el interruptor basculante.
En algunos casos, habilitar una sección o respuesta habilita automáticamente una función Lambda para esa sección. Si una sección concreta tiene el conmutador de función lambda activado, pero no hay ninguna función lambda asociada, obtendrás un error como el que se muestra a continuación:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
El error anterior procede de la sección Cumplimiento. Para resolverlo, ve a la configuración avanzada en la sección correspondiente y desmarca la opción de utilizar una función Lambda.
Otro error similar se produce cuando el flujo está mal configurado. Por ejemplo, considera este mensaje de error en la fase de construcción:
'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.
Para resolver este error, entra en las Opciones avanzadas para la Respuesta inicial. Observa que elgancho de diálogo Código está activado. Sin embargo, en esta fase, todavía no hemos activado las funciones Lamba ni las hemos configurado para inicializar la conversación. Desactiva el gancho de código y actualiza el bot; debería construirse normalmente.
Opciones avanzadas para la respuesta inicial.
Paso 2: Prueba con voz (Opcional)
Los robots Lex funcionan por defecto tanto con texto como con voz.
- Pulsa el icono del micrófono en la ventana de chat para comunicarte utilizando la voz.
- El texto del marcador de posición del campo de entrada cambia a "Escuchando...".
- Di tu intención, por ejemplo: "Quiero reservar un taxi".
- Pulsa la marca de verificación a la derecha del campo de introducción de texto.
- Lex transcribirá brevemente la entrada de voz y responderá con audio.
Amazon Polly convierte texto en habla natural. Se utiliza en aplicaciones basadas en el habla, como lectores de noticias, juegos, bots, etc., para generar un habla similar a la humana a partir de un texto. Desde 2021 , Amazon Lex es compatible con Amazon Polly Neural Text-to-Speech (NTTS). Así, el bot Lex puede generar directamente respuestas de voz que suenen naturales.
Para configurar la voz del bot:
- En la página de inicio del bot, selecciona Ver idiomas.
- Elige la lengua adecuada.
- También puedes seleccionar el idioma correspondiente en Todos los idiomas del menú de la izquierda.
- En el Detalles del idioma selecciona Editar.
- Esto te lleva a la página Idioma página.
- Bajo la Voz puedes escuchar varias muestras de voz y seleccionar la voz de texto a voz que prefieras.
Definir un cumplimiento con AWS Lambda
En la práctica, un bot necesita comunicarse con otros servicios backend. Por ejemplo, un bot de reserva de taxis necesita enviar la información del viaje a un punto final de la API y recibir una respuesta satisfactoria. Las funciones lambda ayudan a hacerlo.
Las funciones de AWS Lambda son una forma de escribir lógica del lado del servidor y ejecutarla sin tener que alquilar explícitamente un VPS o instancias de cómputo.
Para empezar con las funciones lambda:
- Ve a la página de inicio de AWS Lambda.
- Selecciona Crear función.
- Para este ejemplo, elige la opción de crear una función desde cero.
- Elige
Python 3.x
(3.13 en el momento de escribir esto) como lenguaje yx86_64
como procesador para ejecutar la función. - Si es tu primera función Lambda, crea un nuevo rol. También puedes utilizar uno de los roles existentes si sabes que tiene los permisos adecuados.
- Selecciona Crear función.
- Introduce el código de la función en el Código de la página web de la función Lambda concreta.
A continuación, mostramos una breve función Lambda que envía un mensaje de éxito en la función Cumplimiento :
import json
import urllib.request
def lambda_handler(event, context):
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
if event['invocationSource'] == 'FulfillmentCodeHook':
message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Configura el Bot para que llame a esta función Lambda:
- Ve a la página de inicio del bot. En el menú de la izquierda, selecciona la opción Aliases (Despliegue > Aliases) .
- Por defecto, ya debería tener un alias con el nombre TestBotAlias.
- Selecciona el alias.
- En la página de alias, en idiomas, busca el idioma del bot. Este ejemplo está en English(US).
- Selecciona el idioma.
- En la página del idioma, busca la sección Función lambda.
- En fuente, selecciona el nombre de tu función Lambda.
- La opción por defecto para la versión es
$LATEST
. Déjalo sin cambios. - Guarda los cambios.
En este ejemplo, queremos utilizar la función Lambda en la fase de cumplimiento:
- En la página Intención, ve a Opciones avanzadas en la sección Cumplimiento sección Cumplimiento.
- En la sección Gancho de código Lambda de cumplimientomarca la casilla de verificación con la etiqueta Utilizar una función Lambda para el cumplimiento.
- Guarda los cambios (selecciona Actualizar opciones) en las opciones de Cumplimiento.
- Guarda la intención.
- Ve a la página Intención del bot, constrúyelo y pruébalo.
Ahora, la respuesta procede de la función Lambda:
Prueba la función Lambda integrada con el bot Lex.
Despliega tu bot de Amazon Lex
Después de crear y probar el bot Lex, estamos listos para desplegarlo. El despliegue es un tema complejo cuyas particularidades dependen de cada caso de uso. En esta sección, ofrezco una visión general de varios métodos habituales de despliegue.
Paso 1: Desplegar en una aplicación web o móvil
Lex puede integrarse en aplicaciones web y móviles utilizando la API, el SDK o las bibliotecas prediseñadas:
- CloudFormation: AWS CloudFormation es una solución de Infraestructura como código. Permite utilizar archivos YAML para agrupar, aprovisionar, implementar y administrar varios recursos de AWS como un producto completo. CloudFormation tiene plantillas para integrar varios productos de AWS, como buckets S3, funciones Lambda, bots Lex, etc. Utiliza el archivo de plantilla Lex YAML para configurar el bot Lex como parte de un proyecto CloudFormation.
- Integración en el sitio web: AWS ha puesto a disposición un conjunto de archivos cargadores de Javascript y el SDK de AWS para cargar un bot en un sitio web. Incluyen los archivos preconstruidos de la interfaz de usuario de Lex y una biblioteca de carga para cargar el bot Lex. El bot puede integrarse en un sitio web como una página independiente o un iframe.
- Aplicaciones móviles nativas: AWS Amplify incluye las herramientas para integrarse con varios frontends móviles y web, como ReactJS / React Native, NextJS, Angular, Android, iOS, etc. La documentación de Amplify explica cómo configurar un bot Lex para que funcione con estos SDK.
- API Lex: Para tener un control total sobre las interacciones y la interfaz, puedes utilizar la API Lex. Utilizando la API, puedes pasar los mensajes del usuario y del bot (el uno al otro) mientras mantienes el control de la experiencia del usuario a través de tu aplicación. Lex ofrece dos API:
- La API de tiempo de ejecución se utiliza para la interacción con el usuario, como se ha explicado anteriormente.
- La API de construcción se utiliza para construir y configurar el bot Lex mediante programación, en lugar de utilizar la GUI.
Los pasos que se indican a continuación describen a grandes rasgos cómo desplegar el chatbot como una página web:
- Utiliza la biblioteca Lex Web UI Loader. Esta biblioteca crea un objeto
ChatBotUiLoader
, que incluye los constructoresFullPageLoader()
yIframeLoader
. La funciónload()
de estos constructores carga el bot en la página o iFrame, respectivamente. - Para cargar el bot en la página web, especifica la configuración del chatbot:
- El ID de la piscina Cognito. Ten en cuenta que túnecesitas un grupo de identidades de AWS Cognito para conectarte al bot. Puedes crear un grupo de identidades desde la consola de AWS Cognito. Debes vincular el grupo de identidades de Cognito al bot Lex.
- El nombre y los datos del bot Lex.
- Carga el bot utilizando la función
.load()
.
El siguiente fragmento muestra el esquema de una función JavaScript que despliega un bot Lex en una página web:
<!-- LexWebUi loader -->
<script src="./lex-web-ui-loader.js"></script>
<script>
// instantiate the loader
var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();
var chatbotUiconfig = {
cognito: {
poolId:
},
lex: {
initialText: 'How can I help you?',
botName: 'CabBookBot'
},
ui: {
toolbarTitle: 'Cab Booking Lex Bot',
toolbarLogo: ''
},
};
lexWebUiLoader.load(chatbotUiConfig)
.then(function () {
console.log('chatbot UI loaded');
})
.catch(function (error) {
console.error('chatbot UI failed to load', error);
});
</script>
Paso 2: Integración con plataformas de mensajería
Puedes integrar el bot Lex con servicios de mensajería de terceroscomo Facebook Messenger, Slack y Twilio SMS.
En esta sección te explicamos cómo integrar Lex con Facebook Messenger. Antes de empezar, necesitas
- Una cuenta de desarrollador de Facebook
- Una página de empresa en Facebook. Ten en cuenta que la aplicación de Facebook necesita permiso para utilizar la API de mensajería con Lex. Sólo se conceden estos permisos a las aplicaciones revisadas y aprobadas por Facebook como aplicaciones empresariales verificadas.
A continuación, describo los pasos para integrar el bot Lex con Facebook Messenger, de modo que los usuarios que envíen mensajes a tu página de Facebook puedan recibir respuestas del bot.
- Crea una nueva aplicación de Empresa si aún no tienes una.
- En los casos de uso de la aplicación, selecciona Otros.
- Selecciona Empresa como tipo de aplicación.
- Puedes añadir varios productos de Facebook a cada aplicación, como Messenger, Instagram, etc. Añade Messenger a la aplicación y elige Configurar.
- En la sección Configuración de la API de Messenger de Messenger:
- Conecta tu página de empresa de Facebook a esta aplicación.
- Genera un nuevo token (con el botónGenerar ) para esta app. Copia este token en un editor de texto.
- Fíjate en el mensaje: "Para enviar y recibir mensajes, solicita el permiso pages_messaging". Selecciona Solicitar permiso para solicitar los permisos necesarios .
- Si tu aplicación aún no ha sido revisada y aprobada por Facebook, envíala para su revisión.
- Desde Configuración de la aplicación en las opciones del menú de la izquierda, elige Básico.
- Selecciona Mostrar en Secreto de la aplicación y copia el código secreto en un archivo de texto.
Ahora ve a la consola Lex y elige el bot que quieres integrar con Messenger.
- En el árbol del menú de la izquierda, busca Integraciones de canales en Despliegue.
- Selecciona Añadir canal en Crear canal:
- Elige Facebook en Plataforma.
- Elige Clave KMS en Políticas de identidad.
- En Configuración de la integración:
- Dale un nombre a la integración
- Elige un alias (del bot Lex) que quieras integrar con Messenger
- Elige la lengua.
- En Configuración adicional:
- En Alias, introduce una cadena para identificar la app que llama a Lex. Necesitarás esta cadena más adelante.
- En Clave de acceso a la páginaintroduce el código de acceso que copiaste en Facebook.
- En Clave secreta de la aplicaciónintroduce la clave secreta que copiaste en Facebook.
- Utiliza el botón Añadir para crear el nuevo canal.
- Vuelve a la página Integraciones de canales y selecciona el canal que has creado.
- Copia la URL en Punto final en la URL de devolución de llamada de devolución de llamada.
Vuelve a la consola de desarrollador de Facebook y abre la aplicación que creaste anteriormente.
- En el menú de la izquierda, en Mensajeroselecciona Configuración de la API de Messenger.
- En URL de devolución de llamadaintroduce la URL de devolución de llamada que copiaste en la consola Lex.
- En Verificar tokenintroduce la cadena de alias que introdujiste en la consola Lex.
- Verifica y guarda los cambios.
- En Webhooks, selecciona Añadir suscripciones. Selecciona mensajes en la ventana emergente, seguido de Guardar.
Ahora puedes enviar mensajes a la página de Facebook con las expresiones de muestra del bot Lex y obtener respuestas relevantes.
Paso 3: Conexión de Lex con AWS Lambda para mejorar la interactividad
En la sección anterior escribimos una función Lambda sencilla para la sección de cumplimiento. Sólo devolvía un mensaje de texto: "Lambda ha hecho tu reserva". En la práctica, enviaríamos el mensaje de éxito después de satisfacer la solicitud.
Por ejemplo, la función Lambda envía una solicitud con los datos de la reserva del usuario a la API backend, que realiza la reserva y luego responde al usuario basándose en la respuesta de la API.
A continuación te explicamos cómo debes hacer lo anterior:
- El objeto JSON
slots
de la función Lambda contiene los valores de las ranuras. Estudia su estructura utilizando un embellecedor de código para extraer los valores adecuados. - El fragmento de código siguiente muestra cómo obtener el valor de la ranura para
SourceCity
y pasar este valor a una API backend que gestiona las reservas. Añade este código dentro de la funciónlambda_handler()
:
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Ahora muestro cómo hacer peticiones a la API desde la función Lambda. Para este ejemplo, utilizamos el punto final ficticio de la API en ASDFast. Este servicio te permite enviar peticiones HTTP(S) a un punto final de la API y recibir una respuesta realista.
- Con el código siguiente, enviamos una petición
GET
a este punto final. A continuación, personalizamos el mensaje que el bot envía al usuario en función del código de estado de respuesta de la solicitudGET
:
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
A continuación se muestra la función lambda completa:
import json
import urllib.request
def lambda_handler(event, context):
print("event - ", event)
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
print("intent - ", intent)
if event['invocationSource'] == 'FulfillmentCodeHook':
print("FulfillmentCodeHook")
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
#message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Buenas prácticas para crear robots Amazon Lex
Tras discutir los principios básicos de los bots Lex y sus usos prácticos, en esta sección presento algunas prácticas recomendadas para diseñar bots.
Diseña conversaciones claras y concisas
Asegúrate de que tus rutas y franjas conversacionales son precisas:
- Cada intención debe centrarse en una única tarea, y cada ranura debe capturar el valor correspondiente a una única variable.
- No hagas que los textos de los avisos sean demasiado prolijos o verbales. Mantén los diálogos breves y llega rápidamente al resultado deseado.
Este enfoque evita confundir al usuario y posibles malentendidos por parte de Lex.
Utilizar tipos de ranura y validación
El bot y sus servicios backend asociados necesitan información precisa sobre los requisitos del usuario. Utilizar los tipos de ranura adecuados lo garantiza.
- En general, aconsejo utilizar las ranuras incorporadas para tipos de datos comunes, como
AMAZON.Date
para fechas,AMAZON.City
para ciudades, etc. Estos tipos de ranura han sido ampliamente probados y se sabe que son compatibles con diversas aplicaciones. - Puedes diseñar tipos de ranura personalizados en casos excepcionales. Asegúrate de que están correctamente configurados y probados.
- Además de utilizar los tipos de ranura correctos, valida que el usuario haya dado la información correspondiente a todas las ranuras obligatorias. Esto permite que la API backend satisfaga la petición del usuario y garantiza una experiencia de usuario fluida.
Permitir conversaciones multigiro
A los usuarios les puede resultar abrumador introducir toda la información necesaria en un solo mensaje, como "Reserva un viaje para N personas en fecha/hora Z de X a Y en taxi tipo T".
- Utiliza conversaciones multigiro para garantizar una mejor experiencia de usuario. Como muchas herramientas modernas basadas en modelos lingüísticos, Lex puede mantener el contexto a través de una conversación de varios turnos. Esto le permite relacionar indicaciones y respuestas anteriores con interacciones recientes.
- Desglosar una pregunta compleja en una serie de preguntas breves mejora la fluidez de la conversación.
Supervisa y optimiza el rendimiento
Para un bot en producción, es crucial controlar su rendimiento a través de varias métricas como:
- Número total de conversaciones.
- Duración media de la conversación.
- Media de turnos por conversación.
- Número (y proporción) de expresiones detectadas y omitidas.
- Errores lambda, y mucho más.
Utiliza estas métricas para medir las interacciones de los usuarios y el rendimiento del bot:
- En el menú de la izquierda de Bot selecciona la opción Análisis de la página del Bot.
- Accede al Panel de Conversaciónel Panel de rendimientoy Métricas de CloudWatch para estudiar el rendimiento del bot.
AWS CloudWatch es una herramienta de monitorización de los servicios de AWS. Consolida varias métricas de rendimiento en tiempo real en una sola página. Utiliza estas métricas para mejorar y ajustar el rendimiento del bot.
Conclusión
En este artículo, exploramos Amazon Lex V2, el servicio de chatbot consciente del contexto de AWS. Recorrimos el proceso de creación de un bot básico, configurándolo para interactuar con los usuarios e integrándolo con una API backend mediante AWS Lambda. Además,discutimos las mejores prácticas y opciones de despliegue, incluida la incrustación del bot en un sitio web o en una página de Facebook.
Mientras sigues aprendiendo sobre los servicios de AWS, considera la posibilidad de ampliar tus conocimientos con estos cursos:
- Consigue una base sólida en los servicios en la nube de AWS con el curso Tecnología y servicios en la nube de AWS.
- Aprende a gestionar eficazmente la seguridad y los costes de AWS en el curso Gestión de la seguridad y los costes de AWS.
- Explora las interacciones programáticas de AWS con Boto3, el SDK de AWS para Python, en el curso Introducción a AWS Boto en Python.
Aprovechando estos recursos, estarás bien equipado para crear, proteger y optimizar aplicaciones basadas en AWS, ¡incluidos los chatbots impulsados por Amazon Lex!
Preguntas frecuentes
¿Se integra Lex con otros servicios de AWS?
Sí, Lex se integra con servicios como Lambda, S3, CloudWatch y más. Esto te permite mejorar la funcionalidad del bot, integrarlo con otros productos y controlar su rendimiento.
¿Lex maneja tanto voz como texto?
Sí, Lex puede, por defecto, manejar tanto entradas de voz como de texto. Lex admite varias voces para las interacciones habladas. También puedes utilizar AWS Polly para sintetizar el habla y enviar el archivo de audio a Lex.
¿Puedo utilizar una interfaz de usuario personalizada para un bot de Lex?
Sí, Lex viene con una API de ejecución que puede transmitir la entrada del usuario al bot y recibir sus respuestas (las del bot). Así, el bot Lex sirve como backend de la interfaz de usuario personalizada.
¿Puedo utilizar Lex sin funciones Lambda?
En principio, sí. Puedes diseñar la conversación totalmente dentro de Lex. En la práctica, un bot necesita interactuar con otros servicios API backend que satisfagan la petición del usuario (como reservar un billete). Necesitas AWS Lambda para interactuar con servicios externos.
¿Es posible entrenar a AWS Lex?
Hasta cierto punto, sí. El motor NLU de Lex puede reconocer entradas de usuario similares a las expresiones de muestra. También puede ampliar los valores válidos de un tipo de ranura basándose en unas pocas muestras. Sin embargo, no esperes el mismo nivel de capacitación que con un LLM. Lex está diseñado para interacciones limitadas específicas del trabajo y no para conversaciones extensas.
Arun es un antiguo fundador de startups que disfruta construyendo cosas nuevas. Actualmente explora los fundamentos técnicos y matemáticos de la Inteligencia Artificial. Le encanta compartir lo que ha aprendido, así que escribe sobre ello.
Además de en DataCamp, puedes leer sus publicaciones en Medium, Airbyte y Vultr.
Aprende más sobre AWS con estos cursos
curso
AWS Cloud Technology and Services Concepts
curso
AWS Security and Cost Management Concepts

blog
Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)
tutorial
Guía para principiantes de la API de OpenAI: Tutorial práctico y prácticas recomendadas
tutorial
Tutorial de la API de OpenAI Assistants
tutorial
Guía para principiantes sobre la ingeniería de avisos ChatGPT
tutorial