Ingeniería LLM · Media · 12 min

Recupera los k documentos más parecidos

El paso de recuperación de un RAG: ordena los documentos por similitud con la consulta y quédate con los k primeros, con desempates estables.

Escribe topK(query, docs, k) que devuelva un array con los id de los k documentos más parecidos a query, del más parecido al menos. Cada documento es { id, vector }.

Usa cosine(a, b), que ya está definida. Si dos documentos empatan en similitud, va primero el de id menor en orden alfabético. No modifiques docs. Si k es mayor que el número de documentos, devuélvelos todos; si es 0, devuelve [].

DOCS y QUERY contienen un índice de ejemplo con embeddings de 3 dimensiones.

Retos 0/4

  • Devuelve los 3 más parecidos en orden
  • Desempata por id (guia-ollama y ollama-api tienen la misma similitud)
  • No cambia el orden de DOCS
  • Con k mayor que el índice devuelve todo; con k = 0, nada

function topK(query, docs, k) {
  // puntúa cada doc con cosine(query, doc.vector), ordena de mayor a menor, desempata por id y toma k
  return docs.slice(0, k).map((d) => d.id);
}

console.log(topK(QUERY, DOCS, 3));
La consola aparece aquí (console.log).

Para profundizar: la guía relacionada →

¿Esto en producción, con tus datos? Hablemos 15 minutos →