RAG para documentos internos: contratos, atas e PDFs

A promessa do RAG para documentos internos é sedutora: faça uma pergunta em linguagem natural e o sistema encontra a resposta no meio de mil contratos, atas e manuais. A realidade é que documentos empresariais são os inputs mais problemáticos para um pipeline RAG. Tabelas quebradas, PDFs escaneados, cabeçalhos repetidos em todo chunk, dados pessoais sem controle. Este artigo é um guia honesto para fazer isso funcionar.

Tipos de documento mais comuns em PMEs — e seus desafios específicos

Cada tipo de documento traz um conjunto diferente de problemas na extração e indexação:

Desafios específicos de PDF: tabelas, cabeçalhos e footers

PDF é o formato mais problemático para extração de texto, e é exatamente o mais usado em contextos empresariais.

Tabelas em PDF

A maioria dos extratores de PDF (PyMuPDF, pdfplumber, pypdf) tenta reconstruir tabelas a partir de posições x/y de texto, o que frequentemente gera linhas embaralhadas ou colunas colapsadas. Uma tabela de preços com 3 colunas pode virar:

# O que está no PDF (visualmente correto):
Produto        Qtd Mínima    Preço Unit.
Parafuso A     100           R$ 0,45
Parafuso B     500           R$ 0,38

# O que o extrator produz (texto linearizado):
Produto Qtd Mínima Preço Unit. Parafuso A 100 R$ 0,45 Parafuso B 500 R$ 0,38

Solução: usar extratores especializados para tabelas (pdfplumber com detecção de bordas, Camelot, ou serviços como Azure Document Intelligence / AWS Textract) e converter tabelas para Markdown antes de indexar. Markdown de tabela preserva a estrutura de colunas e é compreensível para LLMs.

Cabeçalhos e rodapés repetidos

Em documentos longos, o cabeçalho ("CONTRATO DE PRESTAÇÃO DE SERVIÇOS — CONFIDENCIAL") e o rodapé ("Página X de Y — Empresa ABC LTDA — CNPJ 12.345.678/0001-90") aparecem em todos os chunks. Isso polui o embedding com ruído repetido e consome tokens desnecessários no contexto.

A solução é detectar e remover padrões de cabeçalho/rodapé antes do chunking, comparando as primeiras e últimas linhas de cada página e eliminando padrões que se repetem em mais de 80% das páginas.

Checklist de pré-processamento documental (15 itens)

Use este checklist antes de indexar qualquer lote de documentos. Um item não concluído pode comprometer todo o pipeline.

  1. Inventário e deduplicação: identificar e remover documentos duplicados ou versões antigas. Manter apenas a versão vigente de cada documento.
  2. Validação de formato: verificar se todos os arquivos são legíveis (não corrompidos). PDFs com senha bloqueiam a extração silenciosamente.
  3. Detecção de necessidade de OCR: verificar se o PDF tem texto extraível (heurística: extrair texto da página 1; se vazio ou < 50 chars, marcar para OCR).
  4. OCR para documentos escaneados: usar Tesseract (open-source) ou serviço cloud (Azure, AWS, Google Vision) com configuração de idioma pt-BR. Verificar qualidade da saída.
  5. Remoção de cabeçalhos e rodapés repetidos: detectar padrões repetidos entre páginas e removê-los antes do chunking.
  6. Extração e conversão de tabelas: identificar tabelas e convertê-las para formato Markdown estruturado, preservando relação coluna/valor.
  7. Normalização de texto: remover caracteres de controle, normalizar espaços em branco, converter encoding para UTF-8, tratar hifenização de final de linha.
  8. Extração de metadados: data de criação/modificação, autor (se disponível), título, número de páginas, tipo de documento (contrato, ata, manual, etc.).
  9. Classificação automática de tipo: usar regex ou classificador simples para categorizar documentos (contrato, ata, manual, NF, e-mail) e adicionar como metadado.
  10. Identificação de dados pessoais (LGPD): executar NER (Named Entity Recognition) para detectar CPF, CNPJ, nome, endereço, e-mail, telefone nos documentos.
  11. Anonimização ou classificação de acesso: para dados pessoais identificados: anonimizar (substituir por token interno) ou marcar com nível de acesso restrito e aplicar RBAC.
  12. Versionamento do corpus: registrar hash (SHA-256) de cada documento indexado para detectar alterações e reindexar apenas o que mudou.
  13. Teste de extração em amostra: extrair 10% dos documentos manualmente e verificar qualidade do texto antes de processar o lote completo.
  14. Definição de estratégia de chunking por tipo: contratos usam chunking por cláusula; manuais usam chunking hierárquico; e-mails usam chunking por mensagem individual. Não use estratégia única para tudo.
  15. Validação pós-ingestão: verificar contagem de chunks esperada vs. real; buscar termos-chave para confirmar que a indexação funcionou; checar que filtros de metadados retornam os documentos corretos.

Pipeline de ingestão: do arquivo ao chunk indexado

O pipeline de ingestão para documentos empresariais tem mais etapas que o exemplo típico de tutorial RAG:

# Fluxo simplificado de ingestão
para cada documento em fila_de_ingestão:

    1. VALIDAÇÃO
       - verificar integridade do arquivo
       - checar se já está indexado (por hash)
       - identificar formato (PDF, DOCX, XLSX, etc.)

    2. EXTRAÇÃO
       - se PDF sem texto → OCR (Tesseract / Azure)
       - se PDF com texto → PyMuPDF / pdfplumber
       - se DOCX → python-docx
       - se XLSX → openpyxl (tratar como tabelas)

    3. PRÉ-PROCESSAMENTO
       - remover cabeçalhos/rodapés
       - converter tabelas para Markdown
       - normalizar texto e encoding
       - executar NER para dados pessoais

    4. CLASSIFICAÇÃO E METADADOS
       - classificar tipo de documento
       - extrair metadados (data, autor, título)
       - aplicar regras de anonimização/RBAC

    5. CHUNKING (estratégia por tipo)
       - contratos: por cláusula + contexto pai
       - manuais: hierárquico (seção → subseção)
       - e-mails: por mensagem individual
       - documentos genéricos: semântico

    6. EMBEDDING E INDEXAÇÃO
       - gerar embeddings (OpenAI / BGE-M3)
       - indexar no vector store com metadados
       - indexar no BM25 para busca híbrida
       - registrar hash e timestamp no log

LGPD e dados pessoais em documentos empresariais

Este é o ponto onde muitos projetos RAG para documentos internos tropeçam sem saber. Documentos empresariais estão cheios de dados pessoais: contratos têm CPF e endereço das partes, atas têm nome e cargo de participantes, e-mails têm dados de clientes.

Quando esses documentos são indexados e o LLM os usa para responder perguntas, você está realizando tratamento de dados pessoais sob a LGPD — mesmo que os documentos já existissem antes do sistema RAG.

As principais medidas a implementar:

Para detalhes sobre LGPD em aplicações LLM, veja LGPD e aplicações LLM: o que sua empresa precisa saber.

Quanto custa na prática: estimativas para PMEs

Para um corpus típico de PME (2.000–10.000 documentos):

Para a estratégia de chunking mais adequada a cada tipo de documento, veja estratégias de chunking: semântico, hierárquico e por estrutura.