Skip to main content

Estratégias de Chunking de Documentos

PARA AGENTES DE IAChatGPTClaude

Metodologia para decompor documentos extensos e bases de código em fragmentos autossuficientes (chunks) para a geração de embeddings vetoriais e busca precisa em sistemas RAG.

1. Visão geral do conceito e problema sistêmico

Os modelos de embeddings (como text-embedding-3-large ou bge-m3) possuem uma janela de entrada com limite rígido de comprimento (de 512 a 8192 tokens). Mesmo que o modelo seja tecnicamente capaz de processar um PDF extenso por completo, ele comprime toda a informação em um único vetor de dimensão fixa (por exemplo, 1536 números).

Sem realizar um chunking granular:

  1. Diluição Semântica (Vector Dilution): O vetor de um documento de 50 páginas torna-se tão genérico que perde os detalhes de funções ou configurações específicas.
  2. Impossibilidade de recuperação precisa no RAG: O sistema de busca trará o documento gigante inteiro para o contexto da LLM generativa, esgotando instantaneamente o orçamento de tokens.
  3. "Morte" da estrutura ao dividir ingenuamente: A divisão fixa por número de caracteres (Character Splitting) corta palavras ao meio, separa o cabeçalho da função de sua implementação e destrói tabelas.

Chunking é o fundamento da engenharia RAG: transforma texto bruto monolítico em uma coleção de blocos semânticos, interconectados e autossuficientes em termos de informação.

2. Taxonomia arquitetural e modelo mental

Dependendo da estrutura dos dados, distinguem-se quatro níveis arquiteturais de chunking:

  • 1. Chunking de tamanho fixo com sobreposição (Fixed-Size Sliding Window): Abordagem mais simples: o texto é cortado em blocos de $N$ tokens com uma sobreposição de $M$ tokens. É rápido, mas frequentemente viola os limites lógicos dos parágrafos.
  • 2. Chunking recursivo por caracteres (Recursive Character Splitting): Abordagem hierárquica (padrão LangChain/LlamaIndex). O algoritmo tenta dividir o texto primeiro por quebras de linha duplas (\n\n); se o bloco for muito grande, divide por quebra de linha única (\n), depois por ponto final (. ) e, apenas como último recurso, por espaço.
  • 3. Chunking semântico (Semantic / Embedding-Distance Chunking): O texto é dividido em sentenças individuais. Para cada uma, gera-se um vetor e calcula-se a similaridade cosseno entre sentenças adjacentes. Os limites dos chunks são definidos nos pontos de mudança abrupta de semântica (mudança de tópico).
  • 4. Chunking sintático AST/Markdown (Structural Chunking): Considera a árvore sintática do documento: divide o Markdown estritamente pelos níveis de cabeçalhos (#, ##, ###), preservando as breadcrumbs, e o código de programação pelos nós de classes e funções via Tree-sitter.

3. Pipeline técnico e mecânica interna

O pipeline profissional de chunking consiste em 4 etapas:

  1. Document Ingestion & Pre-cleaning (Limpeza): Remoção de caracteres especiais invisíveis, unificação das quebras de linha (\r\n -> \n) e normalização da codificação Unicode (NFC).
  2. Boundary Detection (Detecção de limites): O parser constrói a árvore sintática (AST) ou identifica pontos seguros de divisão (separadores Markdown, linhas vazias entre funções).
  3. Window Formatting & Overlap Calculation (Corte e sobreposição): O texto é agrupado em blocos de 500–700 tokens. Ao início de cada novo chunk, adiciona-se um buffer de sobreposição (10–15%) do anterior.
  4. Metadata Enrichment & Context Injection (Enriquecimento de contexto): Cada chunk recebe um prefixo com metadados: [File: api/auth.ts | Class: AuthService | Method: validateToken] Isso garante que o vetor do fragmento seja encontrado mesmo em consultas onde o nome do método não é mencionado em seu corpo.

4. Cenários de engenharia prática em produção

01. Indexação de codebase de repositório via Tree-sitter

Cada arquivo TypeScript é parseado em uma árvore sintática. Um chunk separado é formado para cada interface exportada e cada função. Se uma função ocupa 20 linhas, ela se torna um chunk autônomo junto com seus comentários JSDoc e a lista de tipos importados.

02. Processamento de tabelas complexas e relatórios financeiros

A divisão comum rompe as linhas da tabela, privando os números de sentido. O chunking profissional converte cada linha da tabela em uma frase textual autossuficiente: "Em 2024, a receita da unidade Cloud foi de $35B, representando um aumento de 15% em relação a 2023", gerando vetores com alta precisão de busca.

03. Parsing de documentação de API (OpenAPI / Swagger)

Cada rota (por exemplo, POST /v1/payments) é isolada em um chunk próprio, contendo o caminho, o método HTTP, a descrição dos parâmetros, exemplos de resposta e códigos de erro, permitindo que o agente gere código cliente sem erros.

5. Armadilhas, erros comuns e segurança

  • Problema dos "pronomes pendurados" (Dangling Pronouns): Se a frase "Esta função requer privilégios de administrador" cair no chunk 2, enquanto o nome da função permanecer no chunk 1, o modelo não conseguirá responder à consulta. Utilize sempre metadados com enriquecimento de contexto pai (Parent Document Retrieval).
  • Inflação da base vetorial devido a excesso de Overlap: Sobreposições acima de 25% levam à duplicação de informações na banco de dados, aumentam o custo de indexação e carregam fragmentos idênticos no topo dos resultados.
  • Perda do contexto estrutural (Loss of Lineage): Um chunk sem indicação do nome do arquivo e do número da linha torna-se ruído anônimo, dificultando a geração de citações precisas nas respostas do agente.
/ Perguntas FrequentesSchema.org FAQPage

FAQ: Estratégias de Chunking de Documentos

Chunks pequenos (100–300 tokens) proporcionam uma busca vetorial muito precisa, mas podem perder o contexto completo da ideia. Chunks grandes (1000–2000 tokens) preservam a visão geral, porém seus embeddings tornam-se 'diluídos', reduzindo a similaridade semântica com consultas específicas e estreitas. O padrão ouro para textos técnicos é de 400–800 tokens.
/ Links internos
Todos os termos