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
| Palabra | Qué significa |
|---|---|
| Trozo | una parte de un documento que se indexa |
| Ruta de títulos | los títulos sobre un trozo, de arriba abajo |
| Metadatos | datos guardados junto a un trozo, como su fuente |
| Encabezado de tabla | la primera fila, que nombra cada columna |
| Miga de pan | una ruta de títulos escrita en una sola línea |
| Trozo huérfano | un 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ón | Lo que se indexa |
|---|---|
| Cortada sin más | | grande | 5 euros | |
| Con su encabezado | artículo: grande, tarifa: 5 euros |
| Con la ruta también | Manual 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
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
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
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
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
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
docker exec -w /home/node/project agent node chunk1.jsSe 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
| Trozo | Texto conservado |
|---|---|
| Manual de la tienda > Horario | La tienda abre a las nueve entre semana. |
| Manual de la tienda > Devoluciones > Plazo | Devuelve un paquete en treinta días. |
| Manual de la tienda > Devoluciones > Tarifas | artí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.