Integrando Amazon Nova Lite en una Alexa Skill

Amazon Nova Lite es un modelo multimodal de muy bajo costo que es increíblemente rápido para procesar entradas de imágenes, video y texto para generar salidas de texto que esta disponible a través de Amazon Bedrock. En este tutorial aprenderemos a integrarlo en una Alexa Skill para poder generar respuestas más dinámicas, creativas y relevantes para tus usuarios.
Desarrollar una Alexa Skill que se conecte con un modelo de inteligencia artificial como AWS Nova Lite representa una excelente oportunidad —y también un reto— para crear asistentes conversacionales verdaderamente inteligentes. En este artículo, te guiaré paso a paso en el proceso de integración del Modelo Fundacional “Nova Lite” en una Alexa Skill, utilizando la Alexa Developer y la AWS Console.
Pero antes de comenzar, conozcamos un poco sobre Nova Lite:
¿Qué es Nova Lite? Permalink
Amazon Nova Lite es uno de los modelos de IA de la familia de Amazon Nova. Su principal caracteristica es que al ser un modelo mutimodal puede procesar y entender diferentes tipos de datos a la vez, como texto, imagenes y videos. Lo cual lo hace muy versatil para diferentes aplicaciones.
Prerrequisitos Permalink
Antes de comenzar, asegúrate de tener lo siguiente:
- Cuenta en Alexa Developer Console
- Cuenta en Amazon Management Console
Paso 1: Crear la Alexa Skill Permalink
Vayamos a la Alexa Developer Console, en donde procederemos a generar una nueva Skill donde clic en el boton “Crear skill”:

Ingresemos un nombre para nuestra Skill e indiquemos la ubicación primaria:

Posteriormente:
- Escojamos el tipo de experiencia
- Indiquemos el modelo
- Seleccionemos el servicio de aprovisionamiento


Por último seleccionemos la plantilla a utilizar, en este caso usaremos la de Start from Scratch.

Revisemos que todo esté en orden con respecto a lo previamente indicado y demos click en el botón de Create Skill

Esperemos unos minutos en lo que se genera la Skill.

Paso 2: Construyendo la Skill Permalink
Una vez creada, demos click en el botón de Invocation Name, puesto que al generarse por primera vez, no cuenta con el nombre con el cual el usuario la podrá invocar.

Cambiemos el texto por el nombre con el cual queremos que se invoque nuestra Alexa Skill, en mi caso le puse: terra nova

Salvemos nuestro cambio haciendo click en el botón de Save

Paso 3: Crea un Intent personalizado Permalink
En la sección de Intents (que está dentro de Interaction Model), demos click en el botón de +Add Intent

Acto seguido configuremos un nuevo Intent llamado GenerarTextoNova

En los Sample Utterances añadamos algunas expresiones de ejemplo que los usuarios podrian decir para activar esta intención. Asegurate de crear un Slot, el cual pueden nombrarlo como gusten, en mi caso lo llamare consulta y por último hay que setearlo como de tipo AMAZON.SearchQuery
- Quisiera saber {consulta}
- Genera texto sobre {consulta}
- Cuéntame algo sobre {consulta}
- Dime {consulta}
- Explícame {consulta}
- Qué sabes de {consulta}
- Responde {consulta}
- Quiero saber {consulta}

Nuevamente guardemos nuestros cambios haciendo click en el botón de Save
Por último y como punto obligatorio debemos de construir la Skill (habilidad), para esto hagamos click en el botón Build skill que se encuentra en la parte superior derecha.

Paso 4: Hora del Código Permalink
Lo siguiente que debemos de realizar, es configurar una función de AWS Lambda, para ello deberemos de navegar a la consola de Amazon Management Console y seleccionar Lambda o buscarlo si es que no se tiene como visitado recientemente.

Una vez dentro, si no tenemos ninguna función creada previamente, se nos mostrará de la siguiente manera, en donde haremos clic en Crear una función:

En la siguiente vista, seleccionemos Crear desde cero e ingresemos los siguientes datos:
- Nombre: alexaNovaBackend
- Tiempo de ejecución: Python 3.13
- Arquitectura: x86_64
- Permisos: Creación de un nuevo rol con permisos básicos de Lambda

Hagamos clic en el botón de Crear una función.

Una vez creada, nos encontraremos en la vista de edición de la función Lambda.

- Integración con Boto3 en Lambda - Permalink
Posteriormente desplacémonos a la pestaña Código fuente que se encuentra en la parte inferior y reemplacemos el código existente con el siguiente:
import json
import boto3
bedrock = boto3.client('bedrock-runtime', region_name="us-east-1")
def lambda_handler(event, context):
try:
intent_name = event['request']['intent']['name']
if intent_name == 'GenerarTextoNova':
prompt = event['request']['intent']['slots']['consulta']['value']
response = invoke_titan_text(prompt)
speech_text = response
else:
speech_text = "Lo siento, no entiendo esa solicitud."
return {
'version': '1.0',
'response': {
'outputSpeech': {
'type': 'PlainText',
'text': speech_text
},
'shouldEndSession': True
}
}
except Exception as e:
print(f"Error: {e}")
return {
'version': '1.0',
'response': {
'outputSpeech': {
'type': 'PlainText',
'text': "Lo siento, hubo un problema al procesar tu solicitud."
},
'shouldEndSession': True
}
}
def invoke_titan_text(prompt):
model_id = 'amazon.titan-text-lite-v1'
accept = 'application/json'
content_type = 'application/json'
body = json.dumps({
"inputText": prompt,
"textGenerationConfig": {
"maxTokenCount": 200,
"temperature": 0.7,
"topP": 0.9
}
})
response = bedrock.invoke_model(
body=body,
modelId=model_id,
accept=accept,
contentType=content_type
)
response_body = json.loads(response['body'].read())
generated_text = "Nova Lite responde: " + response_body['results'][0]['outputText']
return generated_text
A grandes rasgos lo que hace este código de Python es que la función Lambda interactue con Amazon Bedrock.
Nota: el código de igual manera se encuentra en el siguiente Gist

Por último, hagamos clic en “Deploy (Desplegar)”

Paso 5: Conecta la Skill con la Lambda Permalink
Para que la función Lambda pueda comunicarse con la Alexa Skill, lo que debemos de hacer primero será copiar el ARN (Amazon Resource Name) de la función y pégarlo en el campo correspondiente en la Consola de Alexa.
arn:aws:lambda:us-east-1:842676015954:function:alexaNovaBackend

En la consola de Alexa, vayamos a la seccion de “Endpoint” en la Skill y borremos lo que se encuentra en Default Region

Para poder pegar el ARN del paso anterior:

Que no se nos olvide guardar los cambios haciendo click en el boton Save
Paso 6: Configurar el trigger de Alexa Skills Kit: Permalink
Nuevamente en la vista de nuestra función Lambda, hagamos clic en + Agregar desencadenador

En la nueva vista, del dropdown seleccionemos Alexa

Acto seguido, dejemos seleccionado el producto de Alexa que viene por default (Kit de habilidades de Alexa) y en la sección de Verificación del ID de la habilidad peguemos el ID de nuestra Alexa Skill (lo encuentras en la consola de desarrolladores de Alexa).



Finalmente, hagamos clic en Agregar.
Paso 7: Añadiendo Permisos Permalink
Nuevamente en nuestra función Lambda, ahora vayamos a la pestaña de Configuración y seleccionemos la opción de Permisos, puesto que aqui configuraremos los consentimientos necesarios:

Aqui, lo que haremos sera buscar el rol de IAM asociado a la función Lambda (generalmente tiene un nombre similar al de la función). Una vez localizado, hagamos clic en el nombre del rol.

Nos abrira una nueva ventana en nuestro navegador, ubiquemos Agregar permisos y del dropdown elijamos Crear política insertada

En el Editor de políticas seleccionamos JSON y peguemos la siguiente política:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel"
],
"Resource": "arn:aws:bedrock:<REGION>::foundation-model/amazon.titan-text-lite-v1"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:REGION:ACCOUNT_ID:log-group:/aws/lambda/YOUR_LAMBDA_FUNCTION_NAME:*"
}
]
}
Importante: Asegúrate de reemplazar
La región trabajada en este ejemplo es: us-east-1
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "bedrock:InvokeModel",
"Resource": "arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-lite-v1"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
}
]
}
Nota: En este ejemplo, estamos utilizando “amazon.titan-text-lite-v1”, que es parte de la familia de modelos Titan Text Lite ofrecidos a través de Bedrock. Si requieres hacer uso de otro FM como “Nova Micro” asegúrate de actualizar el “Resource” en la política de IAM. Para esto, consulta la documentación de Amazon Bedrock para obtener el ARN exacto del modelo Nova que necesites cuando esté disponible.
Hagamos clic en “Siguiente”.

Posteriormente en la nueva ventana denominada Revisar y Crear, tocara asignarle un nombre a la política (ej. BedrockAlexaNovaPolicy) y haz clic en “Crear política”.

Paso 7: Configurar el tiempo de espera Permalink
Ya por último, en la función Lambda, seleccionemos la pestaña de Configuración, y si hacemos clic en “Configuración general” podremos observar que el tiempo de espera es de 3 segundos:

Pasemos a modificar esto, por ende hagamos clic en Editar y cambiemos el tiempo de espera a 10 segundos, posteriormente hagamos clic en Guardar.


Paso 8: Probar la Skill en la Consola de Alexa Permalink
- Hagamos clic en la pestaña Test

- Activemos el entorno de pruebas seleccionando “Development”

- Lanza la Skill escribiendo el nombre que le diste en el Invocation Name, en mi caso seria terra nova y súmale un ejemplo de frase que haga que ingrese a nuestro Intent, por ejemplo:
Abre terra nova y genera texto sobre los power rangers
- Esperemos unos segundos y deberíamos de ver la respuesta generada por Nova Lite:

Y ¡listo!, hemos logrado integrar Amazon Nova Lite en una Alexa Skill.
Conclusión Permalink
Integrar Amazon Nova Lite en una Alexa Skill puede transformar la experiencia del usuario al proporcionar respuestas más inteligentes y contextuales. Con los pasos descritos en este tutorial, ahora tienes las herramientas necesarias para comenzar a experimentar con esta poderosa combinación de tecnologías.
¿Tienes dudas? ¡Déjalas en los comentarios! 🚀
¿Lo quieres ver en video? Permalink
Aquí les dejo la grabación de mi participación al lado de mi colega Uriel Arellano en el AWS Community Day de Bolivia: