La semántica es deseo, el índice es hecho
Importada@odus · 1 mar, 21:59
Resumen de la conversación
PageIndex, al abandonar la segmentación y regresar al índice invertido, resuelve los problemas de fragmentación semántica y falta de precisión de la RAG vectorial, pero sacrifica la capacidad de coincidencia semántica difusa y aumenta significativamente el consumo computacional y la latencia. Por lo tanto, la mejor práctica actual es la recuperación híbrida de dos vías, combinando búsqueda vectorial y por palabras clave para equilibrar precisión y comprensión semántica.
Conversación
Preséntame PageIndex, ¿por qué hacer RAG sin vectores?
Esta es una pregunta muy vanguardista y que da en el clavo. El auge de PageIndex y No-Vector RAG (RAG sin vectores) es, en realidad, una reflexión y una corrección de las limitaciones del actual Vector RAG (Generación Aumentada por Recuperación basada en bases de datos vectoriales), que es la corriente principal.
En términos simples, PageIndex es una tecnología basada en un índice invertido (Inverted Index), cuyo objetivo es encontrar con precisión la "Página" o el contexto completo relevante mediante la coincidencia de palabras clave, en lugar de depender de la búsqueda difusa de fragmentos semánticos vectoriales.
A continuación, te desglosaré en detalle el concepto de PageIndex y por qué estamos empezando a cambiar o combinar con el "RAG sin vectores".
1. ¿Qué es PageIndex?
En el Vector RAG tradicional, dividimos los documentos en trozos pequeños (Chunks), los convertimos en vectores y luego buscamos vectores similares.
En el modo PageIndex, la lógica vuelve a la esencia de los motores de búsqueda:
- Fase de indexación: El sistema ya no fragmenta ni vectoriza los documentos, sino que crea un índice invertido global (similar al índice al final de un libro). Registra en qué páginas o documentos aparece cada palabra clave (Keyword).
- Fase de recuperación: Cuando el usuario hace una pregunta, el sistema extrae las palabras clave de la pregunta y, a través del índice invertido, localiza directamente las páginas completas que contienen esas palabras clave.
- Fase de generación: El sistema proporciona estas páginas completas (no fragmentos troceados) como contexto al LLM (Gran Modelo de Lenguaje), permitiendo que el LLM las lea, comprenda y extraiga la respuesta por sí mismo.
Diferencia clave: Vector RAG alimenta al LLM con "párrafos troceados"; PageIndex alimenta al LLM con "páginas completas que contienen las pistas".
2. ¿Por qué adoptar el "RAG sin vectores" (No-Vector RAG)?
Aunque Vector RAG es popular, en la práctica ha revelado tres puntos débiles principales, y el RAG sin vectores busca precisamente resolverlos:
A. Fragmentación semántica causada por el "troceado" (El problema del Chunking)
- Punto débil de Vector RAG: Para almacenar en la base de datos vectorial, es necesario dividir los documentos largos en bloques de 500-1000 caracteres. Esto provoca una pérdida de contexto. Por ejemplo, la "cláusula de incumplimiento" de un contrato puede estar en la página 5, pero el "monto de la indemnización" en la página 10. La recuperación vectorial solo puede encontrar el bloque de la página 5, impidiendo que el LLM responda a una pregunta lógica completa.
- Ventaja de No-Vector: PageIndex recupera Páginas o Documentos. El LLM tiene una ventana de contexto más larga (esto se vuelve factible a medida que los modelos admiten 128k/200k/1M tokens) y puede comprender las relaciones lógicas entre párrafos.
B. Coincidencia difusa vs. Coincidencia exacta (Imprecisión vs. Precisión)
- Punto débil de Vector RAG: La búsqueda vectorial se basa en la "similitud semántica", una búsqueda difusa.
- Ejemplo: Si buscas "código de error 1024", el vector podría recuperar contenido sobre "código de error 1025" porque están cerca en el espacio matemático, pero para un programador esto es completamente incorrecto.
- Fallos con nombres propios: Al buscar números de SKU específicos, nombres o términos de muy baja frecuencia, los vectores suelen fallar.
- Ventaja de No-Vector: El índice invertido es una coincidencia exacta. Buscas "1024" y solo te da las páginas que contienen "1024". Esto es crucial para áreas que requieren rigor, como la legal, financiera o de código.
C. Falta de explicabilidad y coste de mantenimiento (Caja Negra y Complejidad)
- Punto débil de Vector RAG: El vector es una caja negra. No sabes por qué el sistema considera que A y B son similares. Además, mantener una base de datos vectorial de alto rendimiento (Vector DB) es costoso, y actualizar el índice (altas, bajas, modificaciones) es más complejo que en una base de datos tradicional.
- Ventaja de No-Vector: La recuperación basada en palabras clave es completamente explicable ("porque esta página contiene estos tres términos de búsqueda"). Además, la tecnología de índices invertidos (como Lucene, ElasticSearch) ya es muy madura, económica y eficiente.
3. PageIndex vs. Vector RAG: Comparativa clave
Para entenderlo de forma más intuitiva, podemos comparar estas dos arquitecturas:
| Característica | Vector RAG (Tradicional dominante) | No-Vector RAG / PageIndex |
|---|---|---|
| Unidad de recuperación | Chunks (Fragmentos de texto) | Páginas / Documentos completos |
| Lógica de coincidencia | Similitud semántica (Coseno) | Coincidencia exacta de palabras clave (Exact Match / BM25) |
| Integridad del contexto | Baja (fácil de sacar de contexto) | Alta (conserva la lógica contextual completa) |
| Escenarios adecuados | Preguntas abiertas, comprensión de intenciones, consultas difusas | Consultas de datos exactos, análisis de documentos largos, búsqueda de nombres propios |
| Tecnología dependiente | Modelo de Embedding + DB Vectorial | Índice invertido (ej. ElasticSearch) + Contexto largo del LLM |
| Coste computacional | Indexación lenta, inferencia requiere calcular vectores | Indexación rápida, inferencia consume principalmente Tokens del LLM |
4. ¿Por qué se ha puesto de moda ahora? (Contexto técnico)
Quizás te preguntes: "El índice invertido no es una tecnología de hace décadas? ¿Por qué se habla de ello ahora?"
Esto se debe a que la ventana de contexto (Context Window) de los LLM se ha ampliado.
- Antes (principios de 2023): Los LLM solo podían ver 4k Tokens. Si metías una página entera (quizás 2k Tokens), se llenaba con dos páginas. Por lo tanto, era necesario trocear (Vector RAG).
- Ahora: Claude 3 admite 200k, Gemini 1.5 Pro admite más de 1M de Tokens.
- Resultado: Ya no necesitamos esforzarnos por "trocear" el conocimiento. Solo necesitamos usar PageIndex para localizar rápidamente, digamos, 10 páginas relevantes, y luego tirar esas 10 páginas completas al LLM, diciéndole: "Lee dentro de este rango y encuéntrame la respuesta".
Este modelo de "Recuperar Páginas -> El LLM Lee Todo" suele ser más efectivo que "Incorporar Fragmentos -> Recuperar Fragmentos -> El LLM Adivina".
Resumen
Hacer RAG sin vectores (PageIndex) no es abandonar completamente los vectores, sino resolver los problemas de "falta de precisión" y "pérdida de contexto" de la recuperación vectorial.
- Vector RAG es como un bibliotecario con buena intuición, que sabe más o menos qué libros están relacionados con tu pregunta, pero solo te arranca unas pocas páginas.
- PageIndex es como un sistema de índice riguroso, que te abre todas las páginas que mencionan las palabras clave y te permite a ti (el LLM) leer el capítulo completo.
La tendencia futura es híbrida (Hybrid RAG): Primero usar PageIndex para asegurar la cobertura de palabras clave (precisión), y luego usar Vector para complementar las omisiones semánticas (generalización).
A continuación, ¿te gustaría que te mostrara un ejemplo simple de código Python que compare las diferencias en la implementación real entre la "recuperación basada en vectores" y la "recuperación basada en índices de palabras clave"?
¿Cómo se hacía el RAG vectorial original? ¿Por qué suena tan mal? ¿Cómo se comprimía el texto largo?
Esta es una pregunta muy aguda. El RAG vectorial (Vector RAG) te "suena mal" porque lo hemos estado atacando con la precisión (el punto fuerte de PageIndex) contra su ambigüedad (el punto débil del RAG vectorial).
En realidad, el RAG vectorial es la tecnología más extendida actualmente, y no es "mala", simplemente sacrifica la "precisión" por la "versatilidad".
Para responder a tu pregunta, necesitamos profundizar en la lógica subyacente del RAG vectorial y ver cómo "comprime" y "desmembra" el texto largo.
I. ¿Cómo se hacía el RAG vectorial original? (Procedimiento estándar)
La lógica central del RAG vectorial es convertir texto en coordenadas matemáticas. Su flujo de trabajo suele dividirse en cuatro pasos:
- Fragmentación (Chunking):
-
Primero, se divide un documento largo (por ejemplo, un PDF de 100 páginas) en innumerables párrafos pequeños.
-
Por ejemplo, cada 500 palabras se crea un fragmento.
-
Consecuencia: La lógica coherente original del artículo se interrumpe forzosamente.
- Vectorización (Embedding):
-
Se utiliza un modelo (como text-embedding-3 de OpenAI) para convertir esas 500 palabras en un conjunto de números (normalmente 1536 números de punto flotante).
-
Este conjunto de números representa la "posición semántica" de ese texto.
- Almacenamiento (Indexing):
- Este conjunto de números se almacena en una base de datos vectorial (Vector DB).
- Recuperación (Retrieval):
-
Cuando haces una pregunta, tu pregunta también se convierte en un conjunto de números.
-
La base de datos calcula qué fragmento de texto tiene los números más cercanos a los números de tu pregunta (similitud coseno) y extrae esos fragmentos.
II. ¿Cómo se "comprimía" el texto largo? (Principio fundamental)
Esta es la parte más técnica de tu pregunta. En este proceso, el texto se comprime dos veces, y aquí está la raíz de la pérdida de información.
1. Compresión a nivel físico: Fragmentación (The Chunking)
Imagina que estás viendo una película (texto largo) y el editor corta la cinta en innumerables videos de 30 segundos (Chunks).
- Problema: Si una línea de diálogo cruza el punto de corte, por ejemplo, la primera mitad está en el fragmento 1 y la segunda en el fragmento 2. Cuando solo recuperas el fragmento 1, no tienes ni idea de lo que dice. Esto es la pérdida de contexto.
2. Compresión a nivel semántico: Embedding (The Embedding)
Este es el paso más abstracto. La llamada "vectorización" es en realidad una compresión semántica extremadamente con pérdidas.
-
Principio: El modelo de Embedding lee esas 500 palabras y luego intenta resumir de qué tratan en 1536 dimensiones (números).
-
Analogía: Supón que tienes que presentar a un amigo (texto largo).
-
Presentación completa (texto original): "Se llama Xiao Ming, le gusta el picante, le mordió un perro de pequeño y por eso les tiene miedo, acaba de pasar por una ruptura sentimental..."
-
Vectorización (comprimido): [Altura: 180, Peso: 70kg, Sexo: Masculino, Índice emocional: 0.2]
-
¿Por qué es "malo"?
-
Esta compresión pierde detalles. Si tu pregunta es "¿Qué le pasó a Xiao Ming cuando era pequeño?", simplemente mirando ese conjunto de números (altura, peso), no se puede deducir el detalle de "le mordió un perro".
-
El Embedding en realidad comprime un texto rico en un "tema difuso". Recuerda que "este texto trata sobre información personal", pero probablemente olvida el "número de teléfono" específico.
III. ¿Por qué el RAG vectorial "suena tan mal"?
No es que la tecnología en sí sea mala, sino que tiene defectos inherentes al manejar tareas intensivas en conocimiento, que se manifiestan principalmente en los siguientes tres puntos:
1. La "ambigüedad" provoca "alucinaciones"
La búsqueda vectorial se basa en la "similitud".
-
Ejemplo: Buscas "bebidas sin azúcar".
-
Resultado vectorial: Podría recomendarte "bebidas con azúcar".
-
Razón: En el espacio matemático, las palabras "con azúcar" y "sin azúcar" están muy cerca (porque ambas hablan de azúcar y bebidas). Al vector le cuesta distinguir la palabra clave "sin". El índice invertido (coincidencia de palabras clave) no comete este error, porque debe coincidir con la palabra "sin".
2. La "fragmentación" destruye la lógica
Muchos documentos complejos (como contratos legales, manuales técnicos) requieren una comprensión entre párrafos.
-
Escenario: La definición está en la página 1, y la ejecución específica en la página 10.
-
RAG vectorial: Podría recuperar los pasos de ejecución de la página 10, pero como la página 1 se ha eliminado, el LLM no tiene ni idea de qué significan los términos técnicos mencionados y empieza a inventar.
3. La "caja negra" impide la optimización
-
Cuando un usuario hace una pregunta y la base de datos vectorial recupera el fragmento incorrecto, es difícil para el desarrollador depurar.
-
No sabes por qué esta serie de 1536 números se considera "similar" a esa otra serie. Esto hace que el sistema sea difícil de optimizar.
Resumen: ¿Por qué seguimos usando el RAG vectorial?
Aunque parezca tener muchos inconvenientes, el RAG vectorial tiene una ventaja que PageIndex no puede igualar: entiende el "significado implícito" del lenguaje humano.
-
Usuario: "Mi coche no arranca."
-
Documento: "Una batería descargada puede impedir que el motor arranque."
En este caso:
-
PageIndex (palabras clave) podría fallar, porque el usuario no dijo "batería" ni "impedir el arranque".
-
RAG vectorial tendría éxito, porque sabe que "no arranca" y "impedir el arranque" son semánticamente lo mismo.
Conclusión: El RAG vectorial original te parece "malo" porque es una "generalización difusa". PageIndex es una "localización precisa". La tendencia actual es dejar de comprimir el texto. A medida que los LLM pueden leer un millón de palabras de una sola vez, nos inclinamos cada vez más a darle al LLM el "texto original sin comprimir" y dejar que el modelo más inteligente lea por sí mismo, en lugar de depender de ese "intermediario que solo calcula alturas (el modelo vectorial)".
¿Por qué no hacer RAG después de una segmentación semántica? ¿Por qué no dividir los párrafos en fragmentos más pequeños?
Tu intuición es muy aguda. De hecho, la "segmentación semántica (Semantic Chunking)" y "hacer los fragmentos más pequeños (Small-to-Big)" son precisamente las dos direcciones principales de optimización del RAG actual.
Nadie "no hace" estas cosas, sino que cada una trae nuevos efectos secundarios.
Es como cortar una tarta:
-
Corte de tamaño fijo (tradicional): Se corta cada 5 cm, sin importar nada. Simple y brusco, fácil de estropear el adorno.
-
Corte semántico: Se corta siguiendo el adorno. El resultado es bueno, pero se corta muy lentamente y es difícil definir dónde termina el "adorno".
-
Cortar más fino: Se hace migas. Cada bocado se puede comer, pero no sabes si esa miga pertenecía a la fresa de arriba o a la base de abajo.
A continuación, detallo por qué estas dos soluciones no resuelven el problema por completo:
I. ¿Por qué no se generaliza la "segmentación semántica"?
La segmentación semántica consiste en usar un modelo de PNL para determinar si "este párrafo ha terminado". Si ha terminado, se corta, en lugar de cortar rígidamente por número de palabras.
Aunque suena perfecto, en la práctica tiene tres grandes inconvenientes:
- Lento y caro (Latencia y Coste)
-
El corte tradicional por número de palabras se hace con una línea de código en Python (
text[0:500]) y tarda 0.0001 segundos. -
La segmentación semántica requiere que el modelo "lea" el artículo, calcule la similitud entre oraciones adyacentes, o que el LLM decida si "aquí se cambia de tema". Procesar un archivo grande puede llevar minutos o más. Para sistemas con requisitos de tiempo real, esto es inaceptable.
- Los límites de la "semántica" son extremadamente difusos
-
Ejemplo: Un párrafo habla primero del "precio del producto" y luego de la "política de reembolso".
-
¿Cortas cuando termina lo del "precio"? Pero si cortas, cuando el usuario pregunte "¿A qué precio se reembolsa este producto?", el RAG se queda perplejo, porque el "precio" está en el bloque anterior y el "reembolso" en este, la relación se ha roto.
- Sigue sin resolver la "dependencia global"
-
Incluso si divides perfectamente por párrafos, este párrafo puede seguir dependiendo de una definición de páginas anteriores.
-
Por ejemplo, un párrafo de la página 10 dice: "Según el acuerdo anterior..."
-
La segmentación semántica asegura que este párrafo está completo, pero sigue sin incluir el "acuerdo anterior" de la página 1.
II. ¿Por qué no dividir los párrafos en fragmentos más pequeños?
Podrías pensar: "Si al fragmentar más grande se incluye ruido, entonces lo divido a nivel de oración (Sentence Level). Cuando encuentre una oración, uso esa oración. ¿No sería lo más preciso?"
Aquí entra la paradoja más clásica del campo del RAG: Granularidad de recuperación vs. Granularidad de comprensión.
Dividir demasiado fino (por ejemplo, por oraciones) provoca los siguientes problemas fatales:
1. El desastre de los pronombres (The Pronoun Problem)
-
Texto original: "Elon Musk fundó SpaceX. Esta redujo enormemente el coste de lanzamiento de cohetes."
-
Después de dividir (granularidad fina):
-
Bloque A: "Elon Musk fundó SpaceX."
-
Bloque B: "Esta redujo enormemente el coste de lanzamiento de cohetes."
-
Búsqueda: El usuario pregunta "¿Qué redujo el coste de lanzamiento?"
-
Resultado: El vector encuentra el bloque B.
-
Al LLM: El LLM ve "Esta redujo el coste". El LLM pregunta: "¿Quién es 'Esta'?"
-
Final: Al dividir demasiado fino, se pierde la relación de referencia. Este fragmento se convierte en datos inútiles.
2. Baja densidad semántica (Low Semantic Density)
-
La búsqueda vectorial necesita que un fragmento tenga suficiente "cantidad de información" para localizarlo con precisión.
-
Si se divide en frases cortas: "Sí, estoy de acuerdo." o "Según lo dispuesto a continuación:".
-
Los vectores generados por estas frases cortas son extremadamente genéricos y no tienen características distintivas. Cuando el usuario busca, estas frases cortas aparecerán en gran cantidad como ruido, desplazando la información realmente útil.
3. Los fragmentos no reconstruyen la imagen completa
-
Supongamos que la ventana del LLM puede contener 5 bloques.
-
División en bloques grandes: Puedes ver 5 párrafos completos y tener una idea general del desarrollo de los acontecimientos.
-
División extremadamente fina: Puedes ver 5 oraciones aisladas. Es como darte 5 piezas de un rompecabezas y pedirte que adivines la imagen completa; es extremadamente difícil.
III. La solución avanzada actual: Parent-Child Indexing (Indexación Padre-Hijo)
Para resolver los dos problemas que planteas, la solución más madura actualmente se llama "Small-to-Big" (recuperación de fragmentos pequeños, entrega de fragmentos grandes al LLM).
Es una solución intermedia que combina las ventajas de "dividir fino" y "no fragmentar":
- Fase de división:
-
Child Chunk (fragmento hijo): Se divide el documento en oraciones o párrafos muy pequeños (por ejemplo, 100 palabras). Se utiliza para la vectorización y la recuperación. Como los fragmentos pequeños son semánticamente puros, la precisión de la recuperación es alta.
-
Parent Chunk (fragmento padre): Se registra a qué párrafo padre más grande (por ejemplo, 1000 palabras) o incluso al texto completo pertenece este fragmento hijo.
- Fase de recuperación:
- El sistema encuentra el "fragmento hijo" a través del vector (por ejemplo, la frase "Esta redujo el coste").
- Fase de generación (paso clave):
-
El sistema no entrega este fragmento hijo al LLM.
-
El sistema encuentra a su "padre" (Parent Chunk) a través del ID y entrega al LLM el párrafo completo de 1000 palabras que contiene el contexto.
Resumen:
-
No se usa la segmentación semántica -> porque es demasiado lenta, y se prefiere usar la segmentación con superposición (Sliding Window) para compensar los problemas de límites.
-
No se usa granularidad fina para la generación -> porque sin contexto, no se entiende.
Por lo tanto, la tendencia actual es: usar una granularidad extremadamente fina para "apuntar" (indexar), y una granularidad extremadamente gruesa para "leer" (generar). Y PageIndex es, de hecho, la forma definitiva de esta lógica: apuntar con palabras clave, leer con el texto completo.
¿El RAG sin vectores resuelve estos problemas?
Esta es una excelente pregunta de seguimiento. La respuesta simple es: Resuelve perfectamente los problemas de "fragmentación" y "contexto", pero también introduce un nuevo defecto fatal.
El RAG sin vectores (PageIndex) no es una panacea; es más bien una estética de la fuerza bruta que va "a contracorriente".
Podemos verlo como un intercambio de "potencia de cálculo por inteligencia".
I. ¿Qué problemas resuelve completamente? (Ganancias)
El RAG sin vectores, al abandonar el "preprocesamiento de fragmentación" y aprovechar directamente la capacidad de contexto ultralargo de los LLM, elimina de raíz los males mencionados anteriormente:
1. Cura radicalmente la "fragmentación" (Solucionado: Fragmentación)
- Problema de Vector RAG: Se corta por la mitad, se pierde la lógica entre párrafos.
- Solución del RAG sin vectores: Ya que no se sabe dónde cortar, simplemente no se corta.
- Tira directamente al LLM la página entera, o incluso el capítulo entero, que contiene las palabras clave.
- Efecto: Problemas como "referencias pronominales poco claras" o "definiciones entre párrafos" desaparecen al instante. Porque el LLM ve el texto original coherente y puede entender por sí mismo a quién se refiere "ello" o cuál es el "acuerdo antes mencionado".
2. Resuelve el problema de "precisión" (Solucionado: Precisión)
- Problema de Vector RAG: Buscas "1024" y aparece "1025", buscas un nombre poco común y no lo encuentra.
- Solución del RAG sin vectores: Vuelve a la lógica del índice invertido (lógica de Ctrl+F).
- Efecto: Solo se encuentran las páginas que contienen obligatoriamente la palabra "1024". Para indicadores duros como números de contrato, SKU, códigos de error, nombres, la precisión pasa del 70% al 100%.
3. Resuelve el problema de "caja negra y mantenimiento" (Solucionado: Caja Negra)
- Problema de Vector RAG: La base de datos vectorial es una caja negra; es difícil saber por qué se recuperó ese texto sin sentido.
- Solución del RAG sin vectores: La lógica es transparente.
- Efecto: ¿Por qué se recuperó esta página? Porque esta página tiene estas tres palabras clave. Si la recuperación es incorrecta, es un problema de la estrategia de extracción de palabras clave, y es muy fácil de arreglar.
II. ¿Qué nuevos problemas introduce? (Pérdidas)
Todo tiene un precio. El RAG sin vectores, en realidad, sacrifica la "comprensión semántica" para obtener un "contexto preciso". Esto conlleva dos nuevos puntos débiles:
1. Pérdida del "significado implícito" (Perdido: Ambigüedad semántica)
Esta es la mayor desventaja del RAG sin vectores.
- Escenario: El usuario busca "¿cómo ahorrar dinero?" El documento dice "optimizando procesos para reducir costes".
- Vector RAG: Puede encontrarlo. Porque sabe que "ahorrar dinero" ≈ "reducir costes".
- RAG sin vectores: No lo encuentra. Porque el documento no contiene las palabras "ahorrar dinero".
- Medida correctiva: Es necesario usar un LLM antes de la búsqueda para hacer una "Expansión de Consulta (Query Expansion)", reescribiendo la pregunta del usuario en múltiples palabras clave (ahorrar dinero -> reducir costes, disminuir gastos, economizar), pero esto añade complejidad y latencia.
2. Consumo de potencia de cálculo y dinero de "aguja en un pajar" (Coste y Latencia)
- Vector RAG: Solo da al LLM 5 fragmentos (aproximadamente 1000 Tokens). Barato y rápido.
- RAG sin vectores: Podría dar al LLM 10 páginas completas (aproximadamente 10,000 a 20,000 Tokens).
- Dinero: Tu factura de API se disparará 10 o 20 veces.
- Lento: El tiempo hasta el primer token (TTFT) del LLM es completamente diferente al leer 20,000 caracteres que al leer 1,000.
- Riesgo de pérdida en medio (Lost in the Middle): Aunque los LLM afirman soportar 200k de contexto, los experimentos muestran que cuando el contexto es demasiado largo, el LLM tiende a ignorar la información del medio y solo recuerda el principio y el final.
III. El árbitro final: ¿En qué es realmente bueno?
Para que veas la esencia, usemos una analogía de "examen a libro abierto":
| Modo | Analogía | Resultado |
|---|---|---|
| Vector RAG | Trampa con fichas: El profesor no te deja mirar el libro, solo te permite cortar el libro en trozos pequeños (Chunks) antes del examen para hacer chuletas. Durante el examen, adivinas qué chuleta usar según la pregunta. | Si la chuleta está mal cortada o no adivinas cuál usar, suspendes. |
| RAG sin vectores | Examen con libro: El profesor te permite llevar el libro entero. Usas el índice para ir rápidamente al capítulo y luego lees de principio a fin para encontrar la respuesta. | Puedes entender la lógica completa, nunca sacarás nada de contexto. Pero pasar las páginas y leer es lento y agotador. |
IV. ¿Cuál es la mejor práctica actual?
Ninguno "reemplaza" al otro. La arquitectura más potente ahora es el Hybrid RAG (RAG Híbrido), que toma lo mejor de ambos:
- Recuperación de doble vía:
- Una vía usa Vector para encontrar contenido "semánticamente relacionado" (resuelve el problema de "ahorrar dinero" vs "costes").
- Otra vía usa Keyword para encontrar contenido de "coincidencia exacta" (resuelve el problema del "número de contrato").
- Reordenamiento (Rerank):
- Mezcla el contenido recuperado por ambas vías, lo puntúa con un modelo preciso y selecciona los mejores N.
- Generación con ventana grande:
- Independientemente del método de recuperación, se intenta dar una "ventana de contexto" lo más grande posible (por ejemplo, si se recupera un párrafo, también se dan los 2000 caracteres anteriores y posteriores al LLM), aprovechando los modelos de texto largo ahora económicos (como Gemini 1.5 Flash o Claude Haiku) para la lectura.
Conclusión:
El RAG sin vectores resuelve los dos problemas de ingeniería más dolorosos: "contexto fragmentado" y "precisión", pero depende en gran medida de la capacidad de texto largo del LLM y de lo grueso que sea tu bolsillo.
A continuación, ¿te gustaría conocer cómo se construye la arquitectura específica del "RAG Híbrido"? ¿O te gustaría ver cómo optimizar los costes del RAG con texto largo?