RLHF explicado: del paper al chat de mi portfolio
Cómo implementé un chatbot con Reinforcement Learning from Human Feedback usando Gemini, Pinecone y Next.js.
De la teoría a la práctica
Cuando empecé mi tesis doctoral, nunca imaginé que acabaría implementando un sistema de Retrieval-Augmented Generation (RAG) en mi propio portfolio. Pero aquí estamos.
[!abstract] El origen Este chatbot nació de una necesidad real: la gente que visita mi portfolio suele tener preguntas muy específicas sobre mi experiencia, papers y proyectos. Un chatbot con RAG permite responder con precisión basándose en mis datos reales.
La arquitectura
El sistema funciona así:
- Indexación: Los datos de Sanity (proyectos, papers, experiencia) se embeddean con
gemini-embedding-001y se guardan en Pinecone - Query: Cuando un usuario hace una pregunta, se embeddea y se busca por similitud coseno en Pinecone
- Generación: El contexto recuperado se inyecta en el prompt de Gemini para generar la respuesta
[!tip] Por qué RAG y no fine-tuning? Fine-tuning es caro, lento, y cada vez que cambian tus datos tienes que re-entrenar. Con RAG, actualizas el índice y listo.
Lo que aprendí
Lo que funciona bien
- Pinecone como vector store: Rápido, escalable, fácil de integrar
- Gemini API: Buena calidad de respuesta y precio razonable
- Streaming: Usar
streamTextde Vercel AI SDK da una experiencia mucho más fluida
Lo que mejoraría
- Rate limiting: Ahora mismo uso un rate limiter básico en memoria. Para producción usaría Redis o Vercel KV
- Feedback loop: Los thumbs up/down ya se guardan en Postgres, pero aún no retroalimentan el sistema
- Guardrails: Añadí un sistema básico de seguridad con
checkSafety(), pero se puede refinar
Código relevante
Si quieres ver la implementación, el código está en:
src/app/api/chat/route.ts → API endpoint con RAG
src/app/api/chat/prompt.ts → System prompt del asistente
src/hooks/use-chat-context.tsx → Contexto del chat en el cliente
[!warning] Token de API Recuerda que necesitas variables de entorno:
GOOGLE_GENERATIVE_AI_API_KEY,PINECONE_API_KEY,PINECONE_INDEX, yPOSTGRES_URL.
Conclusión
Integrar un chatbot con RAG en un portfolio no es tan complicado como parece. La combinación de Next.js + Vercel AI SDK + Pinecone permite tener algo funcional en un par de días.
[!danger] Ojo con los costes Pinecone tiene un tier gratuito limitado. Si tu índice crece mucho, vigila los costes.
Si quieres ver la implementación completa del blog, mira cómo configuré el blog con Markdown.