
Como Eu Construí um Gerador de llms.txt que Funciona em Escala
Este é o companheiro técnico do meu Eu criei um gerador de llms.txt, mostrei ao criador do padrão e tive que reescrever tudo — o lado humano está lá, aqui está apenas a engenharia.
O objetivo: gerar automaticamente uma hierarquia adequada de llms.txt para qualquer site — não um índice plano de resumos, mas um conjunto estruturado de arquivos MD onde páginas semanticamente relacionadas são unidas em documentos coerentes. Aqui está como cada camada funciona e o que quebrou ao longo do caminho.
A Arquitetura
Sitemap → Crawler → Embedder → Clusterer → Summarizer → llms.txt + arquivos MD
Cinco estágios. Cada um funciona a uma velocidade diferente. Cada um tem seus próprios modos de falha.
Estágio 1: Rastreamento
Rastreamento padrão com extração de conteúdo. A saída por página: caminho, título, texto limpo.
Páginas que falham ao rastrear são monitoradas, mas não param o pipeline — uma página ausente simplesmente não contribui para seu cluster.
Estágio 2: Embeddings + Cache
Cada página é convertida em um vetor usando o modelo gemini-embedding-001 do Gemini.
Os vetores são armazenados em cache no Redis, indexados por hostname + modelo + caminho. Ao reprocessar o mesmo site, páginas já incorporadas são servidas do cache instantaneamente — sem chamadas de API, sem custo.
const allCached = await this.cacheService.hmget(
hashKey,
allPaths.map((p => `vectors:${p}`)
);
// Acertos de cache pulam a incorporação completamente
Isso é importante porque as incorporações são o passo mais paralelizável e você não quer refazê-las em tentativas ou reinicializações.
Estágio 3: Agrupamento K-Means com Similaridade Cosseno
Páginas se agrupam por significado semântico, não pela estrutura da URL. Duas páginas sobre o mesmo conceito com caminhos de URL diferentes acabam no mesmo cluster. Três páginas sob /payments/checkout/ que cobrem tópicos diferentes acabam em clusters diferentes.
K-means implementado diretamente em TypeScript — sem bibliotecas externas de ML. Similaridade cosseno como a métrica de distância, não Euclidiana — a similaridade cosseno funciona muito melhor para vetores de incorporação de alta dimensão.
private kMeans(vectors: number[][], k: number, maxIterations = 100): number[] {
const dim = vectors[0].length;
let centroids = vectors.slice(0, k).map((v => [...v]);
let assignments = new Array<number>(vectors.length).fill(0);
for (let iter = 0; iter < maxIterations; iter++) {
const newAssignments = vectors.map((v) => {
let minDist = Infinity, nearest = 0;
for (let c = 0; c < centroids.length; c++) {
const dist = 1 - this.cosineSimilarity(v, centroids[c]);
if (dist < minDist) { minDist = dist; nearest = c; }
}
return nearest;
});
const changed = newAssignments.some((a, i) => a !== assignments[i]);
assignments = newAssignments;
if (!A implementação de um gerador de llms.txt pode otimizar a forma como os crawlers de IA interagem com os sites brasileiros, facilitando a indexação e a recuperação de informações. Isso é crucial para empresas que buscam melhorar sua visibilidade e desempenho em buscas automatizadas.
Noticias relacionadas

Criei um Gerador de llms.txt e Tive que Reescrever Tudo
O artigo discute a criação de um gerador de llms.txt, um novo padrão para ajudar agentes de IA a navegar em conteúdos web. O autor compartilha aprendizados e desafios enfrentados ao implementar a curadoria de documentos para otimizar a interação com IA.

Microsoft: Respostas de IA precisam de um índice de busca mais inteligente
A busca por IA está transformando índices, com o Bing focando em fatos e atribuições antes de gerar respostas. Sistemas de grounding exigem evidências mais robustas para respostas precisas.
Google atualiza busca com 'conselhos de especialistas' do Reddit e outros fóruns
Google está atualizando sua busca para incluir conversas de fóruns, o que pode ajudar em consultas específicas, mas também pode gerar confusão.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.