A maioria das “wikis com LLM” usa agentes, embeddings e chamadas repetidas a modelos para organizar anotações locais. Emmimal P Alexander, desenvolvedor e autor do artigo no Towards Data Science, construiu uma alternativa determinística: um compilador Python puro que transforma markdown bagunçado em uma wiki vinculada e validada usando apenas a biblioteca padrão.
Por que substituir agentes por um compilador?
Alexander conta que tentou construir uma wiki no estilo Karpathy — com loops de agentes, chamadas recursivas a LLMs e embeddings para tudo. A entrada era uma pasta de arquivos markdown que ele já possuía no disco. No meio do caminho percebeu: “Eu estava pagando tokens para reorganizar texto que eu já tinha.”
A diferença fundamental é filosófica: um agente decide como sua wiki poderia ser; um compilador garante como ela deve ser. O pipeline determinístico produz o mesmo resultado todas as vezes — essencial para anotações de referência pessoal onde consistência importa.
As quatro etapas do pipeline
O compilador opera em quatro estágios independentes e testáveis:
1. Extrator de metadados com regex
Pastas de anotações reais são caóticas. Alguns arquivos usam # Header, outros uma linha em maiúsculas, outros não têm cabeçalho algum. O extrator verifica primeiro por # header, depois por linha em maiúsculas e, se nada funcionar, usa o nome do arquivo. Ele varre campos de metadados onde quer que apareçam, sem exigir posições fixas.
2. Construtor de grafos (e o bug de performance)
A primeira versão fazia regex par a par entre todas as entidades — complexidade O(n²). Com 100 arquivos funcionava. Com 1.000, levava 4,4 segundos. Com 5.000, explodia para 107 segundos. Alexander substituiu por um matcher indexado por palavras: tokeniza cada arquivo uma vez e usa lookup em dicionário. O resultado: 1.000 arquivos em menos de 50ms; 5.000 em menos de 1 segundo.
O grafo resultante é puramente léxico — só detecta menções exatas do nome da entidade. Ele não entende que “a empresa” e “meu empregador” podem ser a mesma coisa. Essa é uma limitação honesta e reconhecida.
3. Reescrevedor consciente de seções
Em vez de reescrever tudo do zero, o reescrevedor preserva qualquer conteúdo que o usuário tenha escrito na seção ## Notes. As seções gerenciadas pelo compilador (Metadata, Related, Referenced By, Body) são regeneradas da fonte. As anotações pessoais permanecem intactas entre recompilações.
4. Linter (e o segundo bug)
O linter faz verificações estruturais simples: links quebrados e páginas órfãs. A primeira versão tinha um bug sério: contava links da seção “Referenced By” como links de saída, inflando artificialmente a contagem. Com 100 arquivos e 13 órfãos reais, o linter bugado reportava zero. A correção limitou a contagem à seção “Related”. Um teste de regressão foi adicionado com o nome do bug para evitar recorrência.
Benchmarks: duas máquinas, números idênticos
O pipeline foi testado em três escalas (100, 1.000 e 5.000 arquivos) tanto em container Linux quanto em Windows 10. Os resultados de conectividade (contagem de órfãos: 13, 133, 644) foram idênticos em todas as execuções, independentemente do sistema operacional — prova da natureza determinística do compilador.
O estágio mais caro é o linter, por causa de I/O de disco, não de CPU. Com 5.000 arquivos, ele custa mais que extração, grafo e reescrita combinados. No Windows, o Defender provavelmente contribui verificando cada arquivo na abertura, mas isso não foi verificado diretamente.
Para uso real: com 5.000 notas, uma recompilação completa leva cerca de 12 segundos em hardware Windows padrão — zero custo de tokens, zero chamadas de rede. Na escala da maioria das bases de conhecimento pessoais (centenas a poucos milhares de notas), a recompilação termina em menos de 2 segundos.
Onde isso quebra
Fontes não estruturadas ou extremamente inconsistentes vão derrubar o extrator baseado em regex. A vinculação semântica também é um limite claro: se uma nota fala de “gradiente descendente” e outra descreve “a etapa de otimização” sem usar a frase literal, elas não serão vinculadas. Nada no pipeline entende significado — essa é a fronteira honesta do que um compilador determinístico pode fazer.
O argumento não é que LLMs são a ferramenta errada para construir wikis pessoais. É que elas são a ferramenta errada para os 90% do trabalho que é puramente mecânico — e possivelmente a ferramenta certa para os 10% que exigem entender o que o texto significa, e não apenas como ele está escrito.
O código-fonte completo, incluindo gerador, extrator, construtor de grafos, reescrevedor, linter, harness de benchmark e todos os 17 testes, está disponível em: github.com/Emmimal/wiki-compiler.
Descubra mais sobre noticiAI
Assine para receber nossas notícias mais recentes por e-mail.



