Asistente de IA integrado en mi portafolio
Integré un asistente de IA en mi portfolio para responder, en tiempo real, preguntas sobre mis proyectos, contacto, tecnologías, experiencia y educaciòn.
Problema
Los portfolios tradicionales son estáticos. El usuario tiene que navegar manualmente, leer documentación y entender el contexto técnico por su cuenta.
Esto genera fricción, especialmente para recruiters o developers que quieren entender rápidamente qué hiciste, cómo pensás y qué tan profundo es tu conocimiento.
Solución
Un asistente de IA integrado directamente en el portfolio que permite explorar mi trabajo de forma conversacional. Responde preguntas sobre proyectos, experiencia, stack, y más — en tiempo real y con contexto específico de mi propio contenido.
Cómo funciona
- El usuario realiza una pregunta en lenguaje natural
- El frontend envía la consulta al backend con streaming
- El backend genera un embedding de la pregunta y busca los fragmentos más relevantes en la base de datos vectorial por similitud de coseno
- Los fragmentos recuperados se inyectan como contexto en el prompt
- Groq genera la respuesta en streaming y la devuelve al frontend en tiempo real
Stack tecnológico
- Frontend: Next.js + Tailwind CSS
- Backend: Python + FastAPI
- CMS: Payload CMS
- Embeddings: HuggingFace Inference API (all-MiniLM-L6-v2)
- LLM: Groq — Llama 3.3 70B
- Base de datos vectorial: Neon DB + pgvector
- Deploy: Docker + Azure App Service
Decisiones técnicas
- RAG en lugar de contexto estático: en lugar de hardcodear información en el prompt, el asistente busca dinámicamente los fragmentos más relevantes según la pregunta. Más preciso y escalable.
- Embeddings locales → API de HuggingFace: inicialmente el modelo corría en memoria, lo que superaba los límites del plan free. Migrar a la API eliminó el problema sin sacrificar calidad.
- Groq como proveedor LLM: baja latencia y streaming real, ideal para una experiencia conversacional fluida.
- FastAPI async: todo el backend es no bloqueante, lo que permite manejar el streaming sin desperdiciar recursos.
- Azure App Service con Docker: sin cold start, sin límites de memoria artificiales, imagen reproducible.
Desafíos y aprendizajes
- Configurar streaming real sin buffering a través del proxy de Azure y Render
- Manejar embeddings 2D vs 1D devueltos por la API de HuggingFace
- Diseñar el system prompt para que el asistente responda solo sobre mi perfil y en el idioma del usuario
- Gestionar reconexiones a la base de datos después del idle de la instancia