RAG: confira as melhores estratégias de chunking

Conheça as melhores estratégicas de chunking, que está entre as técnicas mais importantes para desenvolver aplicações com LLMs e vector databases

O chunking é uma das técnicas mais importantes — e muitas vezes negligenciadas — no desenvolvimento de aplicações com LLMs e vector databases. Se você já trabalhou com Retrieval Augmented Generation (RAG) ou sistemas de busca semântica, provavelmente já se deparou com resultados inconsistentes ou respostas imprecisas. A causa? Uma estratégia de chunking inadequada.

Neste artigo, vamos explorar em profundidade o que é chunking, por que ele é essencial para suas aplicações de IA, e como escolher a melhor estratégia para seu caso de uso específico.

O que é chunking?

No contexto de aplicações com LLMs, chunking é o processo de dividir textos grandes em segmentos menores chamados chunks (pedaços, em tradução livre).

É uma técnica de pré-processamento essencial que otimiza a relevância do conteúdo armazenado em vector databases. O desafio está em encontrar chunks grandes o suficiente para conter informações significativas, mas pequenos o suficiente para garantir performance e baixa latência em workloads como RAG e workflows com agentes de IA.

Por que precisamos de chunking?

Existem duas razões fundamentais pelas quais o chunking é necessário em qualquer aplicação envolvendo vector databases ou LLMs:

1. Limitações de context window dos embedding models

Todos os modelos de embedding possuem context windows que determinam a quantidade de informação em tokens que pode ser processada em um único vetor de tamanho fixo. Exceder essa janela significa que os tokens extras serão truncados ou descartados antes do processamento.

Isso é potencialmente prejudicial porque contexto importante pode ser removido da representação do texto, impedindo que seja encontrado durante uma busca.

2. Garantir chunks com informação relevante para busca

Não basta apenas dimensionar os dados corretamente para o modelo; os chunks resultantes precisam conter informações relevantes para a busca. Se um chunk contém sentenças que não fazem sentido sem contexto, elas podem não aparecer nos resultados da query.

Regra prática: se um chunk de texto faz sentido para um humano sem o contexto ao redor, também fará sentido para o modelo de linguagem.

O papel do chunking em semantic search

Em sistemas de busca semântica, indexamos um corpus de documentos, cada um contendo informações valiosas sobre um tópico específico. Devido ao funcionamento dos embedding models, esses documentos precisam ser divididos em chunks, e a similaridade é determinada por comparações no nível de chunk com o vetor da query de entrada.

Se os chunks forem muito pequenos ou muito grandes, isso pode levar a resultados de busca imprecisos ou oportunidades perdidas de surfar conteúdo relevante. Portanto, encontrar o tamanho ideal de chunk é crucial para garantir que os resultados sejam precisos e relevantes.

Chunking para aplicações com agentes e RAG

Agentes de IA podem precisar de acesso a informações atualizadas de databases para chamar ferramentas, tomar decisões e responder a queries dos usuários. Os chunks retornados de buscas sobre databases consomem contexto durante uma sessão e fundamentam as respostas do agente.

Assim como a busca semântica depende de uma boa estratégia de chunking para fornecer outputs utilizáveis, aplicações com agentes precisam de chunks significativos de informação para prosseguir. Se um agente for mal informado ou receber informações sem contexto suficiente, pode desperdiçar tokens gerando alucinações ou chamando as ferramentas erradas.

Chunking e LLMs de contexto longo

Em alguns casos, como ao usar o1 ou Claude 4 Sonnet com janela de contexto de 200k, documentos não fragmentados ainda podem caber no contexto. Ainda assim, usar chunks grandes pode aumentar latência e custo nas respostas downstream.

Além disso, modelos de embedding e LLMs de contexto longo sofrem com o problema "lost-in-the-middle", onde informações relevantes enterradas dentro de documentos longos são perdidas, mesmo quando incluídas na geração. A solução é garantir que a quantidade ideal de informação seja passada para o LLM downstream, o que necessariamente reduz latência e garante qualidade.

Variáveis a considerar ao escolher uma estratégia de chunking

Várias variáveis desempenham um papel na determinação da melhor estratégia de chunking:

  1. Que tipo de dado está sendo fragmentado? Você está trabalhando com documentos longos, como artigos ou livros, ou conteúdo mais curto, como tweets, descrições de produtos ou mensagens de chat? Documentos pequenos podem não precisar ser fragmentados, enquanto maiores podem exibir estrutura que informará a estratégia, como sub-cabeçalhos ou capítulos.

  2. Qual embedding model você está usando? Diferentes modelos têm capacidades distintas para informação, especialmente em domínios especializados como código, finanças, medicina ou jurídico. A forma como esses modelos são treinados pode afetar fortemente seu desempenho na prática.

  3. Quais são suas expectativas para comprimento e complexidade das queries dos usuários? Serão curtas e específicas ou longas e complexas? Isso pode informar a maneira como você escolhe fragmentar seu conteúdo.

  4. Como os resultados recuperados serão utilizados na sua aplicação específica? Por exemplo, serão usados para busca semântica, question answering, RAG ou mesmo um workflow com agentes?

Métodos de chunking

Fixed-size chunking

Esta é a abordagem mais comum e direta: simplesmente decidimos o número de tokens no chunk e usamos esse número para dividir documentos em chunks de tamanho fixo. Geralmente, esse número é o tamanho máximo da context window do embedding model (como 1024 para llama-text-embed-v2, ou 8196 para text-embedding-3-small).

Fixed-sized chunking será o melhor caminho na maioria dos casos, e recomendamos começar aqui e iterar apenas se for insuficiente.

Content-aware chunking

Embora o chunking de tamanho fixo seja fácil de implementar, pode ignorar estrutura crítica dentro de documentos que pode ser usada para informar chunks relevantes. Content-aware chunking refere-se a estratégias que aderem à estrutura para ajudar a informar o significado dos chunks.

Sentence and paragraph splitting

Alguns embedding models são otimizados para embeddings no nível de sentença. Mas às vezes, sentenças precisam ser extraídas de datasets de texto maiores que não são pré-processados. Nesses casos, é necessário usar sentence chunking. Algumas abordagens incluem:

  • Naive splitting: dividir sentenças por pontos ("."), novas linhas ou espaços em branco

  • NLTK: biblioteca Python popular para trabalhar com dados de linguagem humana, oferece tokenizador treinado

  • spaCy: biblioteca poderosa para tarefas de NLP com recurso sofisticado de segmentação de sentenças

Recursive character level chunking

O LangChain implementa um RecursiveCharacterTextSplitter que tenta dividir texto usando separadores em uma ordem específica. O comportamento padrão usa os separadores ["\n\n", "\n", " ", ""] para quebrar parágrafos, sentenças e palavras dependendo do tamanho do chunk.

É um meio-termo excelente entre sempre dividir em um caractere específico e usar um divisor mais semântico.

Document structure-based chunking

Ao fragmentar documentos grandes como PDFs, DOCX, HTML, code snippets, arquivos Markdown e LaTeX, métodos especializados podem ajudar a preservar a estrutura original:

Tipo de Documento

Considerações

PDF

Contém headers, texto, tabelas que requerem pré-processamento

HTML

Tags como <p> para parágrafos ou <title> podem informar divisões

Markdown

Reconhecer sintaxe (headings, listas, code blocks) para divisão inteligente

LaTeX

Parsing de comandos e ambientes para respeitar organização lógica

Semantic chunking

Uma técnica experimental introduzida por Greg Kamradt aponta que um tamanho global de chunk pode ser trivial demais para levar em conta o significado de segmentos dentro do documento.

O semantic chunking envolve:

  1. Quebrar documento em sentenças

  2. Agrupar cada sentença com sentenças adjacentes

  3. Gerar embeddings para esses grupos

  4. Comparar distância semântica entre cada grupo e seu predecessor

  5. Identificar onde o tópico ou tema muda, definindo limites do chunk

Contextual chunking com LLMs

Às vezes, não é possível fragmentar informações de um documento complexo maior sem perder contexto totalmente. Isso acontece quando documentos têm centenas de páginas, mudam de tópicos frequentemente ou requerem entendimento de muitas porções relacionadas.

A Anthropic introduziu o contextual retrieval em 2024 para resolver esse problema. A técnica envolve:

  • Processar documento inteiro com Claude

  • Gerar descrição contextualizada para cada chunk

  • Anexar descrição ao chunk antes de embedar

  • Descrição retém significado de alto nível do documento no chunk

Como descobrir a melhor estratégia para sua aplicação

Selecionando um range de tamanhos de chunk

Uma vez que seus dados estão pré-processados, escolha um range de tamanhos potenciais para testar. A escolha deve levar em conta:

  • Natureza do conteúdo (mensagens curtas vs documentos longos)

  • Embedding model e suas capacidades (limites de tokens)

  • Equilíbrio entre preservar contexto e manter precisão

Comece explorando variedade de tamanhos:

  • Chunks menores (128 ou 256 tokens) para capturar informação semântica granular

  • Chunks maiores (512 ou 1024 tokens) para reter mais contexto

Avaliando performance de cada tamanho de chunk

Para testar vários tamanhos, você pode usar múltiplos índices ou um único índice com múltiplos namespaces. Com um dataset representativo:

  1. Crie embeddings para os tamanhos de chunk que deseja testar

  2. Salve-os em seu índice

  3. Execute série de queries para avaliar qualidade

  4. Compare performance dos vários tamanhos de chunk

Este é provavelmente um processo iterativo, testando diferentes tamanhos contra diferentes queries até determinar o tamanho de chunk com melhor performance.

Post-processing com chunk expansion

Você não está completamente casado com sua estratégia de chunking. Ao consultar dados fragmentados em vector database, a informação recuperada é tipicamente os chunks semanticamente mais similares. Mas usuários, agentes ou LLMs podem precisar de mais contexto ao redor.

Chunk expansion é uma forma fácil de pós-processar dados fragmentados, recuperando chunks vizinhos dentro de uma janela para cada chunk em um conjunto recuperado. Chunks podem ser expandidos para parágrafos, páginas ou até documentos inteiros.

Combinar uma estratégia de chunking com boa chunk expansion na consulta pode garantir buscas de baixa latência sem comprometer contexto.

Perguntas frequentes sobre chunking

Qual o tamanho ideal de chunk?
Não existe tamanho único ideal. Depende do seu embedding model, tipo de conteúdo e caso de uso. Comece com fixed-size chunking usando o tamanho da context window do seu modelo e itere baseado em performance.

Preciso fragmentar documentos curtos?
Não necessariamente. Se um documento inteiro (como um tweet ou descrição de produto) cabe confortavelmente na context window do seu embedding model, você pode embedá-lo diretamente.

Semantic chunking é sempre melhor que fixed-size?
Não. Semantic chunking é mais complexo e computacionalmente caro. Fixed-size chunking funciona bem para muitos casos de uso e deve ser seu ponto de partida.

Como o chunking afeta RAG?
Chunking adequado é crítico para RAG. Chunks muito grandes podem diluir informação relevante, enquanto chunks muito pequenos podem perder contexto necessário para gerar respostas precisas.

Conclusão

Chunking pode parecer direto na maioria dos casos — mas pode apresentar desafios quando você se afasta do caminho tradicional. Não há solução única para chunking, então o que funciona para um caso de uso pode não funcionar para outro.

A chave é entender seu domínio, seu embedding model e suas necessidades de aplicação. Comece simples com fixed-size chunking, meça resultados e itere conforme necessário. Com experimentação cuidadosa e avaliação rigorosa, você encontrará a estratégia de chunking ideal para sua aplicação.

Quer começar a experimentar com estratégias de chunking? Explore exemplos práticos e implemente chunking via aplicações como busca semântica, RAG ou aplicações com agentes usando vector databases de alta performance.