RAG (Retrieval-Augmented Generation) resuelve el problema más crítico de los LLMs: el conocimiento desactualizado y las alucinaciones sobre datos privados. En lugar de depender solo del entrenamiento del modelo, RAG recupera información relevante en tiempo real y la inyecta en el contexto. El stack recomendado: LangChain como orquestador, Supabase con la extensión pgvector para almacenar y buscar embeddings, y Claude como modelo de generación. Este stack es 100% deployable en Vercel más Supabase. Paso 1 - Preparar Supabase: Activar la extensión pgvector con CREATE extensión vector. Crear tabla: CREATE TABLE documents (id UUID PRIMARY KEY, content TEXT, embedding VECTOR(1536), metadata JSONB). Crear índice HNSW para busqueda rápida. Paso 2 - Generar embeddings: Usar text-embedding-3-small de OpenAI (más económico) o multilingual-e5-large (open source, Hugging Face) para mejor soporte en español. Procesar documentos en chunks de 500-800 tokens con 50 tokens de overlap para mantener contexto entre fragmentos. Paso 3 - Busqueda semántica: Query con cosine similarity sobre la columna embedding. Los 5 chunks más similares se concatenan y se inyectan en el prompt como contexto para el modelo. Paso 4 - generación con Claude: System prompt clave: 'Responde SOLO usando la información del contexto proporcionado. Si la respuesta no esta en el contexto, dilo explicitamente.' Esto elimina las alucinaciones casi por completo. Gotcha crítico: El tamano del chunk importa mucho. Chunks muy pequenos pierden contexto; muy grandes diluyen la relevancia. Experimentar entre 300-800 tokens según tu tipo de documento. Para documentos técnicos, chunks más grandes. Para FAQs, chunks pequenos.