Pular para o conteúdo

Chunky - Kit de Ferramentas de Chunking para RAG

Chunky - Kit de Ferramentas de Chunking para RAG

Chunky é um toolkit de código aberto para construir pipelines de ingestão confiável de RAG, focado no estágio de chunking frequentemente negligenciado. Converte PDFs para Markdown, limpa documentos, deixa você inspecionar chunks e comparar estratégias de chunking lado a lado, e enriquece metadados de chunks para aplicações LLM. Como a qualidade de recuperação é limitada por como os documentos são divididos, o valor do Chunky é tornar a etapa de chunking visível e ajustável em vez de um padrão cego.

Instalação

MétodoComando
pippip install chunky
uvuv add chunky
From sourcegit clone https://github.com/GiovanniPasq/chunky && cd chunky && pip install -e .
Verificarpython -c "import chunky; print('ok')"

Estágios do Pipeline

EstágioPropósito
ConverterTransforme PDFs/docs em Markdown limpo
LimparRemova boilerplate, corrija artefatos
ChunkDivida texto usando uma estratégia escolhida
InspecionarVisualize os chunks resultantes
CompararExecute múltiplas estratégias e compare
EnriquecerAnexe metadados (cabeçalhos, origem, posição)

Converter e Limpar

import chunky

# Converta um PDF para Markdown limpo
md = chunky.to_markdown("report.pdf")

# Limpe artefatos comuns (cabeçalhos/rodapés, hifenação, ruído)
md = chunky.clean(md)
FunçãoDescrição
to_markdown(path)Converta um documento para Markdown
clean(text)Remova boilerplate e normalize

Estratégias de Chunking

EstratégiaDivide em
Tamanho fixoN tokens/caracteres com sobreposição
RecursivoParágrafos → sentenças → palavras conforme necessário
Markdown / ciente de cabeçalhoEstrutura do documento (#, ##, seções)
SemânticoLimites de similaridade de embedding
Refinamento ciente de tokenMescle chunks pequenos, divida grandes
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # carregue cabeçalhos de seção entre divisões de tabela
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

Inspecionar e Comparar

O diferencial: veja e compare o que cada estratégia produz antes de se comprometer.

# Inspecione limites e tamanhos de chunk
chunky.inspect(chunks)            # tamanhos, sobreposições, limites

# Compare estratégias no mesmo documento
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # por-estratégia stats: contagem, distribuição de tamanho, fragmentação
FunçãoMostra
inspect(chunks)Distribuição de tamanho, sobreposição, limites
compare(text, strategies=[...])Métricas de estratégia lado a lado

Enriquecimento de Metadados

MetadadoUso em recuperação
Caminho de cabeçalhoExpansão de contexto / filtragem
Origem + páginaCitações
Posição/índiceOrdenação e busca de vizinho
Contagem de tokenGerenciamento de orçamento na hora de prompt
enriched = chunky.enrich(chunks, source="report.pdf")
# cada chunk.metadata agora carrega caminho de cabeçalho, página, origem, índice

Fluxos de Trabalho Comuns

# Ponta a ponta: PDF → Markdown limpo → chunks cientes de cabeçalho → enriquecido
import chunky
md = chunky.clean(chunky.to_markdown("manual.pdf"))
chunks = chunky.chunk(md, strategy="header_aware", max_tokens=512, overlap=64)
chunks = chunky.enrich(chunks, source="manual.pdf")
# embed chunk.text, armazene chunk.metadata ao lado em seu BD vetorial
# Escolha uma estratégia com evidência, não adivinhação
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs Outras Abordagens

AspectoChunkyDivisores padrão de frameworkDocling
Comparação de estratégiaPrimeira classeManualLimitada
Conversão + limpezaConstruídaSeparadaConstruída
Melhor paraAjustar a etapa de chunkingInício rápidoParse completo + chunk

Combina bem com Docling para análise e seu BD vetorial para armazenamento — o trabalho do Chunky é acertar a divisão.

Recursos