Saltar al contenido
Explorar conocimiento

patrón · intermedio · 4 min de lectura

Retrieval

Retrieval es el proceso de encontrar documentos relevantes para una consulta en un sistema RAG. La estrategia de recuperación determina qué información llega al modelo y, por tanto, la calidad de la respuesta generada.

No requiere conocimientos previos.

Alcance en breve

Cubre

  • retrieval as the process of finding relevant documents for an LLM context
  • sparse (BM25), dense (vector), and hybrid retrieval methods
  • precision, recall, latency, and cost trade-offs per method

No cubre

  • fine-tuning retrievers
  • vector database internals
  • chunking strategies (covered separately)

Supone

  • The reader understands RAG, embeddings, and basic search concepts.

Resumen

Retrieval (recuperación) es el componente de un sistema RAG que busca documentos relevantes para una consulta. Existen dos grandes familias: recuperación dispersa (sparse), basada en coincidencia de términos como BM25, y recuperación densa (dense), basada en similitud semántica con vectores de embeddings.

La elección entre una y otra — o su combinación — afecta directamente qué información recupera el sistema, qué tan rápido lo hace, y qué tan bien responde a consultas que usan vocabulario diferente al de los documentos indexados.

Alcance y supuestos

Este paquete cubre recuperación dispersa (BM25), densa (vector), e híbrida, con sus trade-offs de precisión, recall, latencia y costo.

No cubre fine-tuning de retrievers, implementación interna de índices vectoriales, ni estrategias de chunking o re-ranking. Asume que entiendes RAG, embeddings y búsqueda básica.

Modelo mental

Piensa en dos formas de buscar en una biblioteca. La primera es buscar palabras exactas en los índices (recuperación dispersa). Encuentra exactamente lo que pediste, pero si usas sinónimos o términos diferentes, el libro no aparece.

La segunda es pedirle a un bibliotecario que entiende el tema (recuperación densa). Lees "devoluciones" y el bibliotecario te lleva a la sección de reembolsos, aunque la palabra "devolución" no esté en los libros. Es más flexible, pero puede traerte libros que solo se parecen superficialmente.

Uso práctico

Usa el método según el tipo de consulta y contenido:

  • ✅ BM25 para dominios con vocabulario especializado y términos exactos (códigos médicos, legales, SKUs).
  • ✅ Vector (dense) para contenido variado donde el significado importa más que las palabras exactas.
  • ✅ Híbrido cuando necesitas lo mejor de ambos: precisión de términos + flexibilidad semántica.
  • ❌ Solo vector si tu dominio tiene términos técnicos clave que la semántica no captura bien.
  • ❌ Solo BM25 si el contenido cambia rápido y no puedes re-indexar embeddings frecuentemente.

Ejemplo trabajado: recuperación híbrida en un sistema de soporte

Un sistema de soporte combina BM25 para términos exactos (modelos de producto, errores) con búsqueda semántica para descripciones:

interface SearchResult {
  id: string;
  text: string;
  score: number;
}

async function hybridSearch(query: string, k = 5): Promise<SearchResult[]> {
  // Búsqueda por términos exactos (BM25)
  const keywordResults: SearchResult[] = await bm25Search(query, k);

  // Búsqueda semántica (vector)
  const queryVector = await embeddingModel.embed(query);
  const vectorResults: SearchResult[] = await vectorSearch(queryVector, k);

  // Fusión por Reciprocal Rank Fusion (RRF)
  const rrfScores = new Map<string, number>();

  for (const [rank, results] of [keywordResults, vectorResults].entries()) {
    results.forEach((r, i) => {
      const score = 1 / (60 + rank * k + i); // RRF: rank = posición en lista
      rrfScores.set(r.id, (rrfScores.get(r.id) || 0) + score);
    });
  }

  return [...rrfScores.entries()]
    .sort((a, b) => b[1] - a[1])
    .slice(0, k)
    .map(([id]) =>
      [...keywordResults, ...vectorResults].find(r => r.id === id)!
    );
}

La combinación captura consultas como "error 503 en el login" donde "503" y "login" son términos exactos pero la solución podría describirse con vocabulario diferente.

Evidencia

Fuentes citadas