Ahora que hemos cubierto los fundamentos de RAG, la fragmentación de texto y los embeddings, repasemos el pipeline completo de RAG paso a paso. Este ejemplo detallado te mostrará exactamente cómo se conectan todas las piezas en una implementación real.
Paso 1: Fragmenta tu texto fuente
Primero, tomamos nuestro documento fuente y lo dividimos en fragmentos manejables. Para este ejemplo, usaremos dos secciones de texto simples:
- Sección 1: Investigación Médica - "Este año vimos avances significativos en nuestra comprensión de XDR-47, un 'bug' que no habíamos visto antes."
- Sección 2: Ingeniería de Software - "Esta división dedicó un esfuerzo significativo a estudiar varios vectores de infección en nuestros sistemas distribuidos"
Paso 2: Genera embeddings
A continuación, convertimos cada fragmento de texto en embeddings numéricos. Para aclarar este concepto, imaginemos que tenemos un modelo de embeddings perfecto que siempre devuelve exactamente dos números, y sabemos qué representa cada número:

En nuestro modelo imaginario:
- Primer número: Cuánto habla el texto sobre el campo médico
- Segundo número: Cuánto habla el texto sobre ingeniería de software
Así que nuestra sección de investigación médica obtiene un embedding de [0.97, 0.34] - muy médico, algo relacionado con software debido a la palabra "bug". La sección de ingeniería de software obtiene [0.30, 0.97] - muy enfocada en software, pero "vectores de infección" tiene connotaciones médicas.
Normalización
Antes de almacenar estos embeddings, pasan por un proceso de normalización que escala cada vector para que tenga una magnitud de 1.0. Esto normalmente lo maneja automáticamente tu API de embeddings, pero es importante entender que sucede.

Después de la normalización, nuestros embeddings se convierten en [0.944, 0.331] y [0.295, 0.955]. Podemos visualizarlos en un círculo unitario donde cada punto se encuentra exactamente en el borde del círculo.

Paso 3: Almacena en una base de datos vectorial
Los embeddings normalizados se almacenan en una base de datos vectorial - una base de datos especializada optimizada para almacenar, comparar y buscar a través de largas listas de números como nuestros embeddings.

En este punto, hacemos una pausa. Todo el trabajo realizado hasta ahora ha sido preprocesamiento que ocurre con anticipación. Ahora esperamos a que un usuario envíe una consulta.
Paso 4: Procesa la consulta del usuario
Cuando un usuario hace una pregunta como "Tengo curiosidad sobre la empresa. En particular, ¿qué hizo el departamento de ingeniería de software este año?", ejecutamos su consulta a través del mismo modelo de embeddings.

Esta consulta se convierte en embedding como [0.1, 0.89] - puntuación médica baja, puntuación alta en ingeniería de software. Después de la normalización, se convierte en [0.112, 0.993].
Paso 5: Encuentra embeddings similares
Ahora le preguntamos a la base de datos vectorial: "Encuentra el embedding almacenado que esté más cerca de este embedding de consulta del usuario." La base de datos devuelve la sección de ingeniería de software porque es la más similar.

Cómo funciona la similitud: Similitud de coseno
La base de datos vectorial usa la similitud de coseno para determinar qué embeddings son más similares. Esto mide el coseno del ángulo entre dos vectores.

Puntos clave sobre la similitud de coseno:
- Los resultados van de -1 a 1
- Valores cercanos a 1 significan muy similar
- Valores cercanos a 0 significan perpendicular (no relacionado)
- Valores cercanos a -1 significan completamente opuesto
El cálculo usa la fórmula del producto punto: cos(a) = (A · B) / (||A|| · ||B||)

En nuestro ejemplo, la consulta del usuario tiene una similitud de coseno de 0.983 con el fragmento de ingeniería de software y solo 0.398 con el fragmento de investigación médica. El fragmento de ingeniería de software es claramente la mejor coincidencia.
Distancia de coseno
A menudo verás "distancia de coseno" en la documentación de bases de datos vectoriales. Esto es simplemente 1 - similitud de coseno, lo que nos da un número más fácil de interpretar donde:
- Valores cercanos a 0 significan alta similitud
- Valores más grandes significan menos similitud
Paso 6: Construye el prompt final
Finalmente, tomamos la pregunta del usuario y el fragmento de texto más relevante que encontramos, y los combinamos en un prompt para Claude:

El prompt incluye tanto la pregunta del usuario como el contexto relevante de nuestro documento, permitiendo que Claude proporcione una respuesta informada basada en la información específica de nuestra base de conocimiento.
El flujo completo
Ese es el pipeline completo de RAG de principio a fin:
- Fragmenta los documentos fuente
- Genera embeddings para cada fragmento
- Almacena los embeddings en una base de datos vectorial
- Cuando un usuario hace una pregunta, convierte su consulta en embedding
- Encuentra los embeddings almacenados más similares usando similitud de coseno
- Agrega los fragmentos relevantes a un prompt junto con la pregunta del usuario
- Envía el prompt mejorado a Claude para obtener una respuesta
Entender este proceso y las matemáticas detrás de él te ayudará a trabajar eficazmente con bases de datos vectoriales y a depurar problemas cuando tu sistema RAG no esté devolviendo los resultados que esperas.