Las notas se acumulan y dejan de leerse. Un asistente sin fuentes inventa.
grep encuentra palabras, no respuestas. No puede decirte qué se decidió sobre X, ni dónde está escrito.
Un asistente de chat puede inventar una fuente. Responde incluso cuando tus notas no dicen nada.
Quieres la evidencia, no una conjetura. El archivo exacto y las líneas exactas, o un honesto «no se encontró nada».
Fuente: core/README.md, introducción.
Pregunta a tus notas Markdown. Obtén el pasaje, con sus líneas.
Una pregunta que las notas cubren
$ knowman search "why Postgres" decision-log.md:L5-L5 We chose Postgres with the pgvector extension for the vector store. architecture-notes.md:L5-L6 The store module is the only part of the codebase that speaks SQL. Every other module calls its functions instead of touching Postgres directly.
Una pregunta que no
$ knowman search "capital of mongolia"
No evidence found for that query.
Con un modelo de lenguaje configurado, ask redacta prosa a partir de esos mismos pasajes y los lista como fuentes. Sin uno, igual obtienes las citas.
Corre en tu máquina: Postgres con pgvector, Ollama para los embeddings, sin clave de API.
Un observador alimenta una cola. Una pregunta se empareja por distancia.
Ingesta
Consulta
Cada fragmento conserva el rango de líneas del que salió; eso es lo que hace exacta una cita. Si nada está dentro del umbral de distancia, el resultado es el negativo explícito y nunca se llama al modelo de lenguaje.
Diagrama completo: architecture.html · Fuente: core/README.md, sección How it works.
La recuperación se mide. Ningún modelo juzga a otro modelo.
groundedness sobre un dataset etiquetado de 25 preguntas.
$ knowman eval
groundedness: 100.00% (25/25), delta: +0.00%
Una tasa de acierto. Una pregunta pasa cuando el archivo citado es el esperado, o cuando no se devuelve evidencia para una pregunta que no tiene.
Cada corrida se guarda. La siguiente reporta el cambio desde la última, así que una regresión aparece como una caída.
Ya encontró un bug. Un encabezado suelto se volvió su propio fragmento y coincidía con preguntas sin relación; la evaluación lo detectó.
Fuentes: core/README.md, core/src/knowman/evaldata/dataset.json, core/CHANGELOG.md. El corpus de muestra es pequeño; esto es un chequeo de regresión, no un benchmark.
Un script. Comprueba y no instala nada con privilegios elevados.
Con Docker
git clone https://github.com/rdorta27/knowman cd knowman ./install.sh docker compose exec api \ knowman search "why Postgres"
Necesita Docker y el plugin de Compose; sin Python en el host.
Sin Docker (Arch)
./install.sh --mode native
Usa Postgres, pgvector y Ollama en el host. El script imprime los comandos exactos de pacman y systemctl de lo que falta y se detiene; ejecútalos y vuelve a correrlo.
Ambos modos usan los mismos puertos, atados a 127.0.0.1.
Fuente: core/README.md, core/docs/running.md. El instalador indexa las notas de muestra y confirma que una búsqueda real devuelve una cita real.
Lo que no es, y lo que viene.
Límites
- Solo Markdown. No es un editor de notas ni un wiki; lee una carpeta que ya es tuya.
- Los embeddings necesitan Ollama. Cambiar el modelo de embeddings obliga a reindexar todo.
- Los modelos locales pequeños dudan. La respuesta es tan buena como el modelo que configures.
- Abierto por defecto. El token de la API y el límite de tasa son opcionales; actívalos antes de exponerlo más allá de localhost.
Siguiente
Una URL de demo pública en infraestructura cloud gratuita, con recuperación y citas funcionando sin ninguna clave de pago.
core/README.md, RoadmapPruébalo: github.com/rdorta27/knowman