๐ Conceito de RAG
RAG (Retrieval-Augmented Generation) e a tecnica de buscar informacoes relevantes em uma base de dados e injeta-las no contexto do LLM antes de gerar a resposta. Isso resolve duas limitacoes fundamentais dos modelos: o knowledge cutoff (dados desatualizados) e a alucinacao (inventar informacoes).
๐๏ธ Arquitetura Basica de RAG
๐ฏ Quando Usar RAG
- โข Dados proprietarios: Documentacao interna, manuais, FAQs, politicas da empresa
- โข Dados atualizados: Informacoes que mudam frequentemente (precos, estoque, regulamentacoes)
- โข Respostas citaveis: Quando o usuario precisa saber a fonte da informacao
- โข Dominio especializado: Conhecimento tecnico ou nicho que o modelo nao cobre bem
โ๏ธ Chunking e Embeddings
A qualidade do RAG depende diretamente de como voce divide seus documentos (chunking) e como os converte em representacoes numericas (embeddings). Chunks mal dimensionados ou embeddings de baixa qualidade resultam em retrieval pobre.
Estrategias de Chunking
- Por tamanho fixo: 500-1000 tokens por chunk. Simples, mas pode cortar ideias no meio.
- Por paragrafo/secao: Respeita a estrutura do documento. Melhor semanticamente, mas chunks de tamanhos variados.
- Recursive: Tenta dividir por secao, depois paragrafo, depois sentenca. O mais usado na pratica.
- Semantic: Usa embeddings para detectar mudancas de topico. Mais sofisticado, melhor qualidade.
Modelos de Embedding
- OpenAI text-embedding-3: 1536 ou 3072 dimensoes. Boa qualidade geral, facil de usar.
- Cohere embed-v3: Otimizado para retrieval, suporta tipos de busca (search_document, search_query).
- Open-source (BGE, E5): Executaveis localmente, sem custo por chamada, bom para dados sensiveis.
๐ก Overlap entre Chunks
Sempre use overlap de 10-20% entre chunks adjacentes. Isso garante que informacoes que estao na fronteira entre dois chunks nao sejam perdidas. Ex.: chunks de 500 tokens com overlap de 50-100 tokens.
๐ Busca Semantica
A busca semantica encontra chunks relevantes com base no significado, nao apenas em palavras-chave. E o coracao do pipeline RAG โ se o retrieval falha em trazer os chunks certos, a geracao sera baseada em contexto errado.
๐ Como Funciona
- โข Cosine Similarity: Mede o angulo entre vetores de embedding. Quanto mais proximo de 1, mais similares os textos. A metrica mais usada em RAG.
- โข Top-K: Retorna os K chunks mais similares (tipicamente 3-10). Mais K = mais contexto mas mais ruido.
- โข Reranking: Apos o top-K, um segundo modelo reordena os resultados por relevancia. Melhora significativamente a precisao.
Busca Semantica Pura
- โ Entende sinonimos e parafraseos
- โ Funciona bem com perguntas naturais
- โ Pode falhar com termos tecnicos exatos
- โ Nao considera palavras-chave especificas
Hybrid Search (Semantica + BM25)
- โ Combina o melhor dos dois mundos
- โ Captura tanto significado quanto termos exatos
- โ Recomendada para producao
- โ Mais complexa de implementar e tunar
๐ Prompt com Contexto Recuperado
A forma como voce injeta o contexto recuperado no prompt e tao importante quanto a qualidade do retrieval. O modelo precisa saber como usar os chunks, quando citar fontes e o que fazer quando a informacao nao esta disponivel.
๐ Template RAG Recomendado
Instrucoes:
Responda a pergunta do usuario usando APENAS as informacoes
fornecidas no contexto abaixo. Se a resposta nao estiver no
contexto, diga "Nao encontrei essa informacao na base de dados."
Cite a fonte usando [Fonte: nome_do_documento].
Contexto:
[Chunk 1 โ fonte: manual_produto.pdf, pagina 12]
[Chunk 2 โ fonte: faq_atualizado.md, secao 3]
[Chunk 3 โ fonte: politica_devolucao.pdf, pagina 2]
Pergunta do usuario:
{pergunta}
โ ๏ธ Grounding e Faithfulness
O maior risco em RAG e o modelo ignorar o contexto e responder com base no seu treinamento (unfaithful). Para maximizar faithfulness:
- โข Instrua explicitamente: "Use APENAS o contexto fornecido"
- โข Exija citacoes para cada afirmacao
- โข Inclua a instrucao de dizer "nao sei" quando a resposta nao esta no contexto
๐ Avaliacao de RAG
Avaliar um pipeline RAG e mais complexo do que avaliar um prompt simples. Voce precisa medir tanto a qualidade do retrieval (os chunks certos foram encontrados?) quanto a qualidade da geracao (a resposta e fiel ao contexto?).
๐ Metricas Essenciais
Faithfulness (Fidelidade)
A resposta gerada e fiel ao contexto recuperado? Nao inventa informacoes? Metrica mais critica para confiabilidade.
Context Relevance
Os chunks recuperados sao relevantes para a pergunta? Chunks irrelevantes adicionam ruido e reduzem qualidade.
Answer Relevance
A resposta final responde a pergunta do usuario? Pode ser fiel ao contexto mas nao responder o que foi perguntado.
Context Recall
Todos os chunks relevantes foram recuperados? Mede se o retrieval esta encontrando toda a informacao necessaria.
๐ก Framework RAGAS
O RAGAS (Retrieval Augmented Generation Assessment) e o framework mais usado para avaliar pipelines RAG. Ele calcula automaticamente faithfulness, context relevance e answer relevance usando LLM-as-judge. Integra com LangChain e LlamaIndex.
๐งช Exercicio: Pipeline RAG Simples
Neste exercicio, voce vai construir um mini pipeline RAG com 5 documentos curtos. O objetivo e praticar cada etapa: chunking, indexacao, busca e geracao com contexto.
๐ Passo a Passo
- โข Passo 1: Crie 5 documentos curtos (200-400 palavras cada) sobre um tema de sua escolha (ex.: politica de RH da empresa ficticia)
- โข Passo 2: Divida cada documento em chunks de ~200 tokens com overlap de 50 tokens
- โข Passo 3: Gere embeddings para cada chunk (pode usar a API da OpenAI ou simular manualmente)
- โข Passo 4: Para 3 perguntas de teste, encontre os top-3 chunks mais relevantes
- โข Passo 5: Monte o prompt RAG com template + chunks recuperados e gere a resposta
๐ฏ Avaliacao do Exercicio
- 1. A resposta e fiel ao contexto? (faithfulness)
- 2. Os chunks certos foram recuperados? (context relevance)
- 3. A resposta responde a pergunta? (answer relevance)
- 4. Teste uma pergunta cuja resposta NAO esta nos documentos โ o modelo diz "nao sei"?
๐ Resumo do Modulo
Proximo Modulo:
3.4 โ Agentes de IA: construa agentes autonomos que planejam e executam