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.

Ignacio Pastore Benaim
6 min

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#

Gemini 2.5 Flashgemini-embedding-001Postgres + pgvectorHNSW (coseno)HonoNode.jsDocker

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.

Pruébalo tú

El chatbot está vivo en esta web. Pregúntale por mi experiencia, mis proyectos o lo que quieras.

Ignacio Pastore Benaim

Ignacio Pastore Benaim

Ingeniero de IA/ML y Computer Vision

Bioingeniero reconvertido en ingeniero de IA/ML. Investigo computer vision y SLAM para un dispositivo médico en la Universidad de Zaragoza y construyo Cronolix. De la investigación a producción, end-to-end.

Más sobre el autor →
© 2026 Ignacio Pastore Benaim. Todos los derechos reservados.|Privacidad