¿Necesitas embeddings? Una guía de decisión
Señales de que la búsqueda léxica sobre metadatos curados te alcanza, señales de que de verdad quieres vectores, y una prueba con gold set de cincuenta consultas para zanjarlo en tu corpus antes de pagar infra.

"¿Deberíamos montar un servicio de embeddings?" es una decisión de infraestructura que la mayoría de los equipos toma por defecto y no por evidencia. Aquí están las señales que apuntan en cada dirección, y una prueba que puedes correr en tu propio corpus en una tarde, antes de que llegue cualquier factura.
Señales de que BM25 sobre metadatos curados alcanza
Tus consultas nombran cosas. Servicios, códigos de error, nombres de proyectos, personas, SKUs. La búsqueda léxica es más fuerte exactamente donde las consultas contienen nombres, y dentro de una empresa la mayoría los contiene.
Tienes metadatos curados, o puedes producirlos. Títulos, alias y resúmenes cortos le dan a BM25 algo denso de dónde agarrarse. En nuestra medición, ponderar los campos curados (título, alias) cerró por completo la brecha con la búsqueda híbrida: recall@5 = 1.00 a 1.3 ms p95, BM25 sobre SQLite, sin embeddings, sin base de datos vectorial, sin GPU.
Quien llama es un agente, no una persona. Los agentes reformulan y reintentan a costo insignificante, y en una arquitectura de entrar y caminar la búsqueda solo tiene que abrir la puerta correcta; la caminata por los nodos enlazados hace el resto.
Un idioma dominante tanto en el corpus como en las consultas.
Señales de que quieres vectores
Humanos tecleando paráfrasis. Los usuarios finales describen en lugar de nombrar, y comparten poco vocabulario con tus documentos.
Recuperación entre idiomas. La consulta llega en un idioma, los documentos viven en otro.
Sin metadatos y sin presupuesto de escritura. Cuerpos crudos troceados, sin títulos que valga la pena ponderar, no le dejan nada a la búsqueda léxica de dónde agarrarse.
Deriva de vocabulario que no puedes resolver con alias. Un dominio donde el mismo concepto recibe diez nombres de diez equipos.
Cuando varias de estas se cumplen a la vez, los embeddings no son overhead. Son la herramienta correcta, y fingir lo contrario sería fingir que nuestra carga de trabajo es la de todos.
La prueba: una tarde, no una migración
- Arma un gold set. Cincuenta consultas reales, sacadas de logs de búsqueda o de colegas, cada una emparejada con el documento que debería responderla.
- Corre la búsqueda léxica que ya tienes. SQLite FTS5 o tsvector de Postgres, una noche de setup. Pondera los campos de título y alias por encima del cuerpo; en nuestra medición, esa ponderación fue toda la diferencia.
- Mide recall@5. Si el documento objetivo aparece en el top cinco casi siempre, un embedder estaría mejorando un número al que casi no le queda margen en la etapa de entrada.
- Solo entonces prueba híbrido. Agrega un modelo de embeddings, vuelve a correr el mismo gold set y ponle precio al delta medido contra la infraestructura permanente que requiere: el servicio, el índice, el pipeline de reembebido.
Una nota de honestidad: nuestros números salen de nuestro corpus y nuestros conjuntos de preguntas, y los publicamos como tales, harness incluido. La afirmación no es que tu corpus va a llegar a 1.00. La afirmación es que esto es medible con tus propios datos antes de que se mueva el dinero.
Dónde se para MonkeyLLM
El default es el extremo barato. La búsqueda de entrada es BM25 sobre SQLite, ponderada sobre el pasaporte de cada nodo (una ficha curada: título, resumen, tags), y esos pasaportes se producen automáticamente en la ingesta: 1.71 s por documento, con el 100% de los resúmenes pasando un contrato de sesenta tokens. El embedder es opcional y soportado, no eliminado: apunta un binding de modelo a cualquier endpoint de embeddings compatible con OpenAI y la búsqueda de entrada se vuelve híbrida, sin cambio de esquema.
La medición detrás de ese default, y el argumento más largo, está en BM25 sobre SQLite vs una base de datos vectorial.
Córrela en tu corpus
La prueba del gold set cuesta una tarde y zanja la discusión con tus propios datos. Si el número léxico aguanta, despliega un bosque en cuatro comandos, mantén todo en tu propio hardware y sáltate la línea de embeddings del presupuesto hasta que se gane su lugar. Código en github.com/JimmyWesley/MonkeyLLM, todo lo demás en monkeyllm.com.