RAG con Python y LangChain: construye un chatbot con tus propios documentos
8 min readPrerrequisitos: Python 3.9+, conocimientos básicos de Python, cuenta en OpenAI (con créditos disponibles). No necesitas experiencia previa con LLMs ni LangChain.
Imagina esto: tienes un LLM integrado en tu app, un usuario pregunta algo sobre tu documentación interna, y el modelo responde con total seguridad... pero inventando. Eso es una alucinación, y en producción es inaceptable. RAG (Retrieval Augmented Generation) resuelve esto: en lugar de esperar que el modelo recuerde lo que nunca aprendió, le entregamos los documentos relevantes en cada llamada. El resultado es un chatbot que cita fuentes reales. En este tutorial construimos el pipeline completo desde cero: carga de PDFs, embeddings, vectorstore FAISS y una cadena de Q&A con código ejecutable que puedes adaptar hoy mismo.
Regla práctica: si el problema es 'el modelo no sabe X', usa RAG. Si es 'el modelo no responde con el tono que quiero', considera fine-tuning. RAG es más rápido, más barato y no requiere datos etiquetados.
Deberías ver: LangChain 0.3.x instalado. Si ves un error de importación, asegúrate de tener activado el entorno virtual (.venv).
Deberías ver al ejecutar python3 ingest.py: 'Cargadas X páginas', 'Generados Y chunks', 'Vectorstore guardado'. Si ves un error de autenticación, verifica tu OPENAI_API_KEY en el .env.
El chunk_overlap es el parámetro que más impacta la calidad de respuestas. Con documentos de frases largas o tablas, sube el overlap a 300-400. Con FAQs o listas cortas, puedes bajarlo a 100. No hay valor universal — experimenta con tus datos.
temperature=0 es deliberado. Para Q&A factual sobre documentos necesitas respuestas deterministas y precisas. Si subes la temperatura, el modelo 'creará' variaciones de la respuesta que pueden no estar en tus documentos.
El costo de embeddings con text-embedding-3-small es mínimo ($0.02/M tokens). El costo que escala es la generación con el LLM. Para proyectos con preguntas repetitivas, implementa caché de respuestas — incluso un diccionario en memoria reduce los costos significativamente.
Lo que aprendiste: • RAG amplía el conocimiento del LLM sin reentrenarlo • chunk_overlap controla la continuidad entre fragmentos • El prompt template es la guardia que evita alucinaciones • return_source_documents hace el sistema auditable
Siguiente paso: exponer la cadena como API REST con FastAPI, o conectarla a un frontend con el Vercel AI SDK. Ambas integraciones son directas una vez que el pipeline es estable en local.
Tutoriales cada dos semanas
Sin spam. Solo artículos técnicos cuando salen.
