Caso de estudio · Sistema de IA
Cómo construí el RAG de este portfolio
Este portfolio no habla de un sistema de IA: es uno. Un chatbot RAG sobre mi experiencia, con stack gratuito y autoalojado.
Gemini 2.5 Flash
LLM (+ fallback)
pgvector
vector store autoalojado
768-dim
embeddings
Hono
API
La mejor forma de demostrar que sé construir sistemas de IA aplicada es que el portfolio sea uno. El chatbot que ves abajo a la derecha es un RAG real sobre mi experiencia: pregúntale lo que quieras.
Lo construí con un objetivo extra: stack gratuito y autoalojado, sin depender de APIs de pago ni de servicios gestionados de vectores.
Cómo funciona#
El corpus es un conjunto de notas en markdown sobre mí (trayectoria, proyectos, lo que me mueve). Un pipeline de ingesta las trocea, las embebe con gemini-embedding-001 a 768 dimensiones y las guarda en Postgres con pgvector.
En cada pregunta, embebo la consulta, recupero los fragmentos más cercanos por similitud coseno (índice HNSW) y se los paso a Gemini como contexto para que responda con base en hechos, no en alucinaciones.
Ingesta: markdown → chunks → embeddings (768d) → tabla chunks en Postgres.
Recuperación: similitud coseno con índice HNSW (función match_chunks).
Generación: Gemini responde anclado al contexto recuperado, en mi voz.
Decisiones de stack#
Elegí Gemini con una cadena de fallback (2.5 Flash → 2.5 Flash-Lite → 2.0 Flash-Lite) porque cada modelo tiene su propia cuota de free-tier: si uno devuelve 429/503, el siguiente toma el relevo con backoff. Resiliencia sin coste.
Para los vectores, en lugar de un servicio gestionado, levanto Postgres + pgvector en Docker. Es portable, gratis y suficiente para este tamaño de corpus.
La API es Hono (ligera, rápida) sirviendo respuestas por streaming SSE.
Qué es y qué no es#
Soy honesto sobre el alcance: esto es un RAG bien hecho, no una plataforma de LLMOps de empresa. No tiene observabilidad con Langfuse, ni decenas de evals automatizadas, ni modo voz (lo dejé aparcado a propósito).
Lo que demuestra es lo que importa para un rol de IA aplicada: entiendo embeddings, búsqueda vectorial, recuperación y prompting con fundamento, y lo llevo a producción de punta a punta.
Prefiero un sistema pequeño que funcione de verdad y poder explicar cada decisión, a una lista de buzzwords.
Stack#
Preguntas frecuentes#
¿Qué modelo usa el chatbot?
Gemini 2.5 Flash, con una cadena de fallback a 2.5 Flash-Lite y 2.0 Flash-Lite para sobrevivir a los límites del free-tier.
¿Dónde se guardan los vectores?
En Postgres con la extensión pgvector, autoalojado en Docker. Índice HNSW con similitud coseno.
¿Por qué un stack gratuito?
Para demostrar que se puede construir un RAG sólido sin APIs de pago ni servicios gestionados, y para mantenerlo sostenible.