WeKnora: respuestas sustentadas, memoria acotada y operación consciente
Memoria de WeKnora: corrige los candidatos antes de ajustar relevancia
Analiza búsqueda vectorial acotada, crecimiento del conjunto y fusión de rangos mediante una memoria relevante de baja importancia.
Qué aprenderás
- Un elemento excluido nunca puede ganar
- Ampliar candidatos conserva alcance e identidad
- Fusiona rangos y aplica el presupuesto
Antes de empezar
- Conceptos básicos de HTTP y contenedores
- Documentos, pasajes y proveedores de modelos
Separar ingesta, recuperación, respaldo y alcance de memoria para diseñar aceptación basada en evidencia.
Conclusiones clave
- Elegir candidatos puede imponer un límite oculto.
- Ampliar búsqueda debe conservar identidad y ciclo de vida.
- Fusionar rangos evita sumar escalas incompatibles.
Un elemento excluido nunca puede ganar
El método inspeccionado busca el conjunto vectorial del sujeto, no solo vectores de una ventana elegida por importancia. SQL filtra espacio, identidad, modelo, dimensiones, estado activo, caducidad y tipos opcionales antes de ordenar por distancia. La relevancia no puede recuperar lo descartado antes de considerar la pregunta.
Imagina una nota importante pero poco relacionada y otra de baja importancia que responde exactamente. Recortar primero a la nota importante impide que la segunda compita. Nuestra regresión sintética asigna puntuaciones para mostrar el problema; no mide embeddings reales ni reproduce el motor SQL.
Ampliar candidatos conserva alcance e identidad
El repositorio calcula distancia en base si dispone de la columna vectorial; en caso contrario transfiere vectores y puntúa en proceso, con un límite defensivo de 5000 filas. No es búsqueda ilimitada entre espacios. Los filtros de identidad y ciclo de vida permanecen, y los elementos se cargan mediante el repositorio acotado.
mergeVectorHits incorpora coincidencias semánticas ausentes y devuelve índices sobre el mismo conjunto compartido. Omite IDs excluidos y copia antes de añadir por primera vez para no sobrescribir el array de respaldo del llamador. Buscar más ampliamente sin ampliar el conjunto de fusión perdería la mejora.
Fusiona rangos y aplica el presupuesto
El servicio usa fusión recíproca de rangos léxicos y vectoriales. Esta revisión suma 1/(60+rank), empezando rank en cero, y conserva orden estable en empates. No suma conteos léxicos y similitud coseno directamente porque esas escalas no son comparables.
Doce pruebas verifican nuestro modelo didáctico: filtros, ventana antigua, umbral, crecimiento, exclusiones, estabilidad y conservación de entradas. No ejecutan Go upstream, SQL, halfvec ni integración. Un comentario léxico antiguo aún dice que la recuperación es solo léxica; la ruta vectorial actual demuestra por qué un comentario aislado no define el comportamiento vigente.
Cómo elegir
| Criterio | Opción A | Opción B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
Pasos de implementación
- 1
Sigue el conjunto previo a puntuación.
- 2
Verifica filtros antes del orden.
- 3
Incluye coincidencias solo semánticas en la fusión.
- 4
Prueba relevancia de baja importancia y señuelos fuera de alcance.
Ejemplo para copiar
const importantWindow = [{id: "popular", importance: 10, similarity: 0.55}];
const omittedMatch = {id: "relevant", importance: 1, similarity: 0.98};
// Ejemplo sintético: puntuar solo importantWindow no recupera omittedMatch.
const fullScope = [...importantWindow, omittedMatch];
const ranked = fullScope.toSorted((a, b) => b.similarity - a.similarity);
console.log(ranked[0].id); // relevant; no es un benchmark de embeddingsPreguntas frecuentes
¿Un embedding mejor rescata un candidato excluido?
No. Lo que nunca se puntúa no puede ganar por relevancia.
¿Las doce pruebas usaron PostgreSQL?
No. Ejecutan un modelo sintético JavaScript, no Go ni base de datos.
Fuentes
- WeKnora / internal/application/repository/memory_vector.goFuente verificada 2026-09-14
- WeKnora / internal/application/service/memory/vector.goFuente verificada 2026-09-14
- WeKnora / internal/application/service/memory/recall_trace.goFuente verificada 2026-09-14
- WeKnora / internal/application/service/memory/search.goFuente verificada 2026-09-14
- WeKnora / internal/application/service/memory/lexical.goFuente verificada 2026-09-14