Ir al contenido

Chunky - Kit de Herramientas de Chunking para RAG

Chunky - Kit de Herramientas de Chunking para RAG

Chunky es un conjunto de herramientas de código abierto para construir canalizaciones de ingestión RAG confiables, enfocadas en la etapa a menudo descuidada de chunking. Convierte PDFs a Markdown, limpia documentos, te deja inspeccionar chunks y comparar estrategias de chunking lado a lado, y enriquece metadatos de chunk para aplicaciones LLM. Porque la calidad de recuperación está limitada por cómo se dividen los documentos, el valor de Chunky es hacer la etapa de chunking visible y ajustable en lugar de un ciego predeterminado.

Instalación

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

Etapas de Canalización

EtapaPropósito
ConvertirConvierte PDFs/docs en Markdown limpio
LimpiarElimina código estándar, corrige artefactos
DividirDivide texto usando una estrategia elegida
InspeccionarVisualiza los chunks resultantes
CompararEjecuta múltiples estrategias y compara
EnriquecerAdjunta metadatos (encabezados, fuente, posición)

Convertir y Limpiar

import chunky

# Convierte un PDF a Markdown limpio
md = chunky.to_markdown("report.pdf")

# Limpia artefactos comunes (encabezados/pies, guionado, ruido)
md = chunky.clean(md)
FunciónDescripción
to_markdown(path)Convierte un documento a Markdown
clean(text)Quita código estándar y normaliza

Estrategias de Chunking

EstrategiaSe divide en
Tamaño fijoN tokens/caracteres con solapamiento
RecursivaPárrafos → oraciones → palabras según sea necesario
Markdown / consciente de encabezadoEstructura de documento (#, ##, secciones)
SemánticaLímites de similitud de incrustación
Refinamiento consciente de tokensFusiona chunks pequeños, divide grandes
chunks = chunky.chunk(
    md,
    strategy="header_aware",
    max_tokens=512,
    overlap=64,
    repeat_headers=True,   # lleva encabezados de sección a través de divisiones de tabla
)
for c in chunks:
    print(len(c.tokens), c.metadata["heading"])

Inspeccionar y Comparar

El diferenciador: ve y compara lo que produce cada estrategia antes de comprometerse.

# Inspecciona límites de chunk y tamaños
chunky.inspect(chunks)            # tamaños, solapamientos, límites

# Compara estrategias en el mismo documento
report = chunky.compare(
    md,
    strategies=["fixed", "recursive", "header_aware", "semantic"],
    max_tokens=512,
)
print(report)   # estadísticas por estrategia: conteo, distribución de tamaño, fragmentación
FunciónMuestra
inspect(chunks)Distribución de tamaño, solapamiento, límites
compare(text, strategies=[...])Métricas de estrategia lado a lado

Enriquecimiento de Metadatos

MetadatosUso en recuperación
Ruta de encabezadoExpansión de contexto / filtrado
Fuente + páginaCitaciones
Posición/índiceOrdenamiento y búsqueda de vecino
Conteo de tokenGestión de presupuesto en tiempo de prompt
enriched = chunky.enrich(chunks, source="report.pdf")
# cada chunk.metadata ahora lleva ruta de encabezado, página, fuente, índice

Flujos de Trabajo Comunes

# De extremo a extremo: PDF → Markdown limpio → chunks conscientes de encabezado → 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")
# incrusta chunk.text, almacena chunk.metadata al lado en tu BD vectorial
# Elige una estrategia con evidencia, no adivinación
print(chunky.compare(md, strategies=["recursive", "header_aware", "semantic"]))

Chunky vs Otros Enfoques

AspectoChunkyDivisores predeterminados del marcoDocling
Comparación de estrategiaClase de primeraManualLimitada
Conversión + limpiezaIntegradaSeparadaIntegrada
Mejor paraAjuste de etapa de chunkingInicio rápidoAnálisis completo + chunk

Funciona bien con Docling para análisis y tu BD vectorial para almacenamiento — el trabajo de Chunky es acertar la división.

Recursos