RAG de punta a punta: un tutorial práctico
Qué es, cómo funciona cada pieza, cómo se evalúa, un ejemplo en producción sobre Azure y una comparación de Azure · Google Cloud · código abierto
Idea clave: el valor de RAG no está en “enchufar un vector store”: está en leer bien los documentos, buscar de forma híbrida, reordenar (reranking) y, sobre todo, medir el retrieval y las respuestas por separado.
En las pruebas de Anthropic (2024), agregar contexto a los chunks, BM25 y un reranker redujo en 67% las fallas de recuperación. Las herramientas comerciales de RAG legal alucinan el 17–33% de las veces (Stanford, 2024), y en el benchmark CRAG de Meta (2024) los mejores sistemas RAG industriales responden sin alucinar solo el 63% de las veces. Para medir todo esto, un juez LLM coincide con los humanos más del 80% de las veces (Zheng et al., 2023).
Verifiqué casi todo lo que aparece aquí contra la documentación oficial y los papers citados el 23 de septiembre de 2026. Algunos detalles de herramientas marcados con † vienen de la experiencia general y no los volví a comprobar. Las funciones marcadas como (preview) existen, pero el proveedor todavía no las recomienda para producción. Las siglas se explican la primera vez que aparecen y están reunidas en el glosario del final; los papers se citan por su nombre en el texto (SPLADE, ColBERT, RAGAS), con autores, año y enlace en las referencias.
Parte I · Conceptos
1. Qué es RAG, explicado con una biblioteca
RAG (Retrieval-Augmented Generation) significa que, antes de responder, un modelo de lenguaje busca en tus documentos y responde a partir de lo que encontró, citando la fuente.
¿Para qué lo necesitas? Un modelo de lenguaje no conoce los documentos internos de tu empresa, su conocimiento se detiene en una fecha de corte y puede inventar cosas (“alucinar”). Con RAG la respuesta se apoya en documentos concretos que cualquiera puede revisar, y actualizar el conocimiento no obliga a reentrenar el modelo.
La forma más fácil de ver cómo encajan las piezas es pensar en una biblioteca y en alguien que llega al mostrador con una pregunta:
- La biblioteca son tus documentos: todo aquello de lo que el sistema puede sacar respuestas, como PDFs, wikis o políticas internas.
- Las fichas son los chunks. Nadie relee un libro entero por cada pregunta, así que cada documento se corta en fichas pequeñas, cada una con un trozo de información que se entiende por sí solo.
- El catálogo es el índice. Cada ficha se archiva de dos maneras: por las palabras que contiene y por lo que significa. Eso es lo que después permite buscar tanto por palabra clave como por significado.
- El bibliotecario es la búsqueda. Cuando llega una pregunta, trae rápido unas 50 fichas que parecen relevantes, sin leerlas a fondo.
- El experto es el reranker. Lee la pregunta junto a cada una de esas fichas y se queda con las 5 mejores.
- El redactor es el modelo de lenguaje. Solo ahora alguien escribe la respuesta, usando esas 5 fichas y citando la ficha de la que sale cada frase. Si las fichas no contienen la respuesta, lo honesto es decir “no lo sé”.
- El profesor es la evaluación. Califica dos cosas por separado: si el bibliotecario trajo las fichas correctas y si la respuesta es fiel a ellas.
El resto del tutorial sigue el mismo orden: preparar los documentos (etapas 1 a 3), búsqueda (4), reranking (5), generación (6) y evaluación (7).
No todos los sistemas RAG tienen las siete etapas. Gao et al. (2023/24) distinguen tres generaciones:
| Generación | Idea |
|---|---|
| Naive RAG | Indexar → recuperar los k primeros → pegarlos en el prompt |
| Advanced RAG | Mejorar lo que pasa antes de buscar (reescribir la pregunta, hacer mejor chunking) y después (rerank, compresión) |
| Modular RAG | Piezas intercambiables; flujos adaptativos, iterativos y agénticos |
En términos de la biblioteca, el Naive RAG es un bibliotecario que le pasa las primeras k fichas directamente al redactor, sin el experto de por medio. Este tutorial describe un Advanced RAG, con piezas modulares donde compensan (sección 10).
2. Los tres circuitos de un sistema RAG en producción
Un sistema RAG en producción funciona con tres circuitos. El primero prepara los documentos una sola vez, fuera de línea: fuentes, parsing y chunking, embeddings e índice (etapas 1 a 3 de la biblioteca). El segundo se ejecuta con cada pregunta: búsqueda híbrida, reranker y el modelo que responde con citas (etapas 4 a 6). El tercero evalúa, antes del despliegue con un golden dataset y en producción con muestras del tráfico real, y devuelve mejoras a los otros dos (etapa 7). Las partes II a VI los recorren en ese orden.
Parte II · Preparar los documentos
3. Leer bien el documento (parsing)
El parsing influye más que cualquier otro paso, y es el que los equipos más descuidan. Si conviertes un PDF a “texto plano”, pierdes los títulos, las tablas se desordenan y cada chunk pierde su contexto.
Los estudios coinciden en esto:
- Los autores de ColPali (ICLR 2025) “suelen encontrar que optimizar el pipeline de ingesta da mejoras mucho mayores que optimizar el modelo de embeddings”. ColPali mismo se salta la extracción de texto y el chunking, e indexa directamente imágenes de las páginas; en el benchmark ViDoRe obtuvo 81.3 nDCG@5 frente a ~65–67 de los pipelines basados en parsing.
- En el estudio de Unstructured sobre FinanceBench (2024), hacer chunking por elementos del documento (títulos, tablas) alcanzó 53.2% de exactitud frente a 48.2% con chunks fijos de 512 tokens, y usó la mitad de chunks.
- Un estudio en turco (2026) encontró que el chunking que tiene en cuenta el layout ayuda mucho más en documentos con tablas que en documentos que solo tienen texto.
Las herramientas habituales son el Document Layout skill (Azure), Document AI Layout Parser (Google) y Docling (IBM, código abierto). La sección 22 las compara.
4. Chunking
El chunking divide cada documento en pedazos pequeños (chunks) que se indexan por separado.
4.1 Las estrategias
| Estrategia | Cómo divide | Costo |
|---|---|---|
| Tamaño fijo | Cada N tokens, con solapamiento opcional | Mínimo |
| Recursivo | Intenta dividir por párrafo, luego por línea, luego por oración… | Mínimo |
| Por estructura / página | Por las secciones, títulos o páginas del documento | Bajo (requiere buen parsing) |
| Semántico | Corta donde cambia el significado entre oraciones, medido con embeddings | Medio |
| Basado en LLM (“agéntico”) | Un modelo decide dónde cortar | Alto |
| Proposiciones | Un modelo reescribe el texto como hechos atómicos | Alto |
4.2 Lo que dice la evidencia: el chunking semántico está sobrevalorado
- Vectara (2024) se preguntó “Is Semantic Chunking Worth the Computational Cost?” y concluyó que “los costos computacionales del chunking semántico no se justifican con mejoras de rendimiento consistentes”. El chunking de tamaño fijo ganó en los 4 datasets de documentos reales (en HotpotQA, por ejemplo, F1@5 fue 90.59 con fijo vs 87.37 con semántico). El modelo de embeddings importó más que el chunking.
- Chroma (2024) encontró que la estrategia de chunking mueve el recall hasta un 9%. Su chunker semántico por defecto quedó un poco por debajo del promedio (83.6% de recall), mientras que un chunker recursivo de 200 tokens sin solapamiento llegó a 88.1%. El mejor resultado (91.9%) usó un modelo de lenguaje y costó mucho más.
- NVIDIA (junio de 2025) obtuvo la mejor exactitud promedio (0.648) y la menor varianza entre datasets con chunking por página.
- En biomedicina (2026), el chunking semántico ganó +8.4 puntos de F1 en un dataset, pero en los demás el chunking de tamaño fijo “sigue siendo competitivo o mejor”. Depende del dominio.
4.3 Lo que sí funciona: agregar contexto a cada chunk
| Chunk sin contexto | Chunk con contexto |
|---|---|
"| Manager | 2 |"→ ¿2 qué? ¿dónde? |
"Remote Work Policy > 3. Eligibility > 3.2 Spain | Manager | 2 days/week |"→ se entiende por sí solo |
La Contextual Retrieval de Anthropic (sep. 2024) pone a un modelo a escribir 50–100 tokens de contexto y los antepone a cada chunk. Medido como la tasa de fallas de recuperación dentro de los 20 primeros resultados, partiendo de una línea base de 5.7%:
- contexto solo en los vectores: 3.7% (−35%)
- contexto en los vectores y en BM25: 2.9% (−49%)
- todo lo anterior más un reranker: 1.9% (−67%)
El costo, que se paga una sola vez, es de ~$1.02 por millón de tokens de documento con prompt caching. Ten cuidado al citar estas cifras: los tres porcentajes son reducciones respecto a la línea base de 5.7%, así que el aporte propio del reranker es el paso de 2.9% a 1.9%.
El late chunking (Jina, 2024) calcula primero el embedding del documento completo y solo después lo divide, así que cada vector “sabe” de qué documento viene. Mejora nDCG@10 entre +2.7% y +3.6% sin reentrenar.
4.4 Tamaños para empezar
Bhat et al. (2025) sugieren 64–128 tokens para preguntas factuales cortas y 512–1024 tokens para preguntas que necesitan un contexto amplio. Azure recomienda empezar con 512 tokens y 25% de solapamiento, y agregar el título del documento a los chunks intermedios.
Un punto de partida razonable: empieza con chunking recursivo o por sección/página de 256–512 tokens, no partas las tablas, agrega contexto y ajusta midiendo (Parte VI).
5. Convertir el texto en vectores (embeddings)
Un embedding es una lista de números que representa el significado de un texto. Los textos con significados parecidos quedan cerca unos de otros:
| Tipo | Qué es | Ejemplos |
|---|---|---|
| Denso | Cientos o miles de números, todos con valor | text-embedding-3 (OpenAI/Azure), gemini-embedding-001, Qwen3-Embedding, BGE-M3 |
| Disperso aprendido | Lista de términos (casi todos en cero) con pesos, ampliada con términos relacionados | SPLADE, ELSER (Elastic), modo sparse de BGE-M3 |
| Multivector | Un vector por token; se compara token a token | ColBERT, ColPali |
Mide con tus propios datos. Los leaderboards públicos (como MTEB) cambian cada mes y no siempre reflejan tu dominio. Y fija la versión del modelo: si mezclas vectores de modelos distintos, las búsquedas dejan de tener sentido.
6. Índice y permisos
El índice guarda cada chunk con su texto, su vector y sus metadatos:
| Campo(s) en el índice | Para qué sirve |
|---|---|
id, content, content_vector | el texto del chunk y su embedding |
title, section, page, source_url | de dónde viene |
allowed_groups | grupos que pueden verlo |
last_modified | vigencia |
Sin allowed_groups y un filtro de seguridad en cada búsqueda, un pasante podría recibir chunks de documentos del comité ejecutivo.
Parte III · Recuperación
7. BM25: búsqueda por palabras clave
BM25 es el algoritmo clásico de búsqueda por palabras clave (léxica) y el que viene por defecto en Elasticsearch, OpenSearch y Azure AI Search. Funciona sobre un índice invertido, que se parece al índice alfabético al final de un libro:
| Término | Documentos donde aparece (postings) |
|---|---|
"remote work" | doc3, doc7, doc12 |
"manager" | doc7, doc9 |
"spain" | doc7, doc12, doc15 |
El puntaje tiene tres partes:
| Ingrediente | Idea | Ejemplo |
|---|---|---|
| Frecuencia del término | Más apariciones = más puntos, pero con saturación (parámetro k1, 1.2 por defecto en Elasticsearch †) | 3 veces > 1 vez, pero 20 veces ≈ 10 veces |
| Rareza del término | Las palabras raras valen más | “ORA-00942” vale mucho; “de” casi nada |
| Largo del documento | Un texto corto que contiene la palabra puntúa más que uno largo (parámetro b, 0.75 por defecto †) | Un párrafo específico le gana a un manual entero |
BM25 es rápido, no necesita modelo, se puede explicar y es excelente para términos exactos como códigos, siglas y nombres propios. Su debilidad son los sinónimos: “laptop barata” no encuentra “notebook económica”.
8. Búsqueda semántica: por significado
8.1 Vectores densos (búsqueda de vecinos más cercanos)
Aquí la pregunta se convierte en un vector y recuperas los chunks más cercanos. Hacerlo rápido sobre millones de vectores requiere un índice aproximado, normalmente HNSW (un grafo de vecinos).
La búsqueda densa entiende sinónimos, paráfrasis e idiomas distintos. En cambio, es una caja negra (no puedes explicar por qué algo coincidió), puede confundir códigos casi idénticos (ORA-00942 vs ORA-00943) y usa más memoria. La cuantización reduce la memoria comprimiendo los números, por ejemplo a 8 bits o a binario.
8.2 Disperso aprendido (SPLADE, ELSER)
El disperso aprendido (learned sparse) queda entre los dos. Un modelo amplía el texto con términos relacionados y sus pesos, y luego la búsqueda corre sobre un índice invertido, como con BM25:
"cheap laptop" → { laptop: 2.1, notebook: 1.8, computer: 1.2, cheap: 1.9, budget: 1.5, price: 0.9 }
Es más fácil de explicar que los vectores densos y aun así encuentra sinónimos. El problema es que depende del idioma del modelo (ELSER se recomienda solo para inglés) y tiene un límite de tokens (ELSER codifica los primeros 512 tokens de cada campo).
8.3 Cuál gana
| Consulta | BM25 | Denso | Disperso aprendido |
|---|---|---|---|
| “laptop barata” → doc con “notebook económica” | No | Sí | Sí |
| “error ORA-00942” → doc con ese código | Sí | Poco confiable | Sí |
| “¿puedo trabajar desde casa?” → doc con “teletrabajo” | No | Sí | Sí, si el idioma está soportado |
| Explicar por qué coincidió | Sí | No | En parte |
| Costo | Mínimo | Modelo + memoria | Modelo |
Ninguno gana siempre, y por eso se combinan.
9. Búsqueda híbrida y RRF
9.1 El problema
Las dos búsquedas devuelven puntajes en escalas incompatibles:
| Posición | BM25 (sin límite superior) | Vector (coseno 0.33–1 en Azure) |
|---|---|---|
| 1 | doc_B → 12.4 | doc_A → 0.89 |
| 2 | doc_A → 9.1 | doc_C → 0.87 |
| 3 | doc_D → 3.2 | doc_B → 0.81 |
Sumar 12.4 + 0.81 tiene tanto sentido como sumar euros y kilos.
9.2 La solución: RRF (Reciprocal Rank Fusion)
RRF ignora los puntajes y usa solo la posición de cada documento en cada lista:
RRF(doc) = Σ 1 / (k + position of doc in that list) with k = 60 typically
over each list
Tomemos los mismos rankings de arriba:
| Posición | BM25 | Vector |
|---|---|---|
| 1 | doc_B | doc_A |
| 2 | doc_A | doc_C |
| 3 | doc_D | doc_B |
| Doc | Aporte de BM25 | Aporte del vector | Total | Final |
|---|---|---|---|---|
| doc_A | 1/62 = 0.01613 | 1/61 = 0.01639 | 0.03252 | 1 |
| doc_B | 1/61 = 0.01639 | 1/63 = 0.01587 | 0.03226 | 2 |
| doc_C | 0 | 1/62 = 0.01613 | 0.01613 | 3 |
| doc_D | 1/63 = 0.01587 | 0 | 0.01587 | 4 |
doc_A gana porque está arriba en las dos listas. RRF premia el acuerdo entre los dos métodos.
9.3 ¿Por qué k = 60?
| Posición 1 | Posición 2 | Diferencia | |
|---|---|---|---|
| k = 0 | 1.000 | 0.500 | el doble: ser 1.º en una sola lista domina |
| k = 60 | 0.0164 | 0.0161 | casi igual: lo que cuenta es quedar bien en varias listas |
El valor viene del paper original (Cormack, Clarke y Büttcher, SIGIR 2009), donde se eligió de forma empírica, y Azure AI Search documenta que funciona mejor con valores pequeños como 60.
9.4 Ventajas, límites y variantes
RRF no necesita calibrar escalas ni entrenar nada, y acepta N listas (BM25, varios vectores, varias reformulaciones de la pregunta). Tiene dos debilidades. Ignora la magnitud, así que ser primero “por mucho” vale lo mismo que ser primero “por poco”. Y una lista mala cuenta igual: si la búsqueda vectorial devuelve basura, esa basura también suma puntos.
Hay dos variantes comunes:
- El RRF ponderado le da más peso a una de las listas (por ejemplo, la vectorial ×2). Está disponible en Azure (vector weighting), en el
EnsembleRetrieverde LangChain † y en Google Vector Search conrrf_ranking_alpha. - La combinación lineal normaliza los puntajes y los suma con pesos. Aprovecha la magnitud, pero hay que calibrarla con datos. Ejemplos son el retriever
linearde Elasticsearch y DBSF en Qdrant †.
Ten en cuenta que RRF no es un reranker. Solo fusiona listas, y el reranker viene después.
10. Estrategias avanzadas de recuperación
| Técnica | Qué hace | Evidencia clave |
|---|---|---|
| Reescritura con historial | Convierte “¿y cuántos días?” en una pregunta completa usando el chat anterior | Práctica estándar |
| HyDE | Un modelo escribe una respuesta hipotética y se busca con ella | Compite con retrievers entrenados, sin necesitar etiquetas (Gao et al., 2022) |
| Multi-query / RAG-Fusion | Varias reformulaciones de la pregunta, fusionadas con RRF | Más cobertura; riesgo de desviarse del tema |
| Step-back | Primero pregunta algo más general | +27% en TimeQA, +7% en MuSiQue (Google DeepMind) |
| Descomposición | Divide una pregunta compleja en subpreguntas | Base de la búsqueda agéntica |
| RAPTOR / documento padre | Resúmenes jerárquicos; busca por chunk pequeño y devuelve el grande | RAPTOR + GPT-4: +20% absoluto en QuALITY |
| GraphRAG | Grafo de entidades + resúmenes por comunidad | Mejora las preguntas globales (“¿qué temas se repiten?”). LazyGraphRAG indexa al 0.1% del costo y consulta >700× más barato. No siempre gana: en búsquedas puntuales el RAG clásico suele igualarlo o superarlo (Han et al., 2025/26; HippoRAG 2) |
| Adaptativo (Self-RAG, Corrective RAG, Adaptive-RAG) | Decide cuándo buscar y cuánto, y corrige si la búsqueda salió mal | Adaptive-RAG enruta según la complejidad de la pregunta |
| Agéntico / “Deep Research” | Búsqueda iterativa entrenada con aprendizaje por refuerzo | Search-R1: +41% (7B) sobre el RAG de base; OpenAI Deep Research tarda de 5 a 30 minutos por tarea |
| Contexto largo vs RAG | ¿Meter todo en el prompt? | Los modelos rinden peor cuando la información está en medio del contexto (“Lost in the Middle”); recuperar demasiado empeora la respuesta; lo eficiente es enrutar cada consulta (Self-Route), y ninguna opción gana siempre (LaRA) |
11. Caso de estudio: Elasticsearch
Elasticsearch tiene cuatro piezas “semánticas” distintas, y es fácil confundirlas:
- A. Denso:
dense_vector+ consultaknn, con cuantización int8, int4 y BBQ. Puedes usar E5 (multilingüe), Jina (a través del Elastic Inference Service) o modelos externos (OpenAI, Azure OpenAI, Cohere, Bedrock, Vertex AI, Hugging Face). - B. ELSER expande términos. Lo que aporta son asociaciones aprendidas, no sinónimos. En el benchmark BEIR de la propia Elastic mejora nDCG@10 sobre BM25 en un 18% en promedio (10 victorias, 1 empate, 1 derrota). Se recomienda para inglés, lee 512 tokens por campo y requiere una suscripción de pago.
- C. Reranker: el retriever
text_similarity_rerankero el comandoRERANKen ES|QL. - D.
semantic_text(GA desde la versión 9.0). Si no fijasinference_id, los índices nuevos pueden usar otro modelo después de actualizar de versión, así que fija siempre el modelo en producción.
Así se ve una búsqueda híbrida con reranker en una sola llamada:
{
"retriever": {
"text_similarity_reranker": {
"retriever": {
"rrf": {
"retrievers": [
{ "standard": { "query": { "match": { "content": "remote work days manager Spain" } } } },
{ "standard": { "query": { "semantic": { "field": "content_semantic",
"query": "remote work days manager Spain" } } } }
],
"rank_window_size": 50,
"rank_constant": 60
}
},
"field": "content",
"inference_id": "my-rerank-endpoint",
"inference_text": "remote work days manager Spain",
"rank_window_size": 50
}
}
}
También puedes fusionar con el retriever linear (normalizadores minmax o l2_norm) o, en ES|QL, con FORK + FUSE (RRF o LINEAR) + RERANK. En el formato multi-field, Elastic normaliza los campos léxicos y los semánticos para que cada grupo aporte el 50%.
Ojo con el vocabulario. En Elastic, “semantic search” significa buscar con embeddings; en Azure, el “semantic ranker” es un reranker.
Parte IV · Reranking
12. Reranking
12.1 Qué es
Un reranker toma los ~50–150 candidatos de la búsqueda y los reordena leyendo juntos la pregunta y cada chunk. Eso es más preciso que comparar vectores, pero más lento, así que solo se aplica a unos pocos candidatos.
La arquitectura típica tiene dos etapas: una búsqueda híbrida (que prioriza la cobertura), luego un reranker sobre 100–150 candidatos y, al final, entre 10 y 20 chunks que pasan al modelo que escribe la respuesta.
12.2 Tipos
| Tipo | Ejemplos | Nota |
|---|---|---|
| Cross-encoder clásico | monoBERT, bge-reranker-v2-m3 | monoBERT: +27% en MRR@10 en MS MARCO (2019) |
| Modelo de lenguaje como reranker | RankGPT, RankZephyr (código abierto), Setwise | RankZephyr iguala o supera a GPT-4 |
| Reranker con razonamiento (2025–26) | Rank1, Rank-R1, ReasonRank | En BRIGHT (búsqueda que requiere razonamiento), el mejor modelo de MTEB cae de 59.0 a 18.3; razonar sobre la pregunta suma hasta +12.2 |
| Interacción tardía | ColBERT | Punto intermedio: ~100× más rápido que un reranker BERT |
12.3 Modelos destacados (verificados)
| Modelo | Organización / fecha | Licencia | Dato |
|---|---|---|---|
| Rerank 4 Pro / Fast | Cohere, dic. 2025 | Servicio de pago | #2 en el leaderboard independiente de Agentset (1627 puntos Elo vs ~1457 de v3.5) |
| zerank-2 | ZeroEntropy | Pesos abiertos | #1 en Agentset |
| rerank-2.5 | Voyage (MongoDB), ago. 2025 | Servicio de pago | Contexto de 32K, sigue instrucciones |
| Qwen3-Reranker 0.6/4/8B | Alibaba, jun. 2025 | Apache 2.0 | 69.76 en MTEB-R (4B) vs 57.03 de bge-v2-m3 |
| jina-reranker-v3.5 | Jina, jul. 2026 | No comercial | 63.20 en BEIR con 0.6B parámetros |
| mxbai-rerank-large-v2 | Mixedbread, mar. 2025 | Apache 2.0 | 57.49 en BEIR |
| Semantic ranker | Microsoft (Azure AI Search) | Servicio administrado | Reordena el top 50, puntaje de 0 a 4 |
| Ranking API | Servicio administrado | Hasta 1000 chunks por llamada, puntaje de 0 a 1 |
12.4 Reglas prácticas
Un reranker es la mejora más barata y más probada que puedes hacer. En las cifras de Anthropic, agregar solo eso lleva la tasa de fallas de 2.9% a 1.9%.
Pero el reranker solo reordena lo que la búsqueda encontró. Si el documento correcto no está entre los candidatos, no te puede salvar, y por eso primero se mide la cobertura de la recuperación (recall).
Lo que hoy distingue a unos rerankers de otros es que siguen instrucciones: les puedes dar reglas de negocio como “prioriza el contenido reciente”. Cada proveedor dice ser el mejor, así que mide con tus propios datos.
Algunos complementos valen la pena. MMR elimina chunks redundantes. La compresión con LongLLMLingua da +21.4% de calidad con ~4× menos tokens. Y la posición en el prompt importa: pon lo más relevante al principio o al final (“Lost in the Middle”).
Parte V · Generación y guardrails
13. Generación con citas y guardrails
El prompt se ve así:
System: Answer ONLY from the context. Cite every claim as [n].
If the context does not contain the answer, say "I don't know".
Context: [1] Remote Work Policy §3.2 Spain, p. 4: "Manager: 2 days/week..."
[2] 2026 Annex, p. 1: "...starting January 2026, 3 days for..."
Question: remote work days for a manager in Spain
Los guardrails actúan antes, durante y después de la generación:
- Antes, detectar intentos de manipular el modelo (“jailbreak” o prompt injection).
- Durante, si el reranker no deja ningún chunk por encima del umbral, responder “No encontré esa información” en vez de inventar algo.
- Después, verificar que cada oración de la respuesta esté respaldada por los chunks. Si la verificación falla, regenerar o responder con cautela.
Parte VI · Evaluación
14. Dos pruebas separadas
Si solo miras la respuesta final, no sabes qué arreglar. Microsoft llama process evaluation a la evaluación del paso de recuperación y system evaluation a la evaluación de la respuesta.
15. El golden dataset (la “clave de respuestas”)
El golden dataset es un conjunto de 100 a 300 preguntas, cada una con su respuesta correcta y los documentos que deberían aparecer:
{"query": "Remote work days, manager, Spain?",
"ground_truth": "2 days per week; 3 from January 2026 according to the annex",
"relevant_docs": [{"document_id": "teletrabajo_p4", "query_relevance_label": 4},
{"document_id": "anexo2026_p1", "query_relevance_label": 3}]}
| De dónde salen las preguntas | Por qué |
|---|---|
| Logs de preguntas reales | Es lo que la gente pregunta de verdad |
| Expertos del negocio (recursos humanos, legal) | Casos difíciles y trampas |
| Generación sintética (RAGAS, simuladores de los proveedores de nube) | Cobertura rápida, pero siempre con revisión humana |
| Preguntas sin respuesta en los documentos | Comprueban que el sistema diga “no sé” en vez de inventar |
16. Métricas de recuperación, con números
Digamos que para una pregunta los documentos correctos son A y C, y el buscador devolvió [B, A, D, C, E].
| Posición | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| Devuelto | B | A | D | C | E |
| ¿Correcto? | ✗ | ✓ | ✗ | ✓ | ✗ |
| Métrica | Pregunta que responde | Cálculo | Valor |
|---|---|---|---|
| Recall@3 (cobertura) | ¿Cuántos de los correctos aparecen en el top 3? | 1 de 2 | 0.50 |
| Recall@5 | ¿Y en el top 5? | 2 de 2 | 1.00 |
| Precision@5 (precisión) | De lo que traje, ¿cuánto sirve? | 2 de 5 | 0.40 |
| MRR (posición del primer acierto) | ¿Qué tan arriba está el primero correcto? | 1/2 | 0.50 |
| nDCG@5 (calidad del ranking) | ¿Están los correctos lo más arriba posible? | Real = 1/log₂3 + 1/log₂5 = 1.06; ideal = 1 + 1/log₂3 = 1.63 | 0.65 |
Estos números te dicen dónde buscar. Si Recall@50 es bajo, el problema está en la recuperación (chunking, embeddings, falta de BM25), y el reranker no lo va a arreglar. Si Recall@50 es alto pero nDCG@5 es bajo, el problema está en el reranker.
17. Métricas de respuesta, con números
Supón que el sistema responde: “Tienes 2 días por semana [1], 3 a partir de enero de 2026 [2], y puedes elegir los viernes.”
| Afirmación en la respuesta | ¿La respaldan los chunks? |
|---|---|
"2 days/week" | ✓ |
"3 from January 2026" | ✓ |
"you can choose Fridays" | ✗ (inventado) |
| Métrica | Pregunta | Resultado |
|---|---|---|
| Groundedness / Faithfulness (el lado de la precisión) | ¿Todo lo que dijo está en los chunks? | 2/3 = 0.67 ✗ alucinación |
| Completeness / Answer correctness (el lado de la cobertura) | ¿Dijo todo lo que dice la respuesta correcta? | 2/2 = 1.0 ✓ |
| Relevance | ¿Responde lo que se preguntó? | ✓ |
| Citas correctas | ¿Cada [n] respalda su oración? | ✓ |
Microsoft lo plantea igual: la fidelidad al contexto es el lado de la precisión (no agregar nada) y la completitud es el lado de la cobertura (no dejar fuera nada crítico).
Otra opción es la evaluación por “nuggets” (TREC 2024): defines los hechos atómicos que debe contener una buena respuesta y cuentas cuántos aparecen.
18. El LLM como juez
Nadie revisa 10,000 respuestas a mano, así que otro modelo hace de profesor. Ese juez tiene sesgos conocidos. Prefiere la primera opción que ve (posición), prefiere las respuestas largas (verbosidad) y prefiere el texto de su propia familia de modelos (autopreferencia).
Para montar un juez, apóyate en esto:
- Una persona etiqueta 50–100 casos.
- Mide el acuerdo entre juez y humano (kappa de Cohen, exactitud, F1).
- El juez debe ser de una familia de modelos distinta a la del generador.
- El juez debe explicar su puntaje.
- Puntuar afirmación por afirmación (RAGChecker) o por nuggets es mejor que dar un solo puntaje global.
¿Cuánto puedes confiar en él? GPT-4 como juez alcanza más del 80% de acuerdo con humanos, el mismo nivel que entre dos humanos (Zheng et al., 2023). En TREC 2024, el acuerdo perfecto entre humanos y GPT-4o fue de 56%, y de 72% cuando el humano corregía la etiqueta del modelo. Así que el juez LLM es confiable para comparar sistemas y menos confiable pregunta por pregunta. ARES combina unos cientos de etiquetas humanas con el juez automático para producir intervalos de confianza estadísticamente válidos.
19. Evaluación antes del despliegue y en producción
Un quality gate en integración continua podría exigir que Recall@10 no baje más de 2 puntos, que faithfulness se mantenga ≥ 95% y que las respuestas “no sé” correctas se mantengan ≥ 90%. Esos umbrales son solo ejemplos; los reales los fija el negocio. En producción se muestrea un porcentaje del tráfico real y se evalúa sin respuesta de referencia (faithfulness, answer relevance, context relevance), junto con los votos de pulgar arriba/abajo, la latencia y el costo.
Microsoft recomienda un barrido de parámetros: probar combinaciones y medir cuál gana. Los números de abajo son ilustrativos, no resultados reales:
| Configuración | Recall@10 | nDCG@5 | Faithfulness | Latencia |
|---|---|---|---|---|
| solo vector | 0.71 | 0.58 | 0.90 | 0.8 s |
| híbrida | 0.84 | 0.66 | 0.92 | 0.9 s |
| híbrida + rerank ← elegida | 0.84 | 0.79 | 0.95 | 1.3 s |
| + agéntico (solo preguntas complejas) | 0.88 | 0.81 | 0.95 | 3.5 s |
DeepEval sugiere no pasar de unas 5 métricas por aplicación. MLflow / Databricks recomiendan usar los mismos evaluadores en desarrollo y en producción. Y en producción solo puedes usar métricas que no necesiten una respuesta correcta.
20. Por qué importa: la alucinación en sistemas reales
| Estudio | Resultado |
|---|---|
| Stanford (2024): herramientas legales comerciales con RAG | Alucinan entre 17% y 33% de las veces |
| CRAG (Meta, 2024) | Modelo solo: ≤34% de exactitud; RAG simple: 44%; los mejores sistemas RAG industriales responden sin alucinar solo el 63% de las veces |
| FinanceBench (2023) | GPT-4-Turbo con recuperación falló o se negó a responder en el 81% de los casos |
| ALCE (2023) | Incluso los mejores modelos no tienen respaldo completo para sus citas el 50% de las veces |
| Vectara (leaderboard del 2026-09-22, tarea de resumen) | Tasas de alucinación entre 1.8% y 24.2% según el modelo (GPT-4o 9.6%, Gemini 2.5 Pro 7.0%, Claude Sonnet 4.5 12.0%) |
| FaithBench (2024) | Los mejores detectores de alucinación rondan el 50% de exactitud en los casos difíciles |
Varias de estas cifras son de 2023–2024 y vienen de modelos más viejos, así que cítalas siempre con año y modelo.
Parte VII · Un ejemplo en producción sobre Azure
21. Copiloto de políticas internas, paso a paso
El caso es una empresa de 20,000 empleados, con documentos de recursos humanos, legal y compras en SharePoint y Blob Storage. Necesita permisos por usuario, citas en cada respuesta y un “no sé” cuando no hay información.
21.1 Arquitectura
Si conoces el stack LangChain + Chroma/Qdrant, las piezas se corresponden así:
| Stack de código abierto | En Azure |
|---|---|
| Loaders de LangChain + text splitter | Indexador + Document Layout skill + chunking |
| Chroma / Qdrant | Azure AI Search (vectores + BM25 + filtros en un solo servicio) |
| Reranking con un modelo de lenguaje | Semantic ranker (y opcionalmente un modelo de lenguaje detrás) |
| Tu propia reescritura de consultas | Reescritura de consultas del semantic ranker (preview) o agentic retrieval |
| GraphRAG | Microsoft GraphRAG como índice aparte, solo para preguntas globales |
21.2 Una pregunta, de punta a punta
Ana, gerente en Madrid, preguntó antes en el chat por su contrato. Ahora escribe “entonces, ¿cuántos días puedo teletrabajar?”
-
El modelo reescribe la pregunta usando el historial del chat: “días de teletrabajo permitidos para un gerente en España”.
-
BM25 y la búsqueda vectorial corren en paralelo y se fusionan con RRF (k=60). Antes de puntuar, el filtro de seguridad elimina lo que Ana no tiene permiso de ver.
-
El semantic ranker toma solo el top 50 y los puntúa de 0 a 4:
Puntaje Significado 4 Responde por completo 3 Relevante pero incompleto 2 Parcial 1 Relacionado, responde muy poco 0 Irrelevante Los chunks con puntaje < 2 se descartan. Si no queda ninguno, la respuesta es “No encontré esa información”. Microsoft advierte que la distribución de puntajes puede variar un poco, así que los umbrales no deberían ser demasiado finos.
-
El modelo genera la respuesta con citas, usando la estructura de prompt de la sección 13.
-
Una verificación de fidelidad comprueba que cada oración esté respaldada por los chunks. Si falla, la respuesta se regenera o se da con cautela.
Una pregunta compleja (“compara el teletrabajo en España vs México y dime cuál aplica si me mudo”) va al agentic retrieval de Azure AI Search, que la divide en subconsultas, las ejecuta en paralelo, reordena cada una con el semantic ranker y combina los resultados. La planificación de consultas y la síntesis de respuestas basadas en LLM todavía están en preview.
Una pregunta global (“¿qué temas se repiten en todas las políticas de 2026?”) es donde GraphRAG vale la pena.
21.3 Evaluación en Azure (Microsoft Foundry)
| Evaluador | Tipo | Necesita respuesta correcta | Estado |
|---|---|---|---|
| Document Retrieval | Recuperación: NDCG, XDCG, Fidelity, Max Relevance, Holes | Sí (etiquetas de relevancia) | GA |
| Retrieval | Recuperación, juzgada por un modelo de lenguaje (escala 1–5) | No | GA |
| Groundedness | Respuesta: fidelidad al contexto | No | GA |
| Groundedness Pro | Fidelidad estricta con Content Safety (true/false) | No | (preview) |
| Relevance | Respuesta: ¿responde la pregunta? | No | GA |
| Response Completeness | Respuesta: ¿deja fuera algo crítico? | Sí | (preview) |
Los puntajes usan una escala de 1 a 5 y aprueban con 3 por defecto. La evaluación continua corre sobre muestras de tráfico real (porcentaje configurable, hasta 1000 solicitudes por hora) y envía los resultados a Application Insights, vinculados a las trazas.
Parte VIII · Comparación: Azure vs Google Cloud vs código abierto
22. Azure vs Google Cloud vs código abierto
Algunos productos cambiaron de nombre hace poco (verificado el 2026-09-23):
- En Google, Vertex AI ahora aparece como Gemini Enterprise Agent Platform, Vertex AI Search se está renombrando a Agent Search y Vector Search 2.0 ahora se llama Agent Retrieval.
- En Microsoft, Azure AI Foundry ahora es Microsoft Foundry.
Fase 1: Preparar los documentos
| Etapa | Qué hace | Azure | Google Cloud | Código abierto |
|---|---|---|---|---|
| 1. Fuentes | Dónde viven los documentos | Blob Storage, SharePoint | Cloud Storage, Google Drive | Sistema de archivos, almacenamiento compatible con S3 (MinIO) † |
| 2. Lectura (parsing) | PDF/Word → texto con estructura | Document Layout skill, que usa el modelo de layout de Document Intelligence y devuelve Markdown por sección | Document AI Layout Parser: versión estable desde 2024; versiones con Gemini en preview; descripciones de figuras y tablas con Gemini en preview | Docling (IBM, MIT), Unstructured, MinerU †, Marker † |
| 3. Chunking | Chunks con contexto | Document Layout skill (por sección, o tamaño fijo con solapamiento) y Text Split skill | El Layout Parser hace chunking por estructura y agrega los títulos superiores. RAG Engine permite fijar el tamaño y el solapamiento | Text splitters de LangChain y LlamaIndex; chunking de Docling † |
| 4. Embeddings | Texto → números | Azure OpenAI text-embedding-3-large / -small | gemini-embedding-001 (hasta 3072 dimensiones, 2048 tokens por texto), text-embedding-005 (inglés y código), text-multilingual-embedding-002 | BGE-M3 (denso + disperso + multivector, más de 100 idiomas), Qwen3-Embedding (Apache 2.0), multilingual-E5 |
| 5. Índice | Base de datos donde buscar | Azure AI Search: vectores, palabras clave y filtros en un solo servicio | Vector Search / Agent Retrieval, RAG Engine (base de datos administrada, Pinecone o Weaviate) o Agent Search (totalmente administrado) | Qdrant, Chroma, Weaviate, Milvus, pgvector, Elasticsearch / OpenSearch † |
| 6. Permisos | Cada usuario ve solo lo suyo | Entra ID + filtro por grupo en el índice | Control de acceso de Google (IAM) + control de acceso por fuente de datos en Agent Search | Filtros de metadatos en la base de datos vectorial † |
Fase 2: Responder una pregunta
| Etapa | Qué hace | Azure | Google Cloud | Código abierto |
|---|---|---|---|---|
| 7. Reescritura | Pregunta autónoma; dividir las preguntas complejas | Reescritura de consultas del semantic ranker (preview); búsqueda agéntica con planificación (preview) | Agent Search: preguntas de seguimiento y respuestas con búsqueda agéntica | MultiQueryRetriever de LangChain, HyDE, transformaciones de consultas de LlamaIndex † |
| 8. Palabras clave (BM25) | Coincidencia exacta | BM25 integrado en AI Search | Vector Search: tú generas el vector disperso (BM25, TF-IDF o SPLADE) y lo subes. Agent Search: administrado | BM25 de Elasticsearch/OpenSearch; vectores dispersos en Qdrant; SPLADE |
| 9. Significado | Vecinos más cercanos | Vectores en AI Search | Vector Search / Agent Retrieval (milisegundos incluso con miles de millones de elementos, según Google) | Qdrant, Chroma, Weaviate, Milvus, pgvector † |
| 10. Fusión | Combinar listas | RRF automático (k=60), con un peso configurable para los vectores | RRF con rrf_ranking_alpha | RRF en Qdrant †, búsqueda híbrida de Weaviate †, EnsembleRetriever de LangChain † |
| 11. Reranker | Reordenar leyendo juntos la pregunta y el chunk | Semantic ranker: el top 50, puntaje 0–4 | Ranking API: semantic-ranker-default-004 / -fast-004 (1024 tokens, 25 idiomas, puntaje 0–1, hasta 1000 chunks por llamada). La versión 005 está en preview desde el 1 de septiembre de 2026 y será la predeterminada a más tardar el 1 de octubre de 2026 | bge-reranker-v2-m3, Qwen3-Reranker (Apache 2.0), mxbai-rerank-v2 (Apache 2.0), ColBERTv2; o un modelo de lenguaje como reranker |
| 12. Agente | Búsquedas encadenadas | Búsqueda agéntica / Foundry IQ (la parte del modelo de lenguaje en preview) | Agent Development Kit (ADK) + Agent Runtime; agente Gemini Deep Research | LangGraph, agentes de LlamaIndex † |
| 13. GraphRAG | Grafo para preguntas globales | Microsoft GraphRAG (código abierto) desplegado en Azure; LazyGraphRAG en Microsoft Discovery | No se encontró un equivalente administrado (al 2026-09-23) | GraphRAG (Microsoft), LightRAG, HippoRAG 2 |
Fase 3: Generación y guardrails
| Etapa | Qué hace | Azure | Google Cloud | Código abierto |
|---|---|---|---|---|
| 14. Modelo redactor | Responder con citas | Modelos GPT en Azure OpenAI / Microsoft Foundry (también otros modelos en Foundry †) | Gemini (familia 3.x); también Claude, Llama, Qwen y otros en Model Garden | Llama, Qwen, Mistral, gpt-oss servidos con vLLM u Ollama † |
| 15. Protección de la entrada | Bloquear intentos de manipulación | Content Safety – Prompt Shields † | Model Armor | NeMo Guardrails, Llama Guard † |
| 16. Fidelidad a los documentos | ¿Cada oración está respaldada? | Evaluador Groundedness; Groundedness Pro (preview) | Check Grounding API: puntaje 0–1 por afirmación + citas, en menos de 500 ms | HHEM-2.1-Open (Vectara), MiniCheck |
Fase 4: Evaluación y monitoreo
| Etapa | Qué hace | Azure | Google Cloud | Código abierto |
|---|---|---|---|---|
| 17. Evaluar la recuperación | ¿Encontró lo correcto? | Document Retrieval (NDCG, XDCG, Fidelity, Holes; necesita etiquetas) y Retrieval (juez, sin etiquetas) | Evaluación de la calidad de búsqueda en Agent Search; servicio de evaluación de Agent Platform | RAGAS, DeepEval, RAGChecker, Open RAG Eval (UMBRELA) |
| 18. Evaluar la respuesta | ¿Fiel, relevante y completa? | Groundedness, Relevance, Response Completeness (preview); escala 1–5, aprueba con 3 | Servicio de evaluación con métricas basadas en rúbricas, un juez configurable y la opción de evaluar al propio juez | RAGAS, DeepEval, TruLens (“RAG triad”), ARES (intervalos de confianza) |
| 19. Evaluación continua | Evaluar muestras de tráfico real | Evaluación continua de Foundry: muestreo configurable, hasta 1000/hora, resultados en Application Insights | Online Monitors: cada ~10 min, porcentaje y tope configurables, resultados en Cloud Logging y Cloud Monitoring | Langfuse †, Arize Phoenix, MLflow |
| 20. Trazas | Ver qué pasó en cada paso | Application Insights / Azure Monitor + OpenTelemetry | Cloud Trace, Cloud Logging, Cloud Monitoring + OpenTelemetry (atributos gen_ai.) | OpenTelemetry + Phoenix / Langfuse † |
| 21. Despliegue | Dónde corre la app | Container Apps, App Service, AKS (Kubernetes) † | Cloud Run, GKE (Kubernetes), Agent Runtime | Docker + Kubernetes, FastAPI † |
Resumen en una imagen
| Etapa | Azure | Google Cloud | Código abierto |
|---|---|---|---|
| Leer documentos | Document Layout skill | Document AI Layout Parser | Docling / Unstructured |
| Vectores | text-embedding-3 | gemini-embedding-001 | BGE-M3 / Qwen3-Embedding |
| Índice | Azure AI Search | Vector Search / Agent Search | Qdrant / Chroma / Weaviate |
| Fusión | RRF automático (k=60) | RRF (rrf_ranking_alpha) | RRF (Qdrant, LangChain) |
| Reranker | Semantic ranker (top 50) | Ranking API (hasta 1000) | reranker bge / Qwen3 / mxbai |
| Modelo | GPT (Azure OpenAI) | Gemini | Llama / Qwen / gpt-oss + vLLM |
| Verificación | Groundedness (Pro en preview) | Check Grounding API | HHEM-Open / MiniCheck |
| Evaluación | Evaluadores de Foundry | Servicio de evaluación | RAGAS / DeepEval / TruLens |
| Producción | Evaluación continua | Online Monitors | Phoenix / MLflow / Langfuse |
Tres diferencias que importan
- Búsqueda híbrida: Azure AI Search incluye la búsqueda por palabras clave. En Google Vector Search tienes que generar tú mismo el vector disperso; si quieres que Google lo administre, usa Agent Search. En código abierto depende de la base de datos.
- Reranker: el de Azure reordena solo el top 50. La Ranking API de Google acepta hasta 1000 chunks y funciona con cualquier buscador, incluso uno externo. En código abierto controlas el modelo, el costo y la latencia, pero también te toca operarlo.
- Evaluación: las dos nubes ya ofrecen evaluación offline y evaluación continua sobre tráfico real, con trazas estándar (OpenTelemetry). En código abierto, RAGAS o DeepEval (offline) más Phoenix, MLflow o Langfuse (producción) cubren lo mismo, pero la integración la haces tú.
Apéndice · Glosario
| Término | Significado sencillo |
|---|---|
| Búsqueda agéntica | Un agente divide la pregunta y hace varias búsquedas |
| BM25 | Algoritmo clásico de búsqueda por palabras clave |
| Chunk | Un pedazo de documento que se indexa por separado |
| Kappa de Cohen | Una medida del acuerdo entre dos evaluadores que descuenta el acuerdo por azar |
| Completitud (completeness) | Que la respuesta no deje fuera información importante |
| Integración continua (CI) | Pruebas automáticas que se ejecutan con cada cambio de código |
| Cross-encoder / bi-encoder | Lee los dos textos juntos / convierte cada texto en un vector por separado |
| Denso / disperso (sparse) | Un vector con todos los valores activos / un vector de términos con peso, casi todos en cero |
| Embedding / vector | Una lista de números que representa el significado de un texto |
| Entra ID | El sistema de identidad y acceso de Microsoft |
| Golden dataset | Un conjunto de preguntas con sus respuestas y documentos correctos |
| GraphRAG | RAG con un grafo de entidades y relaciones |
| Groundedness / faithfulness | Que la respuesta no diga nada que no esté en los documentos |
| Alucinación | Cuando el modelo inventa información |
| HNSW | Una estructura en forma de grafo para encontrar rápido los vectores más cercanos |
| Búsqueda híbrida | Combinar la búsqueda por palabras clave y la búsqueda por significado |
| IAM | El sistema de control de acceso de Google Cloud |
| Índice invertido | Una tabla “palabra → documentos donde aparece” |
| kNN | Encontrar los k vecinos más cercanos |
| Modelo de lenguaje (LLM) | El modelo que escribe la respuesta (GPT, Gemini, Claude, Llama…) |
| Juez LLM | Otro modelo que califica las respuestas |
| MMR | Una técnica para eliminar resultados redundantes |
| MRR | Qué tan arriba aparece el primer resultado correcto |
| nDCG | Calidad del ranking: si los elementos correctos están lo más arriba posible (los evaluadores de Azure lo escriben NDCG) |
| OpenTelemetry | Un estándar abierto para registrar trazas y métricas |
| Parsing | Convertir un archivo (PDF, Word) en texto con estructura |
| Precision@k | Qué fracción de los k primeros resultados es correcta |
| Preview / GA | Función en pruebas / función oficial y estable |
| Cuantización | Comprimir los números de los vectores para ahorrar memoria |
| RAG | Generación aumentada por recuperación: buscar en tus documentos antes de responder |
| Recall@k | Qué fracción de los elementos correctos aparece en los k primeros resultados |
| Reranker | Un modelo que reordena los candidatos leyendo juntos la pregunta y el chunk |
| RRF | Fusión por rango recíproco (reciprocal rank fusion): combinar listas usando solo las posiciones |
| SPLADE / ELSER | Modelos que amplían el texto con términos relacionados (disperso aprendido) |
Apéndice · Referencias
Documentación oficial (consultada el 2026-09-23)
Microsoft Azure
- Semantic ranker: https://learn.microsoft.com/en-us/azure/search/semantic-search-overview
- RRF en la búsqueda híbrida: https://learn.microsoft.com/en-us/azure/search/hybrid-search-ranking
- Búsqueda agéntica: https://learn.microsoft.com/en-us/azure/search/agentic-retrieval-overview
- Document Layout skill: https://learn.microsoft.com/en-us/azure/search/cognitive-search-skill-document-intelligence-layout
- Chunking en Azure AI Search: https://learn.microsoft.com/en-us/azure/search/vector-search-how-to-chunk-documents
- Evaluadores de RAG: https://learn.microsoft.com/en-us/azure/foundry/concepts/evaluation-evaluators/rag-evaluators
- Evaluación continua: https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/continuous-evaluation-agents
Google Cloud
- Ranking API: https://cloud.google.com/generative-ai-app-builder/docs/ranking
- Check Grounding: https://cloud.google.com/generative-ai-app-builder/docs/check-grounding
- Document AI Layout Parser: https://cloud.google.com/document-ai/docs/layout-parse-chunk
- RAG Engine: https://docs.cloud.google.com/gemini-enterprise-agent-platform/build/rag-engine/rag-overview
- Búsqueda híbrida en Vector Search: https://docs.cloud.google.com/gemini-enterprise-agent-platform/build/vector-search/about-hybrid-search
- Embeddings de texto: https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/embeddings/get-text-embeddings
- Online Monitors: https://docs.cloud.google.com/gemini-enterprise-agent-platform/optimize/evaluation/evaluate-online
Elastic
- Búsqueda semántica: https://www.elastic.co/docs/solutions/search/semantic-search
- Búsqueda vectorial: https://www.elastic.co/docs/solutions/search/vector
- semantic_text: https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/semantic-text
- ELSER: https://www.elastic.co/docs/explore-analyze/machine-learning/nlp/ml-nlp-elser
- Retrievers: https://www.elastic.co/docs/reference/elasticsearch/rest-apis/retrievers
Papers e informes
Recuperación
- Gao et al., RAG for LLMs: A Survey, 2023/24 — https://arxiv.org/abs/2312.10997
- Cormack, Clarke, Büttcher, Reciprocal Rank Fusion, SIGIR 2009 — https://dl.acm.org/doi/10.1145/1571941.1572114
- Formal et al., SPLADE, 2021 — https://arxiv.org/abs/2107.05720
- Chen et al., BGE-M3, 2024 — https://arxiv.org/abs/2402.03216
- Khattab & Zaharia, ColBERT, 2020 — https://arxiv.org/abs/2004.12832
- Faysse et al., ColPali, ICLR 2025 — https://arxiv.org/abs/2407.01449
- Gao et al., HyDE, 2022 — https://arxiv.org/abs/2212.10496
- Zheng et al., Step-Back Prompting, ICLR 2024 — https://arxiv.org/abs/2310.06117
- Sarthi et al., RAPTOR, 2024 — https://arxiv.org/abs/2401.18059
- Edge et al., GraphRAG, 2024 — https://arxiv.org/abs/2404.16130
- Microsoft Research, LazyGraphRAG, 2024 — https://www.microsoft.com/en-us/research/blog/lazygraphrag-setting-a-new-standard-for-quality-and-cost/
- Gutiérrez et al., HippoRAG 2, ICML 2025 — https://arxiv.org/abs/2502.14802
- Han et al., RAG vs. GraphRAG, 2025/26 — https://arxiv.org/abs/2502.11371
- Asai et al., Self-RAG, 2023 — https://arxiv.org/abs/2310.11511
- Yan et al., Corrective RAG, 2024 — https://arxiv.org/abs/2401.15884
- Jeong et al., Adaptive-RAG, NAACL 2024 — https://arxiv.org/abs/2403.14403
- Singh et al., Agentic RAG Survey, 2025/26 — https://arxiv.org/abs/2501.09136
- Jin et al., Search-R1, 2025 — https://arxiv.org/abs/2503.09516
- Liu et al., Lost in the Middle, TACL — https://arxiv.org/abs/2307.03172
- Li et al., Self-Route, EMNLP 2024 — https://arxiv.org/abs/2407.16833
- Li et al., LaRA, 2025 — https://arxiv.org/abs/2502.09977
Chunking
- Qu, Tu, Bao (Vectara), Is Semantic Chunking Worth the Computational Cost?, 2024 — https://arxiv.org/abs/2410.13070
- Smith & Troynikov (Chroma), Evaluating Chunking Strategies for Retrieval, 2024 — https://research.trychroma.com/evaluating-chunking
- NVIDIA, Finding the Best Chunking Strategy, 2025 — https://developer.nvidia.com/blog/finding-the-best-chunking-strategy-for-accurate-ai-responses/
- Jimeno Yepes et al., Financial Report Chunking, 2024 — https://arxiv.org/abs/2402.05131
- Günther et al. (Jina), Late Chunking, 2024 — https://arxiv.org/abs/2409.04701
- Anthropic, Contextual Retrieval, 2024 — https://www.anthropic.com/engineering/contextual-retrieval (cifras verificadas en una copia espejo; la página original bloqueó el acceso automatizado)
- Bhat et al., Rethinking Chunk Size, 2025 — https://arxiv.org/abs/2505.21700
- IBM, Docling, 2024 — https://arxiv.org/abs/2408.09869
Reranking
- Nogueira & Cho, monoBERT, 2019 — https://arxiv.org/abs/1901.04085
- Thakur et al., BEIR, 2021 — https://arxiv.org/abs/2104.08663
- Sun et al., RankGPT, 2023 — https://arxiv.org/abs/2304.09542
- Pradeep et al., RankZephyr, 2023 — https://arxiv.org/abs/2312.02724
- Su et al., BRIGHT, 2024 — https://arxiv.org/abs/2407.12883
- Abdallah et al., How Good are LLM-based Rerankers?, 2025 — https://arxiv.org/abs/2508.16757
- Agentset, Cohere Rerank 4, 2025 — https://agentset.ai/blog/cohere-reranker-v4
- Qwen, Qwen3 Embedding & Reranker, 2025 — https://qwenlm.github.io/blog/qwen3-embedding/
- Jina, jina-reranker-v3.5, 2026 — https://arxiv.org/abs/2607.18152
- Mixedbread, mxbai-rerank-v2, 2025 — https://www.mixedbread.com/blog/mxbai-rerank-v2
- Jiang et al., LongLLMLingua, ACL 2024 — https://arxiv.org/abs/2310.06839
Evaluación
- Es et al., RAGAS, 2023 — https://arxiv.org/abs/2309.15217
- Saad-Falcon et al., ARES, NAACL 2024 — https://arxiv.org/abs/2311.09476
- Ru et al. (Amazon), RAGChecker, NeurIPS 2024 — https://arxiv.org/abs/2408.08067
- Gao et al., ALCE, EMNLP 2023 — https://arxiv.org/abs/2305.14627
- Zheng et al., Judging LLM-as-a-Judge, NeurIPS 2023 — https://arxiv.org/abs/2306.05685
- Thakur et al., Support Evaluation TREC 2024, SIGIR 2025 — https://arxiv.org/abs/2504.15205
- Yang et al. (Meta), CRAG benchmark, NeurIPS 2024 — https://arxiv.org/abs/2406.04744
- Islam et al., FinanceBench, 2023 — https://arxiv.org/abs/2311.11944
- Magesh et al. (Stanford), Hallucination-Free?, 2024 — https://arxiv.org/abs/2405.20362
- Vectara, Hallucination Leaderboard — https://github.com/vectara/hallucination-leaderboard
- Bao et al., FaithBench, 2024 — https://arxiv.org/abs/2410.13210
- Vectara, Open RAG Eval — https://github.com/vectara/open-rag-eval
- DeepEval, Metrics — https://deepeval.com/docs/metrics-introduction
- Databricks, Scorers and LLM judges — https://docs.databricks.com/aws/en/mlflow3/genai/eval-monitor/concepts/scorers