¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo dividir un documento en trozos

Después de esta lección: Puedo dividir un documento para que cada trozo se pueda encontrar.

Lección de 60 min3 comandosLaboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

Una respuesta en una hoja larga

Dividir un documento en trozos (en inglés chunking) es partirlo en piezas lo bastante pequeñas para encontrarlas y leerlas una a una. Importa porque la recuperación devuelve trozos enteros, y su tamaño decide lo que recibes.

Una biblioteca tiene una sola hoja con el horario, las normas de préstamo y las salas. Alguien pregunta por las multas. La respuesta cabe en una frase. Darle la hoja entera la entierra.

Al final de esta lección

Nota

Puedo dividir un documento para que cada trozo se pueda encontrar.

Palabras clave

PalabraQué significaEjemplo
Trozouna pieza de un documento dividido
Tamañocuántas palabras tiene un trozo8
Solapamientolas palabras que comparten dos trozos seguidos
Encabezadouna línea de título que abre una sección
Recuperaciónencontrar los trozos que responden a una pregunta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Por qué se corta un documento en trozos

Un solo vector para toda una hoja mezcla todos sus temas en un promedio. Una pregunta sobre multas no parece entonces más cercana a la hoja que una pregunta sobre salas.

Un trozo pequeño trata de una sola cosa, y su vector apunta con claridad. Además es lo bastante corto para meterlo después en un prompt, junto a unos pocos más.

Tamaño y solapamiento

La división más sencilla cuenta palabras. Un trozo de 8 palabras tiene 8 palabras. El siguiente empieza unas palabras antes de donde terminó el anterior. Esas palabras compartidas son el solapamiento.

El solapamiento evita cortar una idea por la mitad. Una frase en el borde de un trozo aparece también al principio del siguiente.

Ejemplo resuelto: solapamiento en diez palabras

TrozoEmpieza en la palabraPalabras
11a b c d
24d e f g
37g h i j

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Cortar en los encabezados mantiene unida una idea

Un recuento de palabras no sabe dónde acaba una idea. Un encabezado sí. Si el documento tiene encabezados, empieza un trozo nuevo en cada uno.

El script de abajo hace las dos cosas. Divide la hoja de la biblioteca por sus encabezados y luego corta una sección por palabras con solapamiento.

Escribe el script de división, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const sheet = \"# Horario\nLa biblioteca abre a las 9:00 de lunes a viernes. El sábado abre a las 10:00. El domingo está cerrada.\n# Préstamo\nSe pueden prestar 8 libros durante 3 semanas. Cada día de retraso cuesta 20 céntimos. Cada libro se puede renovar dos veces por internet.\n# Salas de estudio\nUna sala admite a 6 personas. Se reserva en el mostrador o por internet. Una reserva dura 2 horas.\";' 'function byHeading(text) {' '  const parts = [];' '  const lines = text.split(\"\n\");' '  for (let i = 0; i < lines.length; i++) {' '    if (lines[i].startsWith(\"# \")) {' '      parts.push({ heading: lines[i].slice(2), text: \"\" });' '    } else {' '      const last = parts[parts.length - 1];' '      last.text = (last.text + \" \" + lines[i]).trim();' '    }' '  }' '  return parts;' '}' > chunk.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe el script de división, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function byWords(text, size, overlap) {' '  const words = text.split(\" \");' '  const chunks = [];' '  let start = 0;' '  while (start < words.length) {' '    chunks.push(words.slice(start, start + size).join(\" \"));' '    if (start + size >= words.length) break;' '    start = start + size - overlap;' '  }' '  return chunks;' '}' 'const parts = byHeading(sheet);' 'console.log(\"Por encabezado:\", parts.length, \"trozos\");' 'parts.forEach(function (part) { console.log(\"-\", part.heading + \":\", part.text.split(\" \").length, \"palabras\"); });' 'const pieces = byWords(parts[1].text, 8, 3);' 'console.log(\"Por palabras, tamaño 8, solapamiento 3:\", pieces.length, \"trozos\");' 'pieces.forEach(function (piece) { console.log(\"-\", piece); });' >> chunk.js"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecútalo y lee los trozos

Comando
docker exec -w /home/node/project agent node chunk.js

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lo que muestra

LíneaQué indica
Por encabezado: 3 trozosUn trozo por encabezado
- Préstamo: 24 palabrasEl tamaño del trozo del medio
Por palabras, tamaño 8, solapamiento 3: 5 trozosEl texto del préstamo cortado en cinco
- dos veces por internet.Sus tres primeras palabras acaban también el trozo anterior

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que los trozos grandes son más seguros porque contienen más. Un trozo grande tiene un vector que mezcla varios temas, y llena el prompt. Elige el trozo más pequeño que aún contenga una respuesta entera.

Sobre este laboratorio y su código: Laboratorio de agente de programación con IA: usa opencode para explicar y corregir código, y comprueba su trabajo

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.