🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram Youtube
Linktr
¡Bienvenido a la Parte 2 de nuestra serie de blog!
En esta publicación, hablaré de los conceptos explorados en la Parte 1 para crear una solución escalable y lista para producción. Usando AWS Lambda y AWS CDK, transformarás tu prototipo basado en notebooks en una arquitectura serverless robusta.
Juntos, desarrollaremos funciones AWS Lambda para la generación y recuperación de embeddings, aprovecharemos AWS CDK para el despliegue de infraestructura como código, e integraremos con Amazon S3 y Amazon Aurora PostgreSQL para un almacenamiento y recuperación eficiente de datos. Al final de este tutorial, tendrás un motor de búsqueda multimodal serverless completamente funcional, capaz de entender y recuperar tanto contenido textual como visual.
✅ Nivel de AWS: Avanzado - 300
Pre-requisitos:
- Conocimiento fundamental de Python
- Cuenta de AWS
- Habilitar el acceso a los siguientes modelos:
- Amazon Titan Embeddings V2
- Modelos Anthropic Claude 3 (Haiku o Sonnet)
- Configurar la Interfaz de Línea de Comandos de AWS (CLI)
- Opcional: Inicializar tu cuenta/región si este es tu primer proyecto CDK
- Leer sobre "Comenzar con Python" de AWS CDK
💰 Costo de la app:
En la segunda parte, construirás una Aplicación de Embeddings Serverless utilizando el AWS Cloud Development Kit (CDK) para crear cuatro Funciones Lambda.
Aprende cómo probar las Funciones Lambda en la consola con eventos de prueba.
Funciones AWS Lambda para Generar Embeddings de Archivos de Texto e Imagen:
To generate embeddings for the text content of PDF files with FAISS.
Evento para el trigger:
{
"location": "REPLACE-YOU-KEY",
"vectorStoreLocation": "REPALCE-NAME.vdb",
"bucketName": "REPLACE-YOU-BUCKET",
"vectorStoreType": "faiss",
"splitStrategy": "semantic",
"fileType": "application/pdf",
"embeddingModel": "amazon.titan-embed-text-v1"
}
To generate embeddings for images with FAISS.
Evento para el trigger:
{
"location": "REPLACE-YOU-KEY-FOLDER",
"vectorStoreLocation": "REPLACE-NAME.vdb",
"bucketName": "REPLACE-YOU-BUCKET",
"vectorStoreType": "faiss",
"splitStrategy": "semantic",
"embeddingModel": "amazon.titan-embed-image-v1"
}
To generate embeddings for image/pdf with pgvector and Amazon Aurora.
💡 Antes de probar esta Función Lambda, ten en cuenta que debe estar en la misma VPC y ser capaz de acceder a la base de datos Amazon Aurora PostgreSQL. Para eso, consulta Conectando automáticamente una función Lambda y un clúster de Aurora DB, Using Amazon RDS Proxy for Aurora and Use interface VPC endpoints (AWS PrivateLink) for Amazon Bedrock VPC endpoint.
Evento para el trigger:
Envento para el trigger:
{
"location": "YOU-KEY",
"bucketName": "YOU-BUCKET-NAME",
"fileType": "pdf or image",
"embeddingModel": "amazon.titan-embed-text-v1",
"PGVECTOR_USER":"YOU-RDS-USER",
"PGVECTOR_PASSWORD":"YOU-RDS-PASSWORD",
"PGVECTOR_HOST":"YOU-RDS-ENDPOINT-PROXY",
"PGVECTOR_DATABASE":"YOU-RDS-DATABASE",
"PGVECTOR_PORT":"5432",
"collectioName": "YOU-collectioName",
"bedrock_endpoint": "https://vpce-...-.....bedrock-runtime.YOU-REGION.vpce.amazonaws.com"
}
Funciones AWS Lambda para Consultar Archivos de Texto e Imagen en una Base de Datos Vectorial:
Para manejar el proceso de embedding, hay una Función Lambda dedicada para cada tipo de archivo:
Para recuperar contenido de texto de una base de datos vectorial
Evento para el trigger:
{
"vectorStoreLocation": "REPLACE-NAME.vdb",
"bucketName": "REPLACE-YOU-BUCKET",
"vectorStoreType": "faiss",
"query": "YOU-QUERY",
"numDocs": 5,
"embeddingModel": "amazon.titan-embed-text-v1"
}
Para recuperar la ubicación de imágenes de una base de datos vectorial
Puedes buscar por texto o por imagen
- Evento de texto para el trigger:
{
"vectorStoreLocation": "REPLACE-NAME.vdb",
"bucketName": "REPLACE-YOU-BUCKET",
"vectorStoreType": "faiss",
"InputType": "text",
"query":"TEXT-QUERY",
"embeddingModel": "amazon.titan-embed-text-v1"
}
- Image event to trigger
💡 El siguiente paso es tomar el valor de image_path y descargar el archivo del bucket de Amazon S3 con el método download_file de boto3.
To generate embeddings for image/pdf with pgvector and Amazon Aurora.
{
"location": "YOU-KEY",
"bucketName": "YOU-BUCKET-NAME",
"fileType": "pdf or image",
"embeddingModel": "amazon.titan-embed-text-v1",
"PGVECTOR_USER":"YOU-RDS-USER",
"PGVECTOR_PASSWORD":"YOU-RDS-PASSWORD",
"PGVECTOR_HOST":"YOU-RDS-ENDPOINT-PROXY",
"PGVECTOR_DATABASE":"YOU-RDS-DATABASE",
"PGVECTOR_PORT":"5432",
"collectioName": "YOU-collectioName",
"bedrock_endpoint": "https://vpce-...-.....bedrock-runtime.YOU-REGION.vpce.amazonaws.com",
"QUERY": "YOU-TEXT-QUESTION"
}
💡 Usa location y bucketName para entregar la ubicación de la imagen para realizar una consulta.
🚀 ¡Vamos a construir!
Las Amazon Lambdas que construirás en este despliegue se crean con imágenes de contenedor, debes tener Docker Desktop instalado y activo en tu computadora.
Paso 1: Configuración de la APP
✅ Clona el repositorio
git clone https://github.com/build-on-aws/langchain-embeddings
✅ Ve a:
cd serveless-embeddings
✅ Configura la AWS Command Line Interface
Sigue los pasos:
Paso 2: Despliega la arquitectura con CDK.
✅ Crea el ambiente virtual:
python3 -m venv .venv
source .venv/bin/activate
para windows:
.venv\Scripts\activate.bat
✅ Instala los Requirements:
pip install -r requirements.txt
✅ Synthesize el Cloudformation Template con el siguiente comando:
cdk synth
✅ 🚀 El despliegue:
cdk deploy
🧹 ¡Limpia la casa!:
Si terminas de probar y quieres limpiar la aplicación, solo tienes que seguir estos dos pasos:
✅ Elimina los archivos del bucket de Amazon S3 creado en el despliegue.
✅ Ejecuta este comando en tu terminal:
cdk destroy
Conclusión
En esta publicación, has demostrado cómo transformar una solución de búsqueda multimodal basada en notebooks en una arquitectura serverless escalable utilizando servicios de AWS. Has recorrido el proceso de desarrollo de funciones Lambda para tareas de embedding, utilizando AWS CDK para el despliegue de infraestructura, e integrando con S3 y Aurora PostgreSQL para una gestión eficiente de datos.
Al aprovechar estas tecnologías serverless, ahora puedes desplegar un motor de búsqueda multimodal robusto y listo para producción, capaz de manejar tanto contenido textual como visual. Este enfoque no solo mejora la escalabilidad, sino que también reduce la sobrecarga operativa, permitiéndote concentrarte en mejorar tus capacidades de búsqueda y la experiencia del usuario.
Te animo a que construyas sobre esta base, experimentes con diferentes modelos de embedding y explores servicios adicionales de AWS para mejorar aún más tu motor de búsqueda multimodal. No dudes en compartir tus experiencias o hacer preguntas en los comentarios a continuación. ¡Feliz construcción!
Gracias,
Eli
🇻🇪🇨🇱 Dev.to Linkedin GitHub Twitter Instagram Youtube
Linktr
Top comments (0)