Capítulo 2
Chunking
A decisão mais importante do RAG: como você divide o documento em pedaços menores antes de guardar no banco vetorial.
⚖️ Por que o Chunking importa?
📈
Chunk muito grande
- • Inclui ruído irrelevante
- • Dilui relevância
- • Custo alto de tokens
- • Modelos perdem foco
📉
Chunk muito pequeno
- • Perde contexto
- • Não responde perguntas complexas
- • Fragmentação excessiva
- • Relevância fragmentada
🛠️ 3 Estratégias de Chunking
1
Fixo
Divisão por tamanho exato (ex: 500 caracteres). Simples, mas pode quebrar parágrafos no meio.
Laravel — chunk fixo
$text = $documento->conteudo;
$chunks = collect(mb_str_split($text, 500))
->filter()
->values();2
Semântico
Divisão por parágrafos ou seções lógicas. Recomendado — preserva contexto.
Laravel — chunk semântico
$chunks = preg_split('/
+/', $documento->conteudo);
$chunks = collect($chunks)
->filter(fn($c) => mb_strlen($c) >= 100
&& mb_strlen($c) <= 1000);3
Sobreposição
Chunk de 500 chars com 50 chars de sobreposição. Mantém contexto entre chunks.
Laravel — chunk com overlap
$chunks = [];
$texto = $documento->conteudo;
for ($i = 0; $i < mb_strlen($texto); $i += 450) {
$chunks[] = mb_substr($texto, $i, 500);
}📊 Tamanho do Chunk por Documento
| Tipo de Documento | Tamanho do Chunk | Estratégia |
|---|---|---|
| Artigos, posts | 500-800 chars | Semântico |
| Documentação técnica | 800-1500 chars | Semântico |
| Contratos longos | 1500-3000 chars | Fixo + Overlap |
| Código-fonte | 200-500 chars (por função) | Por função/método |
| Emails/SMS | 100-300 chars | Fixo |
| Livros | 1000-2000 chars | Semântico + Overlap |
✨ Regra de Ouro
Comece com chunking semântico (por parágrafos) com limites de 100-1000 caracteres. Depois, teste com perguntas reais do seu domínio e ajuste baseado nos resultados. Não existe tamanho "certo" — existe tamanho que funciona para suas perguntas.