MÓDULO 10 · RAG · 25 MIN

Las dos fases del pipeline RAG

RAG no es un pipeline: son dos, y corren a ritmos completamente distintos. El de indexación se ejecuta una vez por documento; el de consulta, una vez por pregunta. Casi todo lo que decides —cómo trocear, qué modelo de embedding, qué metadata guardar— se decide en el primero y se paga en el segundo. Buena parte de los problemas de un RAG que «responde mal» son en realidad decisiones de indexación que ya no se pueden cambiar sin reindexar.
01 — Los dos relojes
Qué corre una vez y qué corre siempre

Indexación

Una vez por documento
  1. Cargar — leer el fichero en su formato nativo.
  2. Trocear — partirlo en chunks.
  3. Embeber — convertir cada chunk en un vector.
  4. Almacenar — guardarlo en la base vectorial.
coste: proporcional al corpus · se repite solo al reindexar

Consulta

Una vez por pregunta
  1. Embeber la pregunta — con el mismo modelo.
  2. Buscar — los K chunks más cercanos.
  3. Generar — pregunta + chunks al LLM.
coste: proporcional al tráfico · es tu factura mensual

El paso 1 de la consulta esconde la dependencia que más se olvida: la pregunta se convierte en vector con el mismo modelo de embedding que se usó al indexar. Dos modelos distintos producen espacios distintos, y la distancia entre un vector de uno y otro no significa nada. No da error: da resultados aleatorios con aspecto de resultados.

// si cambias el modelo de embedding, todo lo indexado deja de servir
02 — Lo que se congela
Tres decisiones que solo se pueden cambiar reindexando
DecisiónCoste de cambiarla despuésSe nota como
Tamaño y estrategia de chunkReindexar el corpus enteroRespuestas con contexto cortado o irrelevante
Modelo de embeddingReindexar + volver a pagar todos los embeddingsNada, hasta que las búsquedas dejan de tener sentido
Qué metadata se guardaReindexar (o un pase de actualización)No poder filtrar ni citar la fuente

Frente a eso, lo que se puede cambiar en caliente es sorprendentemente poco y muy barato: cuántos chunks recuperas, con qué estrategia buscas, qué prompt envuelve el contexto y qué modelo genera. Nada de eso toca la base vectorial.

Esa asimetría da el orden de trabajo: antes de tocar el prompt o subir de modelo, comprueba si los chunks que llegaron contenían siquiera la respuesta. Si no estaba en el contexto, el LLM no la va a inventar bien —y si la inventa, peor.

03 — La decisión previa
Cuándo no montar nada de esto

RAG resuelve un problema concreto: que el conocimiento no cabe en el prompt, o cambia, o hay que citarlo. Cuando ninguna de las tres se cumple, montar el pipeline añade dos servicios, una base de datos y una factura de embeddings para hacer lo que hacía un texto pegado.

Monta RAG cuando…No lo montes cuando…
El corpus no cabe en la ventana de contextoTodo cabe cómodamente en el prompt
Los documentos cambian y no quieres reentrenarEl conocimiento es estático y pequeño
Necesitas citar la fuente de cada respuestaDa igual de dónde venga la información
Quieres reducir alucinaciones anclando a documentosNecesitas razonamiento puro, sin fuentes

La guía expresa este umbral en páginas —«menos de 10» en una unidad, «5-10» en otra—, y esa es la parte que no conviene copiar: una página de tabla y una de prosa no ocupan lo mismo, y el límite real es el de la ventana del modelo que uses, que cambia cada pocos meses. El criterio que envejece bien es el de la segunda unidad: ¿cabe en el prompt? Eso se mide contando tokens, no páginas.

Auditoría El material de este módulo mezcla dos generaciones de LangChain sin decirlo: importa los text splitters desde langchain.text_splitter en dos unidades y desde langchain_text_splitters en otra; construye la cadena con RetrievalQA en la unidad 1 y con LCEL a mano en la unidad 2; y usa gpt-3.5-turbo una sola vez, justo en la unidad más moderna. Su propia tabla de troubleshooting reconoce que «LangChain se dividió en paquetes» y acto seguido vuelve a la ruta antigua. ¿Cuál de las dos rutas de import funciona sin avisos de deprecación en tu instalación, y sigue RetrievalQA recomendada o es una cadena legacy? El Módulo 4 de este mismo curso tiene una lección entera sobre APIs legacy de LangChain: merece la pena resolverlo antes de escribir código propio.
Para hacer
Dibujar tus dos pipelines antes de escribir nada

Coge el caso que quieras montar y escribe dos listas en una hoja: los pasos que correrán una vez y los que correrán en cada pregunta. Al lado de cada paso de la primera lista, anota qué habría que rehacer si cambias de idea.

Después haz una cuenta rápida: cuántos tokens tiene tu corpus y cuánto costaría embeberlo entero dos veces. Ese número es el precio de equivocarte de modelo de embedding, y es el que decide cuánto tiempo merece la pena dedicar a elegirlo antes de indexar.