Fusiono BM25 y búsqueda vectorial en vez de elegir uno.
- Trabajo
- Búsqueda híbrida sobre un catálogo de precios
- Rol
- Diseño de la arquitectura y construcción
- Periodo
- 2025 — 2026
- Búsqueda híbrida
- RAG
- MCP
- FastAPI
Un catálogo de 73 productos con 537 fechas y 37,893 filas de precios, y un equipo que preguntaba por él en lenguaje natural. La búsqueda por palabra clave fallaba en cuanto la consulta mezclaba un producto con un periodo. Diseñé y construí el sistema completo: indexación, recuperación, evaluación y la superficie por la que se consume.
La búsqueda por palabra clave fallaba en las consultas que mezclaban producto y periodo, y la puramente vectorial perdía los códigos exactos. Fusiono las dos con Reciprocal Rank Fusion y evalúo el resultado contra un gold set de 32 casos que redacté yo, de los que 29 puntúan para recall.
El sistema expone 8 herramientas por un servidor MCP y 13 rutas por FastAPI, sobre un dominio de 73 productos, 537 fechas y 37,893 filas de precios.
Este sistema no es el buscador de esta página. El de aquí lo escribí para este sitio y es mucho más chico: 39 pasajes contra 9,281 fragmentos, y sin piso determinista. Ya tiene gold set propio, de 26 preguntas, y sus cifras están más abajo en la portada. PrecioVivo corre sobre un catálogo de precios, no sobre mi CV.
Papaya devuelve papa, y no lo arreglé en recuperación
Preguntar por un producto que no está en el catálogo devuelve el más parecido por nombre. Papaya puntúa 0.6444 y papa 0.6656: dos centésimas. Probé el umbral obvio y no funciona, porque cualquier corte que las separe mata las preguntas agregadas, que puntúan 0.5151. Lo resolví avisando al modelo desde el filtro léxico, que ya sabía que ninguna palabra coincidía con el catálogo. La evaluación sigue reportando las dos violaciones: no relajé el gold set. ↗
El recall@10 vale dentro del dominio indexado
El gold set son 32 casos que redacté yo sobre 73 productos y 537 fechas. Es una muestra pequeña y de autor único: sirve para detectar regresiones, no para afirmar que el sistema generaliza. ↗