Chunking
Chunking é a primeira decisão técnica de RAG: o tamanho, a sobreposição e a estratégia de corte determinam o que o retrieval consegue encontrar depois. Pedaços ruins viram respostas sem contexto.
O que é
Chunking é o processo de dividir um documento em pedaços menores que serão indexados e recuperados. O tamanho do pedaço não é detalhe: ele define o que cabe na janela do modelo, qual é a unidade de busca, e qual é a granularidade da citação que aparece na resposta.
Em quase toda arquitetura RAG, chunking acontece uma vez na ingestão e nunca mais. O pipeline padrão lê o documento, aplica um splitter, gera um embedding por bloco, e segue. Se o corte foi mal pensado, o índice inteiro carrega o problema até alguém refazer a indexação.
Tamanho e overlap
A pergunta mais comum é 'qual o tamanho certo?'. A resposta honesta é 'depende'. Para perguntas curtas e respostas factuais, blocos menores funcionam melhor: cada bloco carrega uma ideia só, então o retrieval traz o trecho exato. Para perguntas que exigem raciocínio entre parágrafos, blocos maiores preservam contexto, e blocos pequenos demais quebram o argumento no meio.
Sobreposição (overlap) é o segundo parâmetro. Sem sobreposição, uma ideia que começa no fim de um bloco e continua no começo do próximo fica órfã: nenhum dos dois blocos tem o sentido completo. Com sobreposição de 10 a 20% do tamanho do bloco, o início do próximo repete o fim do anterior, então a fronteira nunca corta uma frase no meio.
tamanho do bloco 200 a 1000 tokens
overlap 10% a 20% do bloco
regra prática bloco ~512 tokens, overlap ~50
bloco pequeno -> citação precisa, contexto curto
bloco grande -> raciocínio longo, citação ruidosaEstratégias de corte
Três famílias dominam a prática. A primeira é corte por caracteres ou tokens, simples e previsível, e que funciona quando o documento é prosa limpa. A segunda é corte recursivo por separadores, que tenta quebrar primeiro por parágrafo, depois por frase, depois por palavra, e só por caractere em último caso. Preserva a estrutura do texto sem precisar de modelo. A terceira é corte semântico, que agrupa frases por similaridade e só corta quando a próxima frase tem baixa relação com a anterior. Custa mais e usa embeddings, mas produz blocos coerentes.
Tem ainda o corte por estrutura: títulos, seções, células de tabela, parágrafos de código. Em documentos com marcação clara (Markdown, HTML, docx convertido), separar por estrutura e manter a hierarquia no metadata dá chunks mais úteis do que qualquer splitter genérico.
Na prática
O LangChain oferece o splitter recursivo pronto. O exemplo configura tamanho e overlap e aplica em um texto qualquer. Para texto em português, vale separar por parágrafo, frase e palavra, nessa sequência.
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=512,
chunk_overlap=50,
separators=[
"\n\n", # parágrafo
"\n", # linha
"(?<=[.!?])\\s+", # fim de frase em PT-BR (lookbehind)
" ", # palavra
"", # caractere (último caso)
],
length_function=len,
is_separator_regex=True,
)
with open("manual.txt", encoding="utf-8") as f:
texto = f.read()
blocos = splitter.split_text(texto)
for i, bloco in enumerate(blocos):
print(f"#{i:03d} {len(bloco)} chars {bloco[:60].replace(chr(10), ' ')}...")Pontos fortes
- estabilidade: chunking determinístico produz os mesmos blocos para o mesmo documento, então o índice se mantém reproduzível
- controle de granularidade: ajustar tamanho e overlap é uma alavanca direta na qualidade do retrieval
- compatibilidade: quase todo framework (LangChain, LlamaIndex, Haystack) traz splitter pronto, então a barreira de entrada é baixa
Limitações
- cegueira semântica: splitter recursivo corta por separador, não por sentido; uma ideia que cruza a fronteira some
- estrutura perdida: separar por caractere ignora títulos, listas e tabelas; em documentos mistos, é melhor splitter específico por tipo
- custo de reindexação: trocar a estratégia de chunking obriga reindexar tudo; em bases grandes, isso vira migração
conexões no mapa
- Chunkinggera vetoresEmbeddings
atualizado em 14/10/2026 · fontes para aprofundar · reportar erro
Estude antes
Desbloqueia
teste o que entendeu
Carregando perguntas…