← Voltar para o Dia 4: RAG: finalmente
Retrieval
O que é
Retrieval é o processo de buscar e selecionar informações relevantes em uma base de conhecimento para responder a uma determinada consulta.
Em um sistema RAG, o Retrieval acontece quando o usuário faz uma pergunta. O sistema utiliza mecanismos de busca para encontrar os documentos ou chunks que provavelmente contêm as informações necessárias e os disponibiliza para o LLM.
De forma simplificada:
Pergunta do usuário
↓
Transformação da consulta
↓
Busca na base de conhecimento
↓
Resultados relevantes
↓
Contexto para o LLM
↓
Resposta
É importante diferenciar Retrieval de Indexing:
Indexing
"Como preparar a base para que ela possa ser pesquisada?"
Retrieval
"Quais informações da base são relevantes para esta pergunta?"
O Indexing acontece principalmente antes da consulta, durante a preparação da base. O Retrieval acontece durante a consulta, quando o sistema precisa encontrar conhecimento relevante.
Como funciona
Imagine uma biblioteca com 1 milhão de páginas.
Indexar a biblioteca significa organizar o acervo para que seja possível encontrar rapidamente determinado conteúdo.
Retrieval é o momento em que alguém pergunta:
"Qual é a política da empresa para férias?"
O sistema precisa descobrir quais partes daquele enorme acervo podem ajudar a responder à pergunta.
Em um RAG baseado em busca vetorial, o processo pode ser:
Pergunta
↓
Embedding da pergunta
↓
Busca por similaridade
↓
Candidatos relevantes
↓
Seleção dos melhores resultados
↓
Contexto
↓
LLM
A busca pode utilizar diferentes estratégias.
Dense Retrieval utiliza embeddings e busca por proximidade entre vetores.
Sparse Retrieval utiliza principalmente termos e estruturas tradicionais de busca, como BM25.
Também é possível combinar as duas abordagens:
┌── Dense Retrieval
Pergunta ───────────┤
└── Sparse Retrieval
↓
Combinação dos resultados
↓
Contexto para o LLM
Outra característica importante é que Retrieval normalmente não significa simplesmente "encontrar um documento".
Um documento pode ser grande demais. Por isso, em sistemas RAG, frequentemente são recuperados chunks específicos.
Por exemplo:
Documento: politica_de_ferias.pdf
Chunk 01 → Introdução
Chunk 02 → Período de férias
Chunk 03 → Solicitação de férias
Chunk 04 → Aprovação
Chunk 05 → Exceções
Se a pergunta for:
"Com quanto tempo de antecedência devo solicitar férias?"
não é necessário enviar o documento inteiro ao LLM. O Retrieval pode encontrar principalmente o Chunk 03.
Isso reduz a quantidade de informação enviada ao modelo e aumenta a concentração de conteúdo relevante.
Um exemplo
Imagine uma base contendo estes três chunks:
Chunk A:
"A empresa oferece plano de saúde aos funcionários
após o período de experiência."
Chunk B:
"As férias devem ser solicitadas com pelo menos
30 dias de antecedência."
Chunk C:
"O benefício de vale-alimentação é disponibilizado
no primeiro dia útil de cada mês."
O usuário pergunta:
"Quanto tempo antes preciso pedir minhas férias?"
O sistema transforma a pergunta em uma representação adequada para busca e procura informações relacionadas.
O Retrieval identifica o Chunk B como o resultado mais relevante:
Pergunta
↓
Busca
↓
┌─────────────────────────────────────┐
│ Chunk B │
│ "As férias devem ser solicitadas │
│ com pelo menos 30 dias..." │
└─────────────────────────────────────┘
↓
Contexto
↓
LLM
↓
"Você deve solicitar suas férias
com pelo menos 30 dias de antecedência."
Em uma implementação mais sofisticada, o sistema pode recuperar vários candidatos:
Resultado 1 → relevância alta
Resultado 2 → relevância média
Resultado 3 → relevância baixa
Resultado 4 → relevância baixa
Depois, outra etapa pode reordenar os resultados, mantendo apenas os mais úteis para o contexto final.
Isso introduz um conceito importante que aparecerá dentro de Retrieval: Reranking.
Por que é importante
Retrieval é uma das etapas mais importantes de um sistema RAG porque determina qual conhecimento será apresentado ao LLM.
Um modelo pode receber um prompt excelente e ainda produzir uma resposta ruim se o sistema recuperar informações inadequadas.
Podemos pensar na qualidade de um RAG como uma cadeia:
Documentos
↓
Parsing
↓
Cleaning
↓
Chunking
↓
Embedding
↓
Indexing
↓
Retrieval
↓
Contexto
↓
LLM
↓
Resposta
Se o Retrieval encontrar o conteúdo errado, o LLM terá pouca informação útil para trabalhar.
Isso também ajuda a separar dois problemas diferentes:
Retrieval:
"Encontrei a informação certa?"
Generation:
"Usei corretamente a informação encontrada?"
Essa distinção é fundamental. Um sistema pode falhar porque não encontrou o documento correto ou porque encontrou o documento correto, mas o LLM o interpretou incorretamente.
Dentro de Retrieval, portanto, começamos a estudar conceitos como:
Retrieval
├── Dense Retrieval
├── Sparse Retrieval
├── Hybrid Retrieval
├── Top-K Retrieval
├── Reranking
├── Query Expansion
├── Query Rewriting
└── Retrieval Evaluation
A ideia central é: Retrieval é a etapa do RAG responsável por encontrar e selecionar, a partir da base de conhecimento, as informações mais relevantes para a consulta atual.