Reference

Estratégias de chunking

Avançado. Deixe a estratégia em Auto e as configurações nos padrões, a menos que tenha um motivo específico para mudá-las e saiba como os limites dos chunks afetam a recuperação. O Auto inspeciona cada arquivo e o encaminha ao chunker certo sozinho. O restante desta página é para o caso em que você confirmou que o Auto não está produzindo os chunks que quer.

Se for sobrescrever o Auto, a versão curta:

  • Integridade de frase importa (Q&A, texto jurídico) → Sentence
  • O conteúdo tem marcadores estruturais que o Text perde (código, formatos customizados) → Recursive
  • Você precisa de tamanhos de chunk uniformes → Token
  • O conteúdo tem delimitadores explícitos → Regex
  • Cada registro precisa ser seu próprio chunk → converter para JSONL

Configurações

ConfiguraçãoUnidadePadrãoFaixaDescrição
Max Chunk Sizetokens1.024100–4.000Limite superior do tamanho do chunk. 1 token ≈ 4 caracteres.
Min Chunk Sizecaracteres100100–2.000Fragmentos minúsculos abaixo disso são descartados.
Overlaptokens2000–500Tokens repetidos entre chunks adjacentes para preservar contexto.

O guia de chunking da Pinecone cobre os tradeoffs de tamanho e overlap.

Toda estratégia divide o documento em limites e depois empacota splits adjacentes até o max chunk size, então um chunk geralmente cobre vários splits e um limite de split não é um limite de chunk. Por isso um Regex preciso ainda pode produzir chunks com várias correspondências.

Estratégias

Auto

O Zoen inspeciona o arquivo e encaminha ao chunker certo:

  • .json, .jsonl, .yaml, .yml → chunking estrutural (registros nunca são divididos no meio; registros pequenos ainda podem ser agrupados até o tamanho do chunk)
  • .csv, .xlsx, .xls, .tsv → agrupados por linha, com cabeçalhos preservados
  • Todo o resto (.pdf, .docx, .txt, .md, .html, .pptx, …) → estratégia Text

O roteamento se baseia no MIME type detectado e na forma do conteúdo, não só na extensão — um arquivo .txt com JSON válido ainda é roteado estruturalmente.

Escolha Auto a menos que tenha confirmado que ele não está produzindo os chunks que quer.

Text

Splitter hierárquico que desce uma lista de separadores: regras horizontais → cabeçalhos markdown → parágrafos (\n\n) → linhas (\n) → pontuação de frase (. ! ?) → pontuação de cláusula (; ,) → espaços. Tenta o maior separador primeiro e faz fallback quando um pedaço ainda é grande demais.

Mesmo algoritmo do RecursiveCharacterTextSplitter do LangChain, o padrão de fato para prosa.

Use para prosa geral.

Recursive

Mesmo algoritmo do Text, mas você fornece sua própria hierarquia de separadores ou escolhe uma recipe embutida (plain, markdown, code).

O padrão de recipe vem do Chonkie, que traz conjuntos de separadores pré-montados para tipos comuns de conteúdo.

Use Recursive quando seu conteúdo tem marcadores estruturais que os separadores padrão do Text perdem — dividir código em \nclass , \nfunction e depois \n\n, por exemplo.

Sentence

Divide em limites de frase (. , ! , ? , com tratamento de abreviações) e empacota frases inteiras até o tamanho do chunk. Uma frase nunca é dividida no meio, a menos que sozinha exceda o limite.

É a técnica por trás do SentenceSplitter do LlamaIndex, o padrão recomendado para prosa no stack deles.

Use quando a integridade da frase importa — Q&A, texto jurídico, ou qualquer coisa em que cortes no meio da frase prejudiquem a compreensão.

Token

Janela deslizante de tamanho fixo alinhada a limites de palavra. Sem consciência de parágrafos ou frases.

O LlamaIndex oferece o mesmo como TokenTextSplitter. Útil quando o processamento downstream exige tamanhos de chunk uniformes; caso contrário, prefira Text ou Sentence.

Regex

Divide em cada correspondência de um padrão regex que você fornece e depois empacota splits até o tamanho do chunk por padrão — o mesmo comportamento de merge de todo outro chunker. Um regex de limite preciso como (?=\n\s*\{\s*"id"\s*:) ainda produz chunks com várias correspondências se elas forem pequenas o bastante para caber juntas. Isso é padrão em LangChain, LlamaIndex, Chonkie e Unstructured.

Use Regex quando seu conteúdo tem delimitadores explícitos que não se encaixam em nenhuma outra estratégia.

Limites estritos

A estratégia regex tem um checkbox opcional "Each match is its own chunk (don't merge)". Quando habilitado:

  • Cada correspondência regex vira seu próprio chunk
  • Splits adjacentes não são empacotados juntos
  • Overlap é desabilitado
  • Splits que excedem o tamanho do chunk ainda são subdivididos em limites de palavra

Isso corresponde ao knob join=False no txtai e ao padrão split_length=1 no DocumentSplitter do Haystack. A maioria das bibliotecas não expõe isso diretamente porque espera que o usuário mude para um parser estrutural — veja "Um registro por chunk" abaixo.

Ligue quando cada correspondência for um registro discreto (um par Q&A, uma entrada de log) e você precisar de cada um isolado para recuperação.

Um registro por chunk

Cada registro (cada par Q&A, cada linha de log, cada linha) como seu próprio chunk é chunking estrutural, não chunking regex. Dois caminhos:

  1. Converter para JSONL (um registro por linha) e enviar. A estratégia Auto do Zoen trata como dados estruturados e nunca divide um registro no meio. Registros pequenos ainda podem ser agrupados até o tamanho do chunk — para forçar um registro por chunk, baixe o max chunk size para aproximadamente o tamanho de um registro. Veja o JSONNodeParser do LlamaIndex e o chunking baseado em elementos do Unstructured.

  2. Usar Regex com limites estritos habilitados quando não puder reestruturar a fonte.

Prefira a opção 1. Parsers estruturais lidam com registros aninhados, delimitadores escapados e entradas malformadas que o regex não lida.

Leitura adicional

FAQ

Common Questions

Auto. JSON/JSONL/YAML passam por chunking estrutural, CSVs são agrupados por linha, todo o resto usa Text. Só sobrescreva o Auto se tiver confirmado que ele não está produzindo os chunks que quer.
Todo chunker segue split-then-pack: splits adjacentes pequenos são mesclados até o tamanho do chunk para manter chunks aproximadamente uniformes. Para preservar cada correspondência como seu próprio chunk, habilite 'Each match is its own chunk (don't merge)' na estratégia Regex, ou converta o arquivo para JSONL.
Mesmo algoritmo. Text usa uma hierarquia de separadores embutida para prosa geral. Recursive permite fornecer seus próprios separadores ou escolher uma recipe (plain, markdown, code) quando o padrão não captura sua estrutura.
Quando a integridade da frase importa — Q&A, texto jurídico, ou qualquer coisa em que cortes no meio da frase prejudiquem a compreensão. Text pode dividir no meio da frase nos níveis mais baixos da hierarquia; Sentence nunca faz isso, a menos que uma única frase exceda o tamanho do chunk.
Não. É uma janela deslizante de tamanho fixo alinhada a limites de palavra. Use só quando o processamento downstream exigir tamanhos de chunk uniformes.
O overlap repete tokens do fim de um chunk no início do próximo, para que uma consulta que atravessa um limite de chunk ainda possa bater. Valores maiores aumentam o armazenamento e podem surfacer hits duplicados na busca.
Converta para JSONL e baixe o max chunk size para aproximadamente o tamanho de um registro — o Auto cuida do resto. Se não puder reestruturar a fonte, use Regex com 'Each match is its own chunk' habilitado.
Não. Chunks maiores diluem a relevância — o embedding representa a média de mais conteúdo, então consultas específicas batem pior. 256–1.024 tokens é uma faixa típica; experimente com seus dados.
Não. A config de chunking é definida na criação. Para mudar, crie uma nova base de conhecimento e reenvie seus documentos.
O Zoen normaliza o conteúdo antes de dividir: \r\n vira \n, sequências de três ou mais newlines colapsam para \n\n, e tabs viram espaços. Padrões que dependem desses caracteres não vão bater. Além disso: no modo não estrito, conteúdo que cabe no tamanho do chunk retorna como um único chunk independentemente das correspondências — habilite limites estritos para forçar splits.

On this page