
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

A busca de IA do Google está tão quebrada que pode 'desconsiderar' o que você está procurando
Os resumos de IA do Google enfrentam problemas, apresentando respostas de chatbot em vez de resumos tradicionais. Isso pode impactar a experiência do usuário e a eficácia da busca.

Reduza seus custos de busca com IA sem sacrificar a qualidade
O artigo discute como a técnica de recuperação assimétrica pode reduzir significativamente os custos de embeddings de consultas em buscas com IA, mantendo a qualidade e a resiliência operacional.
A Orientação do llms.txt do Google Depende do Produto Consultado
O Google Search afirma que o llms.txt não é necessário para recursos de IA, enquanto o Lighthouse agora verifica o arquivo para prontidão de navegação agentiva em uma auditoria experimental.
Gostou do conteudo?
Receba toda semana as principais novidades sobre WebMCP.