As notas se acumulam e deixam de ser lidas. Um assistente sem fontes inventa.
grep encontra palavras, não respostas. Ele não diz o que foi decidido sobre X, nem onde isso está escrito.
Um assistente de chat pode inventar uma fonte. Ele responde mesmo quando as suas notas não dizem nada.
Você quer a evidência, não um chute. O arquivo exato e as linhas exatas, ou um honesto «nada encontrado».
Fonte: core/README.md, introdução.
Pergunte às suas notas Markdown. Receba o trecho, com as linhas.
Uma pergunta que as notas cobrem
$ 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.
Uma pergunta que elas não cobrem
$ knowman search "capital of mongolia"
No evidence found for that query.
Com um modelo de linguagem configurado, ask escreve prosa a partir desses mesmos trechos e os lista como fontes. Sem ele, você ainda recebe as citações.
Roda na sua máquina: Postgres com pgvector, Ollama para os embeddings, nenhuma chave de API.
Um observador alimenta uma fila. Uma pergunta é pareada por distância.
Ingestão
Consulta
Cada trecho mantém o intervalo de linhas de onde veio; é isso que torna uma citação exata. Se nada estiver dentro do limite de distância, o resultado é o negativo explícito e o modelo de linguagem nunca é chamado.
Diagrama completo: architecture.html · Fonte: core/README.md, seção How it works.
A recuperação é medida. Nenhum modelo julga outro modelo.
groundedness em um dataset rotulado de 25 perguntas.
$ knowman eval
groundedness: 100.00% (25/25), delta: +0.00%
Uma taxa de acerto. Uma pergunta passa quando o arquivo citado é o esperado, ou quando nenhuma evidência é devolvida para uma pergunta que não tem.
Cada execução é guardada. A seguinte informa a mudança desde a última, então uma regressão aparece como queda.
Já pegou um bug. Um título sozinho virou o próprio trecho e casava com perguntas sem relação; a avaliação encontrou.
Fontes: core/README.md, core/src/knowman/evaldata/dataset.json, core/CHANGELOG.md. O corpus de exemplo é pequeno; isto é uma checagem de regressão, não um benchmark.
Um script. Ele verifica e não instala nada com privilégios elevados.
Com Docker
git clone https://github.com/rdorta27/knowman cd knowman ./install.sh docker compose exec api \ knowman search "why Postgres"
Precisa de Docker e do plugin do Compose; sem Python no host.
Sem Docker (Arch)
./install.sh --mode native
Usa Postgres, pgvector e Ollama no host. O script imprime os comandos exatos de pacman e systemctl do que falta e para; execute-os e rode de novo.
Os dois modos usam as mesmas portas, presas a 127.0.0.1.
Fonte: core/README.md, core/docs/running.md. O instalador indexa as notas de exemplo e confirma que uma busca real devolve uma citação real.
O que ele não é, e o que vem depois.
Limites
- Só Markdown. Não é um editor de notas nem um wiki; ele lê uma pasta que já é sua.
- Os embeddings precisam do Ollama. Trocar o modelo de embeddings obriga a reindexar tudo.
- Modelos locais pequenos hesitam. A resposta é tão boa quanto o modelo que você configurar.
- Aberto por padrão. O token da API e o limite de taxa são opcionais; ative-os antes de expor isso além do localhost.
Próximo
Uma URL de demonstração pública em infraestrutura de nuvem gratuita, com recuperação e citações funcionando sem nenhuma chave paga.
core/README.md, RoadmapExperimente: github.com/rdorta27/knowman