🏠 Proyecto Ben — Agente IA Inmobiliario

Reporte de arquitectura y progreso | Actualizado: 26 de mayo de 2026

📋 Resumen del Proyecto

Ben es un agente de inteligencia artificial conversacional diseñado para transformar la experiencia de compra y venta de bienes raíces en Colombia.

Permite a los compradores obtener respuestas inmediatas y detalladas sobre cualquier inmueble a través de lenguaje natural vía WhatsApp o web, eliminando las esperas de días por una respuesta de un broker.

🧠 En palabras simples: Imagina que cada apartamento en venta tiene un vendedor virtual disponible 24/7 que sabe TODO sobre ese apartamento y puede responder cualquier pregunta al instante. Eso es Ben.

Propuesta de Valor:

Tags:

AWS Serverless GenAI Bedrock Pay-per-use

🏗️ Arquitectura

[Usuario] → [CloudFront + S3 estático] → [API Gateway] ↓ [Lambda: ben-chat] ↙ ↓ ↘ [S3] [Bedrock] [DynamoDB] JSONs Claude 4.5 Historial Fotos Haiku Scoring Catálogo
🧠 ¿Cómo funciona paso a paso?
1. El usuario escribe una pregunta en el chat web (ej: "¿Cuánto cuesta?")
2. La pregunta viaja por internet hasta el API Gateway (la puerta de entrada)
3. API Gateway le pasa la pregunta a Lambda (el cerebro organizador)
4. Lambda busca los datos del apartamento en S3 (el archivo con toda la info)
5. Lambda le dice a Bedrock/Claude: "Aquí están los datos, responde esta pregunta"
6. Claude genera una respuesta natural y amigable
7. Lambda guarda la conversación en DynamoDB (para recordar qué preguntó antes)
8. La respuesta viaja de vuelta al usuario en ~2 segundos

🎓 Explicación de cada componente (para dummies)

📦 S3 (Simple Storage Service)

¿Qué es? Un disco duro infinito en la nube. Como un Google Drive pero para la aplicación.
¿Qué guarda Ben ahí? Los archivos JSON con toda la info de cada apartamento (precio, habitaciones, fotos, dirección, etc.) y también la página web del chat.
Analogía: Es la bodega donde están las fichas técnicas de todos los apartamentos.

🌐 CloudFront

¿Qué es? Un servicio que hace copias de tu página web en servidores por todo el mundo para que cargue rápido sin importar dónde esté el usuario.
¿Para qué lo usa Ben? Para que la página del chat cargue rápido en Colombia (o donde sea).
Analogía: Es como tener fotocopias de tu menú en cada mesa del restaurante en vez de que todos vayan a la cocina a leerlo.

🚪 API Gateway

¿Qué es? La puerta de entrada. Recibe las preguntas que llegan de internet y las redirige al lugar correcto (la Lambda).
¿Para qué lo usa Ben? Es la URL pública donde el chat envía las preguntas. Sin esto, la Lambda no sería accesible desde internet.
Analogía: Es el recepcionista del edificio. Tú llegas, le dices qué necesitas, y él te conecta con la persona correcta adentro.
URL de Ben: https://b999yf310e.execute-api.us-east-2.amazonaws.com/chat

⚡ Lambda

¿Qué es? Un pedazo de código que se ejecuta SOLO cuando alguien lo necesita. No hay un servidor prendido 24/7 — se enciende, hace su trabajo, y se apaga. Solo pagas por el tiempo que estuvo prendido.
¿Para qué lo usa Ben? Es el cerebro organizador. Recibe la pregunta, busca los datos del apartamento, se los pasa a la IA, y devuelve la respuesta.
Analogía: Es un empleado freelance que solo trabaja cuando hay un cliente. Si nadie pregunta, no cobra.

🤖 Bedrock (Claude Haiku 4.5)

¿Qué es? El servicio de AWS que te da acceso a modelos de IA (como ChatGPT pero de Anthropic). Claude es el modelo que genera las respuestas en lenguaje natural.
¿Para qué lo usa Ben? Lambda le pasa los datos del apartamento + la pregunta del usuario, y Claude genera una respuesta amigable, precisa y en español.
Analogía: Es el vendedor experto que sabe hablar bonito. Tú le das la ficha técnica y él la convierte en una conversación natural.

🗃️ DynamoDB

¿Qué es? Una base de datos ultra rápida que cobra por uso. Si nadie la usa, cuesta $0.
¿Para qué lo usa Ben? Para dos cosas: (1) guardar el historial de cada conversación (así Ben recuerda qué preguntaste antes), y (2) tener un catálogo rápido de inmuebles para búsquedas futuras.
Analogía: Es la libreta donde el vendedor anota todo lo que habló con cada cliente para no repetir información.

🔐 IAM Role

¿Qué es? Los permisos. Define QUÉ puede hacer cada componente. La Lambda necesita permiso para leer S3, escribir en DynamoDB, y llamar a Bedrock.
Analogía: Es la tarjeta de acceso del empleado. Sin ella, no puede entrar a la bodega ni usar el teléfono.

🔔 SNS (Simple Notification Service)

¿Qué es? Un servicio de notificaciones. Puede enviar emails, SMS, o mensajes cuando algo pasa.
¿Para qué lo usa Ben? Para enviarte un email si los costos de la cuenta se pasan de $5 USD al mes.
Analogía: Es la alarma de tu casa. Si alguien entra (o el costo sube), te avisa al celular.

⏰ CloudWatch Alarm

¿Qué es? Un vigilante que monitorea métricas (como el costo de tu cuenta) y dispara una acción cuando se cruza un límite.
¿Para qué lo usa Ben? Revisa diariamente cuánto llevas gastado en el mes. Si supera $5 USD, le dice a SNS que te mande un email de alerta.
Analogía: Es como poner una alarma en tu tarjeta de crédito que te avisa si gastas más de cierto monto.

💰 Costos Estimados

EscenarioConversaciones/mesCosto estimado
MVP (1 inmueble)100~$2-3/mes
1,000 inmuebles10,000~$20-30/mes
100,000 inmuebles1,000,000~$300-500/mes
🧠 ¿Por qué es tan barato? Porque todo es "serverless" (sin servidor). No hay una máquina prendida 24/7 costando plata. Cada componente solo cobra cuando alguien lo usa. Si nadie pregunta un domingo a las 3am, el costo ese rato es literalmente $0.
🔔 Alarma configurada: Si tu cuenta supera $5 USD en el mes, te llega un email a ivan.gazabon@icloud.com. La alarma revisa el costo cada 24 horas. Con el uso actual del MVP (pruebas esporádicas), el costo no debería pasar de $0.10/mes.

🗄️ Estructura de Datos

S3 (datos completos del inmueble):

amzn-s3-ben-ai-test1/
└── apartments/
    └── antara-602/
        ├── description-602.json (todos los detalles)
        ├── description-602.txt
        └── images/
            ├── bathroom-main.jpg
            ├── dinning-room.jpg
            └── kitchen.jpg

DynamoDB — ben-properties (catálogo para búsqueda):

CampoTipoDescripción
property_id (PK)StringIdentificador único del inmueble
city, neighborhood, price, bedrooms...VariosAtributos de filtro/búsqueda
s3_json_keyStringRuta al JSON completo en S3

DynamoDB — ben-conversations (historial + scoring):

CampoTipoDescripción
conversation_id (PK)StringID único de la conversación
property_id (SK)StringInmueble consultado
messagesListHistorial completo de mensajes
questions_countNumberCantidad de preguntas realizadas
lead_scoreNumberPuntuación de intención de compra

🔑 Decisiones de Diseño

✅ Completado (26 de mayo 2026)

#PasoRecurso creadoEstado
1Tabla DynamoDB catálogoben-properties✅ Creada
2Tabla DynamoDB conversacionesben-conversations✅ Creada
3Rol IAM para Lambdaben-lambda-role (permisos: S3, DynamoDB, Bedrock, Logs)✅ Creado
4Función Lambdaben-chat (Python 3.12, 256MB, 30s timeout)✅ Desplegada
5Prueba Lambda → S3Lee JSON del inmueble correctamente✅ Funciona
6Prueba Lambda → DynamoDBConecta correctamente✅ Funciona
7Habilitar modelo BedrockClaude Haiku 4.5 + IAM Marketplace policy✅ Resuelto
8Probar Lambda end-to-endBen responde correctamente (2.3s, 99MB RAM)✅ Funciona
9Crear API Gatewayben-api (HTTP API, POST /chat) — Probado con curl desde internet✅ Funciona
10Crear front webHTML/JS chat tipo WhatsApp subido a S3✅ Funciona
11Desplegar front en S3 (website hosting)Bucket configurado como sitio web estático con acceso público✅ En vivo

✅ Problemas Resueltos

ProblemaCausaSolución
Bedrock: "Model marked as Legacy"Claude 3.5 Haiku fue deprecado por AnthropicMigrado a Claude Haiku 4.5
IAM: "Access denied Marketplace"Bedrock ahora requiere permisos de Marketplace para activar modelos de terceros la primera vezPolicy bedrock-marketplace-access creada
Bedrock: "Retry with inference profile"Modelos nuevos requieren prefijo regionalPrefijo us. agregado al model ID
AWS CLI no instalableRestricciones de admin en máquina corporativaSe usa CloudShell desde la consola web

📋 Próximos Pasos

#PasoDescripciónEstado
12Mostrar fotos en el chatLambda genera URLs de imagen en formato markdown, front las renderiza como <img>. Policy S3 actualizada para /apartments/*.✅ Funciona
13Migrar inmueble a DynamoDBantara-602 registrado en ben-properties. Lambda busca dinámicamente por property_id.✅ Funciona
14Agregar CloudFront (HTTPS)Poner un CDN delante del S3 para que la URL sea HTTPS y cargue más rápido⏳ Pendiente
15Dominio personalizadoConectar un dominio tipo ben.ai o similar en vez de la URL de S3⏳ Pendiente
16Integración WhatsAppConectar Ben a WhatsApp Business para que funcione vía mensajes⏳ Pendiente

Detalle del paso 12 (fotos):

Problema actual: Ben sabe que existen fotos (están en el JSON) pero solo dice el nombre del archivo ("kitchen.jpg"). No muestra la imagen real.

Solución propuesta: Modificar el prompt de la Lambda para que cuando Ben mencione una foto, incluya la URL completa de S3. Luego el front detecta esas URLs y las muestra como imágenes reales en el chat.

🔧 Datos Técnicos de Referencia

ParámetroValor
Región AWSus-east-2 (Ohio)
Account ID948512815521
Bucket S3amzn-s3-ben-ai-test1
Lambdaben-chat (Python 3.12, 256MB, 30s)
Modelo Bedrockus.anthropic.claude-haiku-4-5-20251001-v1:0 (Claude Haiku 4.5)
Rol IAMarn:aws:iam::948512815521:role/ben-lambda-role
DynamoDB Tablesben-properties, ben-conversations
API Gatewayben-api (ID: b999yf310e)
Endpoint públicohttps://b999yf310e.execute-api.us-east-2.amazonaws.com/chat
MétodoPOST /chat con body: {"message": "...", "property_id": "..."}
Alarma de billingben-cost-alarm — Alerta si supera $5 USD/mes → email a ivan.gazabon@icloud.com
SNS Topicarn:aws:sns:us-east-1:948512815521:ben-billing-alert
Front web (URL pública)http://amzn-s3-ben-ai-test1.s3-website-us-east-1.amazonaws.com/front/index.html
S3 Website HostingHabilitado en amzn-s3-ben-ai-test1 (carpeta /front es pública)

🧪 Cómo probar Ben ahora mismo

Opción 1 — Abrir el chat web:
http://amzn-s3-ben-ai-test1.s3-website-us-east-1.amazonaws.com/front/index.html

Simplemente abre el link, escribe una pregunta y Ben responde. Funciona desde cualquier dispositivo con internet.
Opción 2 — Desde terminal (curl):
curl -X POST https://b999yf310e.execute-api.us-east-2.amazonaws.com/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "Hola, cuanto cuesta este apartamento?", "property_id": "apt_001"}'

Respuesta esperada: Ben te dice el precio ($1.000.000.000 COP), la administración ($1.500.000), y ofrece más detalles.

🎓 ¿Qué hicimos hoy? (resumen para dummies)

Sesión del 26 de mayo 2026:

1. Verificamos que todo seguía funcionando — Corrimos un chequeo de salud de todos los componentes (S3, DynamoDB, Lambda, IAM). Todo OK.

2. Creamos el API Gateway — Es la "puerta de entrada" que permite que cualquier persona en internet le hable a Ben. Sin esto, la Lambda solo era accesible internamente. Ahora tiene una URL pública.

3. Configuramos CORS — Un permiso especial que le dice al navegador "sí, está bien que esta página web hable con mi API aunque estén en dominios diferentes". Sin esto, el navegador bloquea la comunicación por seguridad.

4. Creamos el front web — Una página HTML con un chat tipo WhatsApp. Cuando escribes algo, envía tu pregunta al API Gateway, que la pasa a Lambda, que consulta a Claude, y te devuelve la respuesta. Todo en ~2 segundos.

5. Subimos el front a S3 y lo hicimos público — Configuramos el bucket de S3 como "sitio web estático" para que cualquiera pueda abrir la URL y usar el chat sin necesidad de instalar nada.

6. Configuramos alarma de costos — Si la cuenta supera $5 USD en el mes, te llega un email. Con el uso actual (pruebas), el costo es menor a $0.10/mes.

Resultado: Ben está en vivo y accesible desde cualquier navegador. Cualquier persona con el link puede preguntarle sobre el apartamento Antara 602 y recibe respuestas inmediatas de IA.

Actualizado el 26 de mayo de 2026 | Proyecto Ben MVP — Arquitectura Serverless en AWS