¿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

Dividir documentos estructurados

Después de esta lección: Puedo dividir un documento estructurado para que cada trozo conserve su título, el encabezado de su tabla y su fuente.

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

Una fila sin su encabezado

La calidad de los trozos significa que un trozo de documento se puede encontrar y entender por sí solo. Importa porque la búsqueda devuelve trozos, y un trozo que perdió su título o el encabezado de su tabla no dice nada.

Una tabla de tarifas se corta fila a fila. La fila «grande, 5 euros» se devuelve para «cuánto cuesta un paquete grande». No dice a qué corresponden los 5 euros.

Al final de esta lección

Nota

Puedo dividir un documento estructurado para que cada trozo conserve su título, el encabezado de su tabla y su fuente.

Palabras clave

PalabraQué significa
Trozouna parte de un documento que se indexa
Ruta de títuloslos títulos sobre un trozo, de arriba abajo
Metadatosdatos guardados junto a un trozo, como su fuente
Encabezado de tablala primera fila, que nombra cada columna
Miga de panuna ruta de títulos escrita en una sola línea
Trozo huérfanoun trozo que no significa nada sin su contexto

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

Conserva la ruta de títulos en cada trozo

En el módulo de Generación aumentada con recuperación dividiste un documento por tamaño y por títulos. El siguiente paso es conservar los títulos. Un trozo bajo «Devoluciones > Tarifas» debe llevar esa ruta, escrita como miga de pan: Manual de la tienda > Devoluciones > Tarifas.

Indexa la ruta con el texto. Una búsqueda de «devoluciones tarifas» encuentra entonces el trozo aunque el cuerpo nunca diga «devoluciones».

Una fila de tabla necesita su encabezado

Una tabla es un encabezado y unas filas. Si la cortas fila a fila, cada fila pierde el encabezado. Por eso se convierte cada fila en palabras que lo lleven: «artículo: grande, tarifa: 5 euros».

Una lista sigue la misma regla. Conserva la frase que la introduce con cada elemento, o el elemento queda suelto.

Ejemplo resuelto: la misma fila, antes y después

VersiónLo que se indexa
Cortada sin más| grande | 5 euros |
Con su encabezadoartículo: grande, tarifa: 5 euros
Con la ruta tambiénManual de la tienda > Devoluciones > Tarifas: artículo: grande, tarifa: 5 euros

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

Metadatos y control de tamaño

Guarda metadatos junto a cada trozo: su archivo de origen, su título y más adelante su propietario y su fecha. Los metadatos permiten que una respuesta cite de dónde viene, y la lección 5 los usará para filtrar.

Después comprueba el tamaño. Una sección mucho más larga que las demás contiene dos ideas y debe dividirse otra vez. Informa de los títulos demasiado largos.

Un error frecuente

Advertencia

Mucha gente cree que cortar cada 500 caracteres basta para cualquier documento. Ese corte atraviesa tablas y títulos, y deja huérfanos. Corta primero por la estructura, y usa el tamaño solo para volver a dividir lo que siga siendo demasiado largo.

Escribe el divisor, parte 1

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const doc = [' '  \"# Manual de la tienda\",' '  \"## Horario\",' '  \"La tienda abre a las nueve entre semana.\",' '  \"## Devoluciones\",' '  \"### Plazo\",' '  \"Devuelve un paquete en treinta días.\",' '  \"### Tarifas\",' '  \"| artículo | tarifa |\",' '  \"| pequeño | 2 euros |\",' '  \"| grande | 5 euros |\",' '];' > chunk1.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 divisor, parte 2

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function cells(line) {' '  return line.split(\"|\").map(function (c) { return c.trim(); }).filter(function (c) { return c.length > 0; });' '}' >> chunk1.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 divisor, parte 3

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function chunks(lines, source) {' '  const path = [];' '  const out = [];' '  let head = null;' '  lines.forEach(function (line) {' '    const m = line.match(/^(#+) (.*)/);' '    if (m) {' '      path.length = m[1].length - 1;' '      path.push(m[2]);' '      out.push({ source: source, heading: path.join(\" > \"), rows: [] });' '      head = null;' '      return;' '    }' >> chunk1.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 divisor, parte 4

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' '    const now = out[out.length - 1];' '    if (line.startsWith(\"|\") === false) { now.rows.push(line); return; }' '    const c = cells(line);' '    if (head === null) { head = c; return; }' '    now.rows.push(head.map(function (h, i) { return h + \": \" + c[i]; }).join(\", \"));' '  });' '  return out;' '}' >> chunk1.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 divisor, parte 5

Comando
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'console.log(\"Una fila de tabla suelta:\", doc[9]);' 'chunks(doc, \"manual.md\").filter(function (c) { return c.rows.length > 0; }).forEach(function (c) {' '  console.log(c.source + \" | \" + c.heading + \" | \" + c.rows.join(\" / \"));' '});' >> chunk1.js"

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

Ejecuta y lee los trozos

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

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

Esto es un sustituto

El Run lee diez líneas de un Markdown inventado. Un documento real puede ser un PDF, una página web o una hoja de cálculo, y necesita un analizador para cada uno. La idea es la misma: encontrar la estructura y conservarla.

El Run no llama a ningún modelo.

Lo que imprime el Run

TrozoTexto conservado
Manual de la tienda > HorarioLa tienda abre a las nueve entre semana.
Manual de la tienda > Devoluciones > PlazoDevuelve un paquete en treinta días.
Manual de la tienda > Devoluciones > Tarifasartículo: pequeño, tarifa: 2 euros / artículo: grande, tarifa: 5 euros

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

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.