Saltar al contenido

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

  1. El usuario realiza una pregunta en lenguaje natural
  2. El frontend envía la consulta al backend con streaming
  3. 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
  4. Los fragmentos recuperados se inyectan como contexto en el prompt
  5. 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