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));Para profundizar: la guía relacionada →
¿Esto en producción, con tus datos? Hablemos 15 minutos →