Escalar RAG para mais de um milhão de documentos é menos sobre o modelo e mais sobre a pipeline de dados. A maior parte dos ganhos veio de decisões antes da inferência.
Chunks fixos por tokens quebram raciocínio. Passei a segmentar por estrutura semântica — seções, listas e tabelas — anexando o cabeçalho pai a cada chunk.
BM25 sozinho perde sinônimos; vetores sozinhos perdem termos exatos. A combinação com re-ranking resolveu a maioria dos casos difíceis.
A qualidade do retrieval determina o teto de qualidade da resposta. Nenhum prompt salva um contexto ruim.
Com pgvector e índices HNSW ajustados, mantive p95 abaixo de 400ms mesmo no pico.