icardb
RAG: Construindo Bases de Conhecimento Inteligentes com IA
Voltar para artigosINTELIGÊNCIA ARTIFICIAL

RAG: Construindo Bases de Conhecimento Inteligentes com IA

Por Equipe Editorial Icardb 7 min de leitura

Grandes modelos de linguagem sabem muito sobre o mundo, mas não sabem sobre seus documentos internos, seus produtos ou seus dados atualizados. RAG (Retrieval-Augmented Generation) resolve esse problema conectando LLMs a bases de conhecimento externas, gerando respostas precisas, verificáveis e atualizadas.

O Problema que RAG Resolve

LLMs têm duas limitações críticas: conhecimento desatualizado (cortado na data de treinamento) e alucinações (invenção de fatos). Quando você pergunta a um modelo sobre um documento específico da sua empresa ou uma notícia de ontem, ele não tem como saber.

RAG resolve isso buscando informações relevantes em uma base de dados antes de gerar a resposta. Em vez de confiar apenas na memória do modelo, o sistema recupera fatos reais e os apresenta como contexto, reduzindo drasticamente alucinações.

Como Funciona o RAG em 4 Passos

  1. Ingestão: documentos são carregados, divididos em chunks (pedaços) e processados.
  2. Embedding: cada chunk é convertido em um vetor numérico que representa seu significado semântico.
  3. Armazenamento: os vetores são guardados em um banco de dados vetorial para busca rápida.
  4. Recuperação + Geração: quando o usuário faz uma pergunta, o sistema busca chunks similares e os inclui no prompt do LLM.

A mágica está no embedding: dois textos com significado similar ficam próximos no espaço vetorial, mesmo usando palavras diferentes. Isso permite busca por conceito, não por palavra-chave exata.

Embedding e Bancos de Dados Vetoriais

Um embedding é uma representação numérica de um texto. Modelos como OpenAI text-embedding-3-large ou sentence-transformers convertem frases em vetores de centenas ou milhares de dimensões. A similaridade entre dois vetores mede quão próximo em significado são os textos originais.

Bancos vetoriais são otimizados para buscar os vetores mais similares a uma consulta, em milissegundos, mesmo com milhões de documentos. A maioria usa índices aproximados como HNSW para acelerar a busca.

Banco VetorialDestaqueQuando Usar
PineconeManaged, escala bem, fácil de começarProdução, sem querer gerenciar infra
ChromaDBOpen-source, roda localmenteDesenvolvimento, prototipagem rápida
WeaviateGraphQL nativo, híbrido vetor+BM25Quando precisa de busca híbrida
pgvectorExtensão PostgreSQL, SQL familiarJá usa PostgreSQL, quer unificar
QdrantRust, performance, filtragem avançadaAlto volume com filtros complexos

Chunking: A Arte de Dividir Documentos

Dividir documentos em pedaços parece simples, mas é uma das decisões mais importantes em um sistema RAG. Chunks muito pequenos perdem contexto. Chunks muito grandes distraem o LLM com informações irrelevantes.

  • Fixed-size chunking: divide por número de tokens (ex: 500 tokens). Simples, mas pode cortar frases no meio.
  • Recursive chunking: divide por parágrafos, depois por frases se necessário. Preserva estrutura textual.
  • Semantic chunking: agrupa sentenças semanticamente relacionadas. Mais inteligente, mas mais lento.
  • Agentic chunking: usa um modelo para decidir onde cortar. Caro, mas preserva contexto máximo.

Implementando RAG com Python

Vamos ver um exemplo prático usando LangChain com ChromaDB e OpenAI. O código demonstra o fluxo completo: carregar documentos, dividir, embeddar, armazenar e consultar.

python
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1. Carregar e dividir documentos
loader = TextLoader("documentos/manual.txt")
docs = loader.load()

splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = splitter.split_documents(docs)

# 2. Criar embeddings e armazenar
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    chunks, embeddings, persist_directory="./chroma_db"
)

# 3. Consultar com RAG
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    retriever=vectorstore.as_retriever(search_kwargs={"k": 4})
)

resposta = qa.run("Como resetar a senha do administrador?")
print(resposta)

Métricas de Qualidade em Sistemas RAG

Implementar RAG é fácil. Implementar RAG que funciona bem exige medição. Avalie tanto a recuperação quanto a geração.

MétricaO que MedeBom Valor
Recall@K% de perguntas com resposta correta nos K primeiros chunks> 80%
MRRRanking médio do primeiro chunk relevante> 0.7
FaithfulnessFidelidade da resposta ao contexto recuperado> 0.8
Answer RelevanceQuão relevante é a resposta à pergunta> 0.8
Context Precision% de chunks recuperados que são realmente úteis> 70%

Padrões Avançados de RAG

Multi-Query RAG

O usuário pode fazer perguntas vagas. Multi-Query gera várias variações da pergunta original, busca chunks para cada uma e combina os resultados, aumentando a chance de encontrar informações relevantes.

Re-ranking

Busca vetorial é rápida mas aproximada. Re-ranking usa um modelo mais pesado para reordenar os top-K resultados, melhorando a precisão final. Modelos como Cohere Rerank ou cross-encoders são populares.

Self-Query

Quando documentos têm metadados (data, autor, categoria), Self-Query usa o LLM para extrair filtros da pergunta do usuário. "Relatórios de vendas de 2025" vira uma busca vetoral + filtro year=2025.

Armadilhas Comuns em Sistemas RAG

  • Chunks sem contexto: pedaços isolados perdem referências como 'ele', 'isso', 'conforme mencionado acima'.
  • Não atualizar a base: documentos novos ou modificados não são re-embeddados automaticamente.
  • Ignorar custos de embedding: milhões de documentos geram custos significativos de API.
  • Confiar cegamente no LLM: sempre mostre as fontes para o usuário verificar.
  • Sobrecarregar o contexto: enviar 20 chunks de 1000 tokens ultrapassa o limite do modelo.

Conclusão

RAG é a ponte entre o conhecimento estático de LLMs e os dados dinâmicos do mundo real. Empresas de todos os tamanhos estão usando RAG para criar assistentes internos, chatbots de suporte e ferramentas de análise de documentos.

Comece simples: carregue alguns documentos, divida em chunks, armazene em ChromaDB e faça perguntas. Meça a qualidade das respostas e itere. A diferença entre um demo e um produto é justamente essa iteração guiada por métricas.

Perguntas frequentes

+RAG substitui fine-tuning de LLMs?

Não necessariamente. RAG é mais barato e rápido para adicionar conhecimento novo. Fine-tuning muda o comportamento do modelo (tom, formato, tarefas específicas). Muitas vezes, a melhor solução combina ambos.

+Quanto custa rodar um sistema RAG?

Depende do volume. Para poucos milhares de documentos, custos são baixos (dezenas de dólares/mês). Em escala de milhões de documentos, considere embedding local com sentence-transformers e bancos vetoriais self-hosted.

+Posso usar RAG com dados privados?

Sim. Use modelos de embedding e LLMs self-hosted (Ollama, vLLM) ou escolha provedores com garantias de privacidade de dados. Nunca envie dados sensíveis para APIs públicas sem anonimização.

+Qual o tamanho ideal de chunk?

Não existe tamanho universal. Comece com 300-500 tokens com 10-20% de overlap. Teste e meça o recall. Documentos estruturados (tabelas, listas) podem precisar de chunking semântico mais inteligente.

+Como manter a base de conhecimento atualizada?

Implemente um pipeline de ingestão periódica. Versione seus documentos, re-embedde apenas os modificados e mantenha um registro de quando cada chunk foi atualizado pela última vez.

Fontes consultadas

Revisão editorial: publicado em . Última revisão em . Conteúdo educativo, sem patrocínio das ferramentas citadas.

Crédito da imagem: Foto: Icardb / Gerado por IA (Uso Editorial)

Leia também