8 · Dividir documentos en chunks
No puedes embeber un libro entero como un solo vector. El chunking divide los documentos en piezas recuperables — y el tamaño del chunk y el solapamiento deciden si la recuperación es precisa o pierde el hilo.
Antes de poder recuperar, debes dividir los documentos en chunks lo bastante pequeños para embeber y caber en la ventana de contexto, pero lo bastante grandes para ser auto-contenidos. Los chunks de tamaño fijo son simples pero cortan oraciones a la mitad; el solapamiento copia unos tokens a través del borde para que el contexto sobreviva al corte; el corte por oraciones respeta las pausas naturales.
Sin esto:
Chunks demasiado grandes y cada vector es un promedio borroso — la recuperación no distingue qué parte es relevante. Chunks demasiado pequeños sin solapamiento y partes la respuesta a la mitad, así que ningún pedazo contiene el hecho completo. Un mal chunking limita en silencio la calidad de toda respuesta RAG posterior.
Los documentos reales son largos — un manual, un PDF, una página de wiki. No puedes embeber un documento de 50 páginas como un solo vector: el significado se promediaría en una papilla, y la recuperación nunca podría apuntar al párrafo específico que responde una pregunta. Así que el paso cero de todo pipeline RAG es el chunking: dividir cada documento en piezas más pequeñas y recuperables, y luego embeber e indexar esas.
Tres cosas tiran del tamaño del chunk en direcciones opuestas:
- Lo bastante grande para ser auto-contenido. Un chunk debe llevar suficiente contexto alrededor para que, leído solo, siga teniendo sentido.
- Lo bastante pequeño para ser preciso. Chunks más pequeños dan una recuperación más nítida — el vector emparejado trata de una idea, no de un párrafo de temas mezclados.
- Lo bastante pequeño para caber en el presupuesto. Meterás varios chunks en el prompt, así que cada uno debe dejar espacio para el resto más la respuesta (el presupuesto de tokens de la lección 2).
Las estrategias clásicas:
- Tamaño fijo — cada
sizecaracteres (o palabras) forma un chunk. Súper simple, pero corta una oración — incluso una palabra — a la mitad sin reparo. - Tamaño fijo con solapamiento — cada chunk repite las últimas
overlapunidades del anterior. El texto repetido hace que un hecho que cruza un borde aparezca completo en al menos un chunk. - Por oración / estructura — divide en bordes de oración o párrafo para que los chunks nunca corten a media idea (a menudo combinado con un límite de tamaño).
Implementemos las dos primeras y veamos cómo el solapamiento salva un hecho que un corte duro habría partido.
Python (in browser)
chunk_text desliza una ventana de `size` palabras avanzando `size - overlap`. Con solapamiento, los hechos que cruzan el borde reaparecen intactos en un chunk vecino.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Las ventanas fijas son ciegas al significado — cortarán "30 days of purchase" justo después de "30". El corte por oraciones lo arregla quebrando solo al final de cada oración, y luego empaquetando oraciones en chunks hasta un límite de tamaño. Así cada chunk contiene oraciones completas, y ningún hecho se parte a media cláusula.
Python (in browser)
El chunking por oraciones empaqueta oraciones completas hasta un límite de palabras, así la recuperación siempre coincide contra hechos gramaticalmente completos y auto-contenidos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Los divisores en producción (RecursiveCharacterTextSplitter de LangChain) combinan las tres ideas: prefieren separadores naturales, limitan el tamaño y solapan en los bordes.
¿Por qué añadir solapamiento entre chunks consecutivos?
- El chunking divide documentos largos en piezas recuperables antes de embeber — demasiado grande difumina el significado, demasiado pequeño pierde la auto-contención.
- El solapamiento repite texto en los bordes para que un hecho que cruza un corte siga apareciendo completo en un chunk vecino — a costa de un índice más grande.
- El corte por oraciones o estructura respeta las pausas naturales para que los chunks nunca corten a media oración; los divisores en producción combinan las tres estrategias.
Todo trabajo de ingesta RAG — indexar docs, PDFs, código, transcripciones — corre primero un chunker; el tamaño del chunk y el solapamiento son los mandos más ajustados cuando la calidad de recuperación es mala.
Si lo quitas: Sin chunking o no puedes indexar documentos largos, o los indexas como un solo vector borroso — la recuperación devuelve manchas vagas de temas mezclados que no responden la pregunta.