Estrategias de recuperación avanzadas
Más allá de la búsqueda semántica básica: reranking con cross-encoders, HyDE, reescritura de consultas y descomposición en sub-preguntas.
Contenido de Curso Premium
Esta lección es parte de un curso premium. Mejora a Pro para desbloquear todos los cursos premium y su contenido.
- Acceso a todos los cursos premium
- Más de 1000 plantillas de skills de IA incluidas
- Contenido nuevo cada semana
🔄 En la lección anterior almacenaste vectores y aprendiste búsqueda híbrida. Pero la búsqueda básica — incluso la híbrida — tiene un problema: devuelve los fragmentos más similares, no necesariamente los más relevantes.
La diferencia es sutil pero crítica. Un fragmento puede ser semánticamente similar a tu consulta sin contener la respuesta que necesitas.
Lo que aprenderás
Al terminar esta lección conocerás las técnicas avanzadas de recuperación que separan un RAG de prototipo de uno de producción: reranking, HyDE y reescritura de consultas.
El pipeline de recuperación completo
Consulta del usuario
↓
1. Reescritura de consulta (opcional)
↓
2. Búsqueda híbrida (BM25 + semántica) → top 20-50 candidatos
↓
3. Reranking (cross-encoder) → top 3-5 fragmentos
↓
4. Inyección en prompt → LLM genera respuesta
La búsqueda inicial es el filtro grueso — rápido pero impreciso. El reranking es el filtro fino — lento pero preciso. Juntos, tienes velocidad Y precisión.
Reranking: El filtro fino
¿Por qué la búsqueda vectorial no es suficiente?
Los bi-encoders (modelos de embedding) generan vectores para la consulta y los documentos por separado. Luego comparan distancias. Es rápido porque los vectores de documentos se calculan una vez. Pero pierde matices.
Los cross-encoders evalúan la consulta y cada documento juntos como un par. Es más lento, pero entiende relaciones más sutiles.
| Tipo | Velocidad | Precisión | Cuándo se usa |
|---|---|---|---|
| Bi-encoder (embedding) | Milisegundos | Buena | Filtro inicial (top 50) |
| Cross-encoder (reranking) | ~50ms por par | Excelente | Reordenar top 20-50 |
El impacto real
Estudios de 2025 (Databricks, Pinecone) muestran:
- Reranking mejora la calidad de recuperación hasta un 48%
- Consistente mejora en NDCG@10 (métrica estándar de ranking) en todos los dominios testeados
- El costo computacional es manejable: reordenar 20 documentos toma ~1 segundo
En la práctica
# Pipeline: búsqueda inicial → reranking
from sentence_transformers import CrossEncoder
# 1. Búsqueda vectorial amplia (top 20)
candidates = vector_db.search(query_embedding, limit=20)
# 2. Reranking con cross-encoder
reranker = CrossEncoder("cross-encoder/ms-marco-MiniLM-L-12-v2")
pairs = [(query, doc.content) for doc in candidates]
scores = reranker.predict(pairs)
# 3. Reordenar por score del cross-encoder
reranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
top_docs = reranked[:5] # Los 5 mejores
✅ Quick Check: ¿Por qué no usamos el cross-encoder directamente en toda la base de datos, sin la búsqueda vectorial inicial? (Porque el cross-encoder evalúa cada par consulta-documento individualmente. Con 1 millón de documentos, serían 1 millón de evaluaciones — horas de procesamiento por consulta. El bi-encoder filtra a 20-50 candidatos en milisegundos, y el cross-encoder refina esos pocos. Es la combinación de ambos lo que funciona.)
HyDE: Búsqueda por respuesta hipotética
HyDE (Hypothetical Document Embeddings) invierte la lógica de búsqueda de una forma sorprendente.
El problema con las consultas
Las preguntas y los documentos se ven muy diferentes:
- Consulta: “¿Cuáles son los plazos de devolución?”
- Documento: “El plazo máximo para devoluciones es de 30 días naturales a partir de la fecha de compra.”
La pregunta es corta e interrogativa. El documento es largo y declarativo. La similitud entre ambos es menor de lo que esperarías.
La solución de HyDE
- Le pides al LLM que genere una respuesta hipotética (sin acceso a los documentos)
- Esa respuesta se convierte en un embedding
- Buscas documentos similares a la respuesta, no a la pregunta
Consulta: "¿Cuáles son los plazos de devolución?"
↓
LLM genera respuesta hipotética:
"Los plazos de devolución suelen ser de 30 días naturales
a partir de la fecha de compra..."
↓
Embedding de la respuesta hipotética
↓
Búsqueda vectorial → Encuentra documentos similares a esa respuesta
¿Por qué funciona? La respuesta hipotética se parece mucho más a los documentos reales que la pregunta original. Respuesta-a-documento es más similar que pregunta-a-documento.
Cuándo usar HyDE
- Consultas de usuarios finales (cortas, coloquiales)
- Dominios donde las preguntas y documentos usan vocabulario diferente
- Sin necesidad de fine-tuning del modelo de embeddings
Cuándo NO usar HyDE:
- Si el LLM no tiene idea del tema (la respuesta hipotética será tan mala que los resultados serán peores)
- Consultas muy específicas con términos técnicos exactos — la búsqueda por keywords es mejor
Reescritura de consultas
A veces el problema no es la búsqueda — es la consulta.
Consulta original vs consulta reescrita
| Consulta del usuario | Problema | Consulta reescrita |
|---|---|---|
| “eso no funciona” | Ambigua, sin contexto | “El proceso de devolución online da error al enviar el formulario” |
| “precio comparado” | Incompleta | “Comparar precio del plan básico vs plan premium mensual” |
| “RGPD datos” | Telegráfica | “¿Qué requisitos de protección de datos personales establece el RGPD?” |
Cómo implementarlo
rewrite_prompt = """
Reescribe la siguiente consulta para hacerla más específica
y adecuada para búsqueda en una base de conocimiento.
Consulta original: {query}
Consulta reescrita:
"""
El LLM reescribe la consulta antes de la búsqueda. Cuesta una llamada extra al LLM (~100 tokens), pero la mejora en recuperación lo justifica para consultas ambiguas.
Descomposición en sub-preguntas
Para consultas complejas:
Consulta: "¿Cómo se compara el plan básico vs premium
en precio, soporte y límites de uso?"
Sub-preguntas:
1. "¿Cuál es el precio del plan básico?"
2. "¿Cuál es el precio del plan premium?"
3. "¿Qué soporte incluye el plan básico vs premium?"
4. "¿Cuáles son los límites de uso de cada plan?"
Cada sub-pregunta busca en la base de conocimiento por separado. Los resultados se combinan para una respuesta integral.
Combinando técnicas
No todas las consultas necesitan todo el pipeline. Usa esta guía:
| Tipo de consulta | Técnicas recomendadas |
|---|---|
| Simple y específica | Búsqueda híbrida + top 5 |
| Ambigua o corta | Reescritura → búsqueda híbrida + reranking |
| Conceptual | HyDE → búsqueda vectorial + reranking |
| Multi-aspecto | Descomposición → búsqueda por sub-pregunta → síntesis |
| Términos técnicos exactos | Búsqueda por keywords (BM25) primero |
Puntos clave
- Reranking con cross-encoders mejora la calidad de recuperación hasta 48% — es el upgrade más impactante después de la búsqueda híbrida
- HyDE invierte la lógica: busca documentos similares a una respuesta hipotética, no a la pregunta — funciona bien para consultas coloquiales
- La reescritura de consultas arregla consultas ambiguas o telegráficas antes de la búsqueda
- La descomposición divide consultas complejas en sub-preguntas que se recuperan por separado
- No todas las consultas necesitan todas las técnicas — adapta el pipeline al tipo de consulta
Siguiente lección
Recuperaste los fragmentos correctos. Ahora: ¿cómo haces que el LLM genere una respuesta confiable basada en ellos? En la siguiente lección: generación y anclaje — prompts para RAG, citaciones y prevención de alucinaciones.
Comprobación de Conocimientos
Primero completa el quiz de arriba
¡Lección completada!