O truque da IA que não é truque: o encanamento que faz o milagre
O que separa um assistente “mágico” de um brinquedo barulhento raramente é o modelo. É o encanamento: indexadores, parsers, filas, índices aproximados, cache azedo, ACLs teimosas e um inferno civilizado de métricas. A parte da IA que dá capa de revista costuma ser a menos interessante na hora de manter o sistema em pé às 3h da manhã.
Começa pela ingestão. PDFs que não são realmente PDFs, planilhas que nasceram escaneadas, imagens que viraram texto por OCR cansado. Quem caiu no conto de “é só plugar no LangChain” descobre rápido a fauna de documentos: artefatos com fontes incorporadas, tabelas fundidas, notas de rodapé que viram corpo principal. Pipelines decentes usam parseadores como o Unstructured, Tesseract quando necessário e heurísticas de estrutura. Sem isso, o embedding vira uma sopa — e o RAG responde com confiança sobre algo que nunca leu direito.
O texto que entra precisa virar pedaços. Não existe tamanho mágico, mas há padrões que a experiência não cansa de bater: de 500 a 1.500 tokens com sobreposição de 10% a 20% reduz perda de contexto sem multiplicar custo de índice. Passou disso, a latência estoura e a relevância cai; ficou curto demais, o recall despenca. Equipes maduras versionam a estratégia de chunking e mantêm índices paralelos para migração suave. Se você muda o modelo de embedding (de 768 para 1.536 dimensões, por exemplo) sem conviver com duas gerações de índice por um tempo, está pedindo para quebrar busca em produção.
Depois vem o coração frio: busca vetorial aproximada. FAISS, HNSW, IVF-PQ, ScaNN e amigos estão na prateleira. HNSW (grafos hierárquicos de navegação) dá excelente recall em memória com latência previsível, mas come RAM como se fosse all-you-can-eat. IVF-PQ reduz memória via quantização e codebooks, ótimo para coleções grandes em disco — desde que você aceite um pouco de erro e faça re-ranking com um modelo cruzado. ScaNN brilha em CPU bem sintonizada, mas exige carinho na configuração. A aritmética é prosaica: vetor de 1.536 dimensões em float32 são ~6 KB por item; 10 milhões de itens dão ~60 GB só de dados crus, sem índice. Sem compressão ou sharding, boa sorte no p95.
Híbrido não é hype, é sobrevivência. Juntar BM25 (ou SPLADE) com denso estabiliza casos em que a linguagem é traiçoeira: termos de arte, números de peça, nomes internos. O truque comum é RRF (Reciprocal Rank Fusion) ou um re-ranker com cross-encoder para refinar o top-50. Paga-se em latência, ganha-se em precisão. Quem tem meta agressiva de p95 enfia um cache de consultas frequentes e pré-computa re-ranking para head traffic. E não, “semantizar tudo” não resolve código-fonte ou fórmulas — às vezes o velho termo exato é o que salva.
A frescura dos dados cobra pedágio. A arquitetura mais comum: CDC do banco transacional, aterrissagem em Kafka/Pulsar, workers que geram embeddings em lote, e um fluxo de merge periódico no índice. Tudo eventual. Tudo carregado de armadilhas: TTL errado que mantém documento morto por dias; ACLs que mudam e não propagam; reprocessamentos que duplicam chunks. Equipes que aprenderam na marra mantêm “fingerprints” dos documentos, versionam o embedding e logam a cadeia de transformação — não por perfeccionismo, mas para estancar vazamentos e explicar por que o bot citou uma política expirada.
Falando em vazamento: RAG injection não é teoria. Basta um PDF “instruindo” o modelo a ignorar políticas. Sem isolamento de canais e filtros de instrução, o modelo obedece como estagiário ansioso. Solução prática: separar estritamente o que é contexto do usuário do que é sistema, aplicar redatores de PII/segredo antes de indexar, e fazer checagem de escopo por consulta (row-level security e filtros por tenant). Na dúvida, nunca indexe dado que você não quer vazar em um print no X.
Operação custa. E não é só GPU. Embeddings por CPU podem resolver, desde que se aceite throughput menor e se invista em fila e paralelismo. O que dói mesmo é E/S e rede: egress entre nuvem A e serviço B, latência entre app e banco vetorial gerenciado, cold starts de shards. Em muitos times, a etapa de retrieval passa fácil de 60% do orçamento de latência ponta a ponta. Trazer o índice para perto do app (mesmo que em pgvector com HNSW para coleções médias) corta milissegundos e conta de transferência. Para gigantes, Milvus/Weaviate com sharding em NVMe local e warmup disciplinado dos grafos resolve o p99 que derruba demo bonita.
Há também a governança escondida. Logs detalhados por consulta (query, IDs de chunks, versão do embedding, latências p50/p95/p99, custo por chamada) viram seu seguro contra incidentes e seu mapa de otimização. Evals contínuos com conjuntos dourados — e não só métricas de “sensação térmica” — detectam regressões quando alguém resolve “melhorar” o chunking às 18h de sexta. Se a sua plataforma não permite refazer uma resposta com o mesmo contexto, você não tem observabilidade; tem fé.
Ferramentas ajudam, mas não fazem milagre. LangChain, LlamaIndex, frameworks corporativos: úteis para acelerar protótipo e orquestrar passos. No entanto, produção precisa de rotas de fuga. Conectores quebram com PDFs exóticos, rate limits mudam sem aviso, e um SDK que esconde configuração de índice é ótimo até produzir um recall de 0,6 no dia da apresentação ao board. Quem navega isso bem mantém as engrenagens expostas: escolha explícita de algoritmo de ANN, estratégia de compressão (PQ/OPQ), política de re-ranking e chaves de partição que refletem ACL de verdade, não fantasia.
No mercado, dá para ver o padrão de quem acerta. Produtos que parecem “mais inteligentes” quase sempre carregam: híbrido (BM25 + denso), índice versionado e paralelo em produção, restrição de escopo por usuário já no momento da consulta, e um repositório de exemplos reais para afinar prompt e checar grounding. Os que tropeçam, tropeçam nos clássicos: indexaram tudo sem permissão, atualizaram embedding sem rebuild, ou montaram uma arquitetura que funciona no notebook e sofre no tráfego de segunda-feira.
No fim, a pergunta boa não é “qual LLM?”. É: qual é seu plano de chunking, quantização, re-ranking, cache e governança. O resto é decoração.
Um ganho competitivo muito pouco glamouroso
Tem empresa correndo atrás do próximo modelo como quem troca de quadro de bicicleta achando que isso sobe ladeira. A diferença brutal entre um assistente que gera valor e um que gera incidentes está nessa infraestrutura entediante — a que não vira thread viral. Quem cuidar bem do encanamento vai parecer “mais inteligente” sem tocar no número de parâmetros do modelo. E é aí que a vantagem compõe silenciosamente: menos latência, menos vazamento, mais confiança. Chame de milagre se quiser. Eu prefiro chamar de engenharia.










