A geração aumentada por recuperação (do inglês retrieval-augmented generation, sigla RAG) é uma técnica de inteligência artificial que aprimora modelos de linguagem de grande escala (LLMs) incorporando um mecanismo de recuperação de informações que permite ao modelo acessar e utilizar dados adicionais além do seu conjunto de treinamento original. Com o RAG, os LLMs primeiro consultam um conjunto especificado de documentos externos antes de responder a consultas dos usuários, complementando o conhecimento paramétrico armazenado nos pesos do modelo com uma memória não paramétrica atualizada e verificável.

O termo foi cunhado por Patrick Lewis e colegas da Meta AI (então Facebook AI Research), da University College London e da New York University, em um artigo seminal apresentado na conferência NeurIPS em 2020. O próprio Lewis reconheceu, em entrevista à NVIDIA, que o acrônimo RAG não era o mais elegante, comentando que "definitivamente teríamos pensado mais no nome se soubéssemos que nosso trabalho se tornaria tão difundido".

O RAG tornou-se uma das técnicas mais amplamente adotadas na engenharia de aplicações de IA generativa, sendo utilizado por empresas como AWS, IBM, Google, Microsoft, NVIDIA e Oracle, entre outras. Em essência, o RAG é uma forma de melhorar o desempenho dos LLMs combinando o processo de geração do modelo com uma busca em documentos ou bases de dados, ajudando os modelos a se manterem fiéis aos fatos.

Contexto e motivação

Os modelos de linguagem de grande escala são treinados sobre vastos corpora de texto, internalizando conhecimento em seus parâmetros, fenômeno referido como memória paramétrica. Esse tipo de memória apresenta duas limitações fundamentais: os dados de treinamento possuem uma data de corte (knowledge cutoff), tornando o modelo incapaz de responder com precisão sobre eventos posteriores ao treinamento, e o modelo não tem acesso a informações privadas ou proprietárias de uma organização específica que não façam parte do corpus de treinamento público.

Quando um LLM tenta responder a perguntas sobre domínios que não estão presentes em seus dados de treinamento, ou que exigem informações recentes, o modelo pode gerar respostas plausíveis, porém incorretas, fenômeno denominado alucinação. Um exemplo amplamente citado ocorreu quando o Google demonstrou o LLM Google Bard (posteriormente rebatizado como Gemini), que forneceu informações incorretas sobre o Telescópio Espacial James Webb, contribuindo para uma queda de US$ 100 bilhões na capitalização de mercado da empresa.

O RAG foi proposto como solução para essas limitações. Em vez de retreinar o modelo com novos dados, o que é computacionalmente custoso, o RAG permite que o modelo consulte dinamicamente uma base de conhecimento externa durante a geração de respostas. Quando novas informações se tornam disponíveis, basta atualizar a base de conhecimento externa, sem necessidade de retreinar o modelo. O RAG foi descrito pelos autores originais como uma "receita de ajuste fino de propósito geral", pois pode ser utilizado por praticamente qualquer LLM para conectar-se a quase qualquer recurso externo.

Arquitetura e funcionamento

Visão geral do pipeline

O pipeline RAG é composto por três etapas fundamentais: recuperação (retrieval), augmentação (augmentation) e geração (generation). A augmentação é tecnicamente a saída do recuperador e serve como entrada para o gerador, sendo o elo entre as duas outras etapas.

Quando um usuário submete uma consulta, ela é processada da seguinte forma:

A consulta é convertida em uma representação numérica chamada embedding ou vetor, produzida por um modelo de embedding especializado. O sistema recuperador (retriever) usa esse vetor para buscar os documentos mais relevantes em uma base de conhecimento indexada, geralmente por meio de um banco de dados vetorial. Os documentos recuperados são concatenados à consulta original, formando um contexto enriquecido que é fornecido ao LLM por meio de engenharia de prompt. O LLM gera uma resposta baseada tanto no contexto recuperado quanto no seu conhecimento paramétrico, podendo citar as fontes utilizadas.

Indexação e chunking

Antes que a recuperação possa ocorrer, os documentos da base de conhecimento precisam ser indexados. Esse processo envolve dividir os documentos em fragmentos menores chamados chunks, convertê-los em embeddings e armazenar esses embeddings em um banco de dados vetorial. A escolha da estratégia de fragmentação (chunking strategy) é crítica para o desempenho do sistema: fragmentos muito pequenos perdem contexto, enquanto fragmentos muito grandes excedem a janela de contexto do LLM e introduzem ruído.

No artigo original de Lewis et al. (2020), cada artigo da Wikipédia foi dividido em fragmentos de 100 palavras, resultando em um total de 21 milhões de documentos indexados com o sistema FAISS (Facebook AI Similarity Search).

Recuperação: vetores densos e esparsos

A recuperação de documentos relevantes pode ser realizada por diferentes métodos, que dependem em parte do tipo de indexação utilizada.

Os vetores esparsos codificam a identidade das palavras. Tipicamente têm comprimento de dicionário e contêm majoritariamente zeros. O método clássico baseado em vetores esparsos é o BM25 (Best Match 25), uma função de ranqueamento de documentos amplamente utilizada em sistemas de busca tradicionais, que considera frequência de termos e comprimento dos documentos.

Os vetores densos codificam o significado semântico das palavras e frases. São mais compactos e contêm menos zeros. Modelos como o DPR (Dense Passage Retriever) e os Sentence Transformers convertem textos em vetores densos que capturam similaridade semântica mesmo quando as palavras exatas não coincidem. A busca por vizinhos mais próximos aproximados (ANN, Approximate Nearest Neighbor) melhora a eficiência em relação à busca exata de K vizinhos mais próximos (KNN).

A recuperação híbrida combina vetores esparsos e densos, aproveitando as vantagens de ambas as abordagens, geralmente por meio de algoritmos de fusão como o RRF (Reciprocal Rank Fusion).

Bancos de dados vetoriais

Modelos de IA operam usando lógica matemática, e todo dado trabalhado deve ser representado de forma numérica, incluindo dados não estruturados (texto, áudio, magens) que necessitam serem convertidos. Assim oS embeddings vetorial são os dados não estruturados representados de forma numérica (array de números ou matrizes de números de ponto flutuante que representam o significado original do dado não estruturado). E o banco de dados vetorial (em inglês vector database ou vector store) trabalha com esses embeddings vetoriais.

Um componente central da arquitetura RAG é o banco de dados vetorial, que armazena embeddings de documentos e permite buscas eficientes por similaridade semântica. Os principais bancos de dados vetoriais utilizados em implementações RAG incluem:

FAISS (Facebook AI Similarity Search): Biblioteca de código aberto da Meta AI para busca eficiente em grandes coleções de vetores densos, com suporte a índices HNSW (Hierarchical Navigable Small World) e IVFFlat. Chroma (ChromaDB): Banco de dados vetorial de código aberto, projetado para facilidade de uso em aplicações de IA. Pinecone: Serviço gerenciado de banco de dados vetorial, amplamente adotado em produção. Weaviate: Banco de dados vetorial de código aberto com suporte a busca híbrida nativa. Qdrant: Banco de dados vetorial de código aberto escrito em Rust, com foco em desempenho e filtragem avançada. Elasticsearch: Sistema de busca de código aberto que adicionou suporte nativo a vetores densos a partir da versão 8.0, permitindo busca híbrida em um único sistema.

Geração aumentada

Na fase de geração, o LLM recebe a consulta original combinada com os documentos recuperados, e produz uma resposta que integra tanto o conhecimento recuperado quanto o conhecimento paramétrico interno. Os LLMs com RAG são programados para priorizar as informações recuperadas, técnica por vezes chamada de prompt stuffing (ou preenchimento de prompt). A capacidade de citar as fontes utilizadas é uma das principais vantagens do RAG, pois permite que os usuários verifiquem as alegações feitas pelo modelo.

Variantes e evoluções

RAG ingênuo (Naive RAG)

O RAG ingênuo (Naive RAG) segue o processo básico de indexação, recuperação e geração descrito na seção anterior. Apresenta limitações como baixa precisão na recuperação (fragmentos recuperados desalinhados com a consulta), baixo recall (falha em recuperar todos os fragmentos relevantes), e possibilidade de fornecer ao LLM informações desatualizadas. Podem ocorrer também problemas de redundância e repetição quando múltiplas passagens recuperadas são utilizadas.

RAG avançado (Advanced RAG)

O RAG avançado (Advanced RAG) aborda as limitações do RAG ingênuo por meio de otimizações em três estágios:

Pré-recuperação: Otimização da indexação de dados em cinco dimensões: granularidade dos dados, estruturas de índice, adição de metadados, otimização de alinhamento e recuperação mista. Recuperação: Ajuste fino do modelo de embedding para otimizar a relevância dos fragmentos recuperados, uso de embeddings dinâmicos que capturam melhor a compreensão contextual. Pós-recuperação: Reranqueamento dos documentos recuperados, seleção de contexto relevante, compressão de informações redundantes e ajuste fino do gerador.

RAG modular (Modular RAG)

O RAG modular representa uma evolução mais flexível, na qual os componentes do pipeline são substituíveis e configuráveis de forma independente. Permite a incorporação de módulos especializados com capacidades como expansão de consultas em múltiplas dimensões, reescrita de consultas, recuperação iterativa e reflexão sobre as próprias respostas geradas.

Self-RAG

O Self-RAG (RAG com autorrefleção) é uma variante na qual o modelo aprende a recuperar, gerar e criticar suas próprias respostas por meio de reflexão. O sistema usa três prompts em sequência: gera uma resposta inicial com citações, lista afirmações sem citação, e refina a resposta usando apenas as passagens citadas. Estudos demonstraram que o Self-RAG reduz taxas de alucinação para 5,8% em cenários de suporte à decisão clínica.

GraphRAG

O GraphRAG, desenvolvido pela Microsoft Research, combina recuperação baseada em grafos de conhecimento com a arquitetura RAG tradicional. Ao estruturar o conhecimento como um grafo de entidades e relações, o GraphRAG melhora a capacidade de raciocínio sobre dados narrativos privados e relacionamentos complexos entre conceitos, sendo especialmente útil para análise de documentos corporativos.

RAPTOR

O RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval) é uma extensão que processa textos de forma hierárquica, incorporando, agrupando e sumarizando textos em múltiplos níveis de abstração recursivamente. Essa abordagem melhora o desempenho em tarefas complexas de raciocínio em múltiplos passos, que exigem integração de informações de diferentes partes de um documento longo.

RAFT

O RAFT (Retrieval-Augmented Fine-Tuning) combina as vantagens do RAG e do ajuste fino (fine-tuning), criando conjuntos de dados sintéticos para ajustar modelos a domínios específicos. O RAFT supera o RAG tradicional em domínios especializados como medicina, pois permite que o modelo "estude" o conhecimento do domínio com antecedência, resultando em melhor desempenho do que o RAG tradicional.

Vantagens

As principais vantagens do RAG em relação ao uso isolado de LLMs são:

Redução de alucinações: Ao fundamentar as respostas em documentos recuperados de fontes verificáveis, o RAG reduz significativamente a probabilidade de o modelo gerar respostas plausíveis, porém incorretas. Estudos comparativos demonstram reduções de alucinação superiores a 40% em aplicações médicas com variantes avançadas de RAG.