Experiência com RAG em produção obtida ao processar mais de 5 milhões de documentos
(blog.abdellatif.io)- Ao longo de 8 meses conduzindo um projeto de RAG (geração aumentada por recuperação), foi possível distinguir o que realmente funcionou do que foi perda de tempo
- No início, foi usado Langchain e Llamaindex para concluir rapidamente um protótipo, mas no feedback de usuários reais surgiram limitações de desempenho
- Os fatores que mais contribuíram para melhorar o desempenho da busca em documentos foram geração de consultas, reranking, estratégia de chunking, uso de metadados e roteamento de consultas
- Na prática, foi construída uma pipeline customizada, escolhendo de forma flexível banco de dados vetorial, embeddings, reranking, LLM etc.
- Toda a experiência e know-how foram reunidos e publicados no projeto open source (agentset-ai/agentset)
Visão geral de 8 meses de experiência construindo RAG em produção
- É compartilhada a experiência de construir e operar sistemas RAG em grandes conjuntos de dados, como um total de 9 milhões de páginas (Usul AI) e 4 milhões de páginas (uma empresa anônima de IA jurídica)
- No começo, seguindo tutoriais do YouTube, o autor migrou de Langchain para Llamaindex e concluiu um protótipo em poucos dias, mas na implantação real surgiram problemas de baixo desempenho perceptíveis apenas para os usuários
- Ao longo de vários meses, partes dos componentes do sistema foram ajustadas até alcançar o desempenho ideal
Elementos que realmente contribuíram para melhorar o desempenho (em ordem de ROI)
-
Geração de consultas (Query Generation)
- Como a última consulta do usuário não consegue conter todo o contexto, um LLM revisa a conversa e gera várias consultas semânticas e consultas por palavras-chave
- Essas consultas são processadas em paralelo e enviadas ao reranker, obtendo o efeito de ampliar o escopo da busca e compensar vieses da busca híbrida
-
Reranking
- O impacto no desempenho de um reranking que pode ser implementado com cerca de 5 linhas de código é maior do que se imagina
- Em entradas com muitos chunks (por exemplo, 50), o processo de reordenar e selecionar apenas parte dos chunks superiores (por exemplo, 15) tem o maior ROI
- Só o reranking já pode compensar de forma significativa deficiências de uma pipeline mal projetada
-
Estratégia de chunking (Chunking Strategy)
- Foi a parte que consumiu a maior parte do tempo durante todo o processo de desenvolvimento
- É preciso entender com precisão a estrutura e os padrões dos dados, fazer o chunking em unidades lógicas e revisar manualmente para evitar que caracteres ou frases sejam cortados no meio
- Cada chunk precisa manter significado independente
-
Uso de metadados na entrada do LLM
- Em vez de enviar ao LLM apenas o texto do chunk, adicionar metadados (title, author etc.) melhora bastante o contexto e a qualidade da resposta
-
Roteamento de consultas (Query Routing)
- Para tipos de consulta que o RAG não consegue responder (por exemplo, resumo de artigo, pedido de informações sobre autor etc.), foi introduzido um roteador leve, que direciona a consulta para um fluxo de processamento com API + LLM
Stack real utilizado (Our stack)
- Banco de dados vetorial: Azure → Pinecone → Turbopuffer (barato e com suporte nativo a busca por palavras-chave)
- Extração de documentos: abordagem customizada
- Ferramenta de chunking: Unstructured.io por padrão; em pipelines corporativas, solução customizada (Chonkie também tem boa reputação)
- Modelo de embedding: uso de text-embedding-large-3 (outros modelos não foram testados)
- Reranker: None → Cohere 3.5 → Zerank (não é popular, mas na prática é excelente)
- LLM: GPT 4.1 → GPT 5 → GPT 4.1 (principalmente usando créditos da Azure)
Open source e conclusão
- Todo o aprendizado e a experiência prática resultaram no projeto open source agentset-ai/agentset
- Publicado sob licença MIT, podendo ser usado livremente e com possibilidade de contato para dúvidas
1 comentários
Opinião do Hacker News
text-embedding-large-3)