Por que tu busqueda con IA puede estar perdiendo respuestas obvias (y como RRF lo soluciona)
Cuando tu IA dice "no se encontro informacion relevante" mientras la respuesta esta literalmente en tus mensajes, el problema no es la IA — es como la busqueda hibrida combina diferentes metodos de ranking.
Recientemente encontramos un bug desconcertante que ilustra perfectamente por que los sistemas de busqueda hibrida pueden fallar de maneras sorprendentemente obvias. Un usuario le hizo una pregunta simple a su asistente de IA, y a pesar de tener la respuesta exacta en su historial de chat, la IA afirmo con confianza que dicha informacion no existia.
IA Perdiendo Respuestas Obvias
"¿Que fecha debia poner en el acuerdo?"
Revise tus mensajes, y no hay mencion en ningun lugar de que fecha debias poner en el acuerdo — ninguno de los mensajes recuperados hace referencia a una fecha de firma.
La causa raiz: Desajuste en la escala de puntuaciones
Nuestro sistema usa busqueda hibrida — combinando dos metodos de busqueda diferentes para obtener lo mejor de ambos mundos:
- Busqueda Vectorial (Semantica): Entiende significado y contexto. Ideal para "encontrar mensajes sobre terminos del contrato" incluso si la palabra "contrato" no se usa.
- BM25 (Palabras Clave): Coincidencia clasica de texto. Perfecto para encontrar frases exactas como "1 de febrero" o nombres especificos.
¿El problema? Estos metodos usan escalas de puntuacion completamente diferentes:
Desajuste en la Escala de Puntuaciones
| Tipo de Busqueda | Mensaje Encontrado | Puntuacion | Ranking Final |
|---|---|---|---|
| VECTOR | "Segun el acuerdo... Exclusividad en Nigeria" | 0.65 | #1Respuesta incorrecta |
| VECTOR | "Ok. Voy a contrafirmar y enviar de vuelta" | 0.58 | #2Respuesta incorrecta |
| BM25 | "1 de febrero estaria genial" | 0.016 | #47Correcta pero enterrada! |
El problema: Las puntuaciones de BM25 (0.016) son 40x mas pequenas que las de Vector (0.65). Al ordenar por puntuacion cruda, las coincidencias por palabras clave siempre pierden — incluso cuando son la respuesta correcta!
Cuando el usuario pregunto "¿Que fecha debo poner en el acuerdo?", BM25 encontro correctamente el mensaje "1 de febrero" en el puesto #1 (coincidio con las palabras clave exactas). Pero la busqueda vectorial lo clasifico en el puesto #47 porque semanticamente, hablar sobre una fecha no se relaciona fuertemente con discusiones generales sobre "acuerdos".
Como estabamos ordenando por puntuacion cruda, el 0.65 del Vector le ganaba al 0.016 de BM25 cada vez. La respuesta correcta quedo enterrada en la posicion #47, y solo los 10 primeros resultados se enviaron a la IA.
La solucion: Reciprocal Rank Fusion (RRF)
La solucion es elegante: en lugar de comparar puntuaciones crudas, comparar rankings. Esto se llama Reciprocal Rank Fusion (RRF), y la formula es maravillosamente simple:
Por que funciona: Estar en el puesto #1 en cualquier metodo de busqueda contribuye de igual manera a la puntuacion final. La constante 60 (llamada "k") amortigua el efecto de los rankings mas bajos para que el #1 sea significativamente mejor que el #2, pero el #47 no sea muy diferente del #48.
Antes vs Despues de RRF
Como RRF calcula la puntuacion final
Sigamos la matematica para nuestro mensaje "1 de febrero":
| Metodo de Busqueda | Ranking | Contribucion RRF |
|---|---|---|
| BM25 (palabras clave) | #1 | 1/(60+1) = 0.0164 |
| Vector (semantica) | #47 | 1/(60+47) = 0.0093 |
| Puntuacion RRF Total | 0.0257 | |
Comparemos eso con el mensaje "Exclusividad en Nigeria" que antes era el #1:
| Metodo de Busqueda | Ranking | Contribucion RRF |
|---|---|---|
| Vector (semantica) | #1 | 1/(60+1) = 0.0164 |
| BM25 (palabras clave) | No encontrado | 1/(60+max) = ~0 |
| Puntuacion RRF Total | 0.0164 | |
El mensaje que era #1 en un metodo de busqueda (0.0257) ahora supera al mensaje que era #1 en un metodo de busqueda pero no aparecia en el otro (0.0164). Justo es justo.
La clave
"RRF no se preocupa por las puntuaciones crudas. Solo le importa el orden. Estar en el puesto #1 en busqueda por palabras clave tiene el mismo peso que estar en el puesto #1 en busqueda semantica. Los resultados encontrados por ambos metodos se clasifican mas alto."
¿Que pasa cuando un resultado solo aparece en una busqueda?
Para el metodo de busqueda donde un resultado no aparece, le asignamos un "ranking maximo" (el numero total de resultados + 1). Esto significa:
- Resultados en ambas busquedas: Obtienen contribuciones de ambas, se clasifican mas alto
- Resultados en una busqueda: Obtienen contribucion de una, mas contribucion minima de la otra
- Empates del mismo metodo: Decididos por su ranking en el otro metodo
Esto maneja elegantemente el caso donde la busqueda semantica encuentra mensajes conceptualmente relacionados que la busqueda por palabras clave pierde (y viceversa).
Detalles de implementacion
El cambio de codigo fue directo. En lugar de:
// VIEJO: Ordenar por puntuacion cruda (roto) results.sort((a, b) => b.score - a.score);
Ahora hacemos:
// NUEVO: Calcular puntuacion RRF desde rankings const RRF_K = 60; const vectorRank = vectorRanks.get(id) ?? maxRank; const bm25Rank = bm25Ranks.get(id) ?? maxRank; const rrfScore = 1/(RRF_K + vectorRank) + 1/(RRF_K + bm25Rank); // Ordenar por puntuacion RRF results.sort((a, b) => b.rrfScore - a.rrfScore);
Por que esto importa para la busqueda con IA
Los sistemas de busqueda modernos a menudo combinan multiples metodos de recuperacion:
- Embeddings vectoriales para comprension semantica
- BM25/TF-IDF para coincidencias exactas de palabras clave
- Recuperacion basada en grafos para busqueda consciente de relaciones
- Senales temporales para recencia
Cada metodo tiene diferentes distribuciones de puntuacion. RRF proporciona una forma fundamentada de combinarlos sin necesidad de normalizar puntuaciones o ajustar esquemas de ponderacion complejos.
"La belleza de RRF es su simplicidad. Sin ajuste de hiperparametros mas alla del valor k (60 funciona bien en la practica). Sin normalizacion de puntuaciones. Solo rankings y una formula."
El resultado
Despues de implementar RRF, la misma consulta "¿Que fecha debo poner en el acuerdo?" ahora recupera correctamente el mensaje "1 de febrero" en la parte superior de los resultados. La IA encuentra la respuesta inmediatamente.
Arreglado: Los mensajes con coincidencias exactas de palabras clave ahora se clasifican apropiadamente junto con resultados semanticamente similares. La respuesta correcta sube a la cima.
Conclusiones clave
- No compares puntuaciones crudas entre diferentes metodos de busqueda — viven en escalas diferentes
- RRF convierte puntuaciones a rankings, haciendo posible la comparacion equitativa
- La constante k=60 esta bien establecida en la investigacion y funciona en la mayoria de los casos
- Los resultados en multiples metodos de busqueda naturalmente se clasifican mas alto — lo cual es generalmente correcto
A veces la solucion para un comportamiento confuso de la IA no esta en la IA misma — esta en como le alimentas la informacion.
¿Quieres una busqueda con IA mas inteligente para tus conversaciones?
Querygen usa busqueda hibrida avanzada con RRF para asegurar que nunca pierdas informacion importante en tus mensajes de WhatsApp.
Prueba Querygen Gratis