Skip to main content
Cuando un agente IA necesita responder sobre un PDF de 500 paginas, lo natural seria convertirlo entero a Markdown y meterlo en el prompt. Esto es caro: 250.000 tokens al LLM, segundos de extraccion, y la mayor parte del contenido no se usa. El patron correcto es indexar primero, extraer despues solo lo necesario.

Ventajas

  • Tokens al LLM: 20-30x menos. Cliente IA paga menos.
  • Latencia: spine en 300-700ms incluso para PDFs de 500MB.
  • Coste backend: extrae solo las paginas pedidas, no las 5000. Tu factura baja proporcional.
  • Sin cache servidor: el spine viaja al cliente, no se guarda. Respeta privacidad.
  • Stateless: el agente decide. No requiere session ni job.

Cuando NO usarlo

  • PDFs pequenos (<10 paginas): el coste fijo del spine no compensa. Usa /convert/from-url directo.
  • Necesitas el Markdown completo: salta el indice y pide /convert/from-url sin pages=.
  • Agente que no puede tomar decisiones de routing: necesita logica para mapear pregunta -> secciones.

Como funciona internamente

  1. El backend descarga el PDF (1 vez, no se cachea).
  2. Hace sample de 32 paginas distribuidas (inicio, medio, final) para construir el modelo de fuentes.
  3. Recorre todas las paginas leyendo solo la cabeza (primeros 8 spans) para detectar headings.
  4. Detecta cabeceras/pies repetidos en el 12% superior/inferior de cada pagina.
  5. Devuelve JSON ~5-15KB con todo el mapa.
  6. Borra el temporal y termina.
Coste constante respecto al tamano del PDF: un PDF de 50 paginas y uno de 5000 tardan casi lo mismo en indexarse.

Patron de uso para agentes IA

Patron 1 - busqueda por seccion

Patron 2 - busqueda por densidad

Patron 3 - navegacion guiada al usuario

Comparativa real

PDF de 500 paginas (academic paper, 10MB descomprimido en Markdown): Cliente IA paga 18x menos. Tu backend factura 8x menos compute. Ambos ganan.

Limitaciones honestas

  • Detection heuristica. Sections se detectan por tamano de fuente + numeracion + bold. No es semantica real. Funciona muy bien con documentos estructurados, peor con PDFs free-form.
  • Tablas no detectadas v1. Solo headings + body chars + headers/footers repetidos. Para tablas usa mode=balanced.
  • pages[] truncado a 200. PDFs >200 paginas exponen pages_truncated: true; el agente debe navegar por sections[].
  • Sin cache servidor: cada llamada re-descarga el PDF. Si vas a hacer muchas, conserva el content_hash en el cliente para reusarlo via cache_key= en /convert/from-url.

Compatibilidad con otros endpoints

  • El spine te dice que pedir. La extraccion real va siempre por /convert/from-url (o cualquier otro endpoint de conversion) con pages=.
  • mode=ultra_fast + pages= = combinacion mas rapida.
Ver tambien: POST /pdf/index, POST /convert/from-url, Modos y Formatos.