Desarrollo IAOpen Source

PageIndex: RAG sin Vectores donde un LLM Navega el Árbol del Documento

14 de octubre de 2026
10 min de lectura
Una pequeña estructura ramificada de alambre fino y cuentas sobre una superficie neutra, que sugiere un índice en árbol
Compartir:

PageIndex (VectifyAI/PageIndex) saca la base de datos vectorial del RAG: convierte un PDF largo en un árbol jerárquico de secciones y deja que un LLM razone bajando por ese árbol hasta las páginas que responden la pregunta. Sin embeddings, sin chunking, sin vector store.

Leí el README, la documentación y el código del paquete el 2026-10-14 para separar lo que hace el modo local open source de lo que solo vive en la nube del vendor. No lo corrí: cada comando y cada número de abajo está atribuido a su fuente.

1. Qué Es: Stars, Licencia y Alcance

PageIndex es un SDK de Python de Vectify AI. Su README lo define como un motor de RAG sin vectores y basado en razonamiento: cada documento recibe un índice en árbol (pensalo como una tabla de contenidos con resúmenes) y el modelo de chat busca en ese árbol en lugar de hacer una consulta por similitud sobre embeddings de chunks.

⭐

Stars en GitHub

39,124

API de GitHub, 2026-10-14. Repo creado el 2025-04-01

⚖️

Licencia

MIT

Archivo LICENSE y metadatos de PyPI

🏷️

Última versión

v0.4.0

Publicada el 2026-10-12. Requiere Python 3.10+

🐍

Lenguaje

Python

pip install -U pageindex

RAG vectorial vs PageIndex (la comparación del propio README)

RAG vectorialPageIndex
ÍndiceÍndice vectorial de embeddings de chunksÍndice en árbol de la estructura del documento
RecuperaciónBúsqueda por similitud semánticaRazonamiento del LLM sobre el árbol
ResultadoOpaco, “vibe retrieval”Trazable a referencias explícitas
ContextoSolo el embedding de la consultaPuede usar el historial de la conversación y conocimiento del dominio

Leé esa tabla como la postura del vendor

Cada fila es el planteo de los autores. La pregunta útil no es si los árboles le ganan a los vectores en general, sino cuáles de tus documentos tienen una estructura que un árbol pueda aprovechar. La sección 7 lo aborda.

2. La Arquitectura en 4 Pasos

Juntando el README, el post de PageIndex Flash (2026-08-26), el post original de PageIndex (2025-09-19) y las agent tools del paquete, el flujo son cuatro pasos.

🌳

1. Construir el árbol desde el layout

Flash, el indexador local por defecto, lee el layout existente del PDF para extraer el esquema. Según el README la estructura sale del layout del documento sin un LLM; el modelo de índice solo escribe los resúmenes de los nodos y refina el árbol, y los autores dicen que alcanza con un modelo básico.

🗂️

2. Guardar el índice en local

El árbol y sus referencias de página se guardan en un directorio local (el modo Cloud los guarda en el almacenamiento de PageIndex). Cada nodo apunta a su contenido original por node_id, que es como un nodo se vuelve páginas reales más adelante.

🧭

3. El modelo de chat lee el esquema y elige secciones

En la consulta, el modelo que responde, no un lookup de embeddings, recibe el esquema. En las agent tools del paquete esto es get_document_structure, y para documentos de más de 20 páginas las instrucciones locales le piden al agente leer primero la estructura.

🔁

4. Traer páginas, verificar y responder con citas

El agente trae páginas con get_page_content usando rangos como “1-3,7”, chequea si tiene suficiente y vuelve atrás si no (el loop del post original: leer el índice, elegir una sección, extraer, verificar suficiencia, responder). Si sumás client.citation_prompt(), las respuestas llevan tags de página como <cite doc=“report.pdf” page=“12”/>.

De dónde salen los nombres de las tools

La página de docs sobre agentes no lista los nombres de las tools. browse_documents, get_document, get_document_structure y get_page_content salen de agent_tools.py en el repositorio al 2026-10-14, más remove_document cuando include_management=True. Tratalos como internos: la v0.2.21 ya cambió la forma del árbol de manera breaking.

3. Quickstart (Verificado contra el README, 2026-10-14)

El comando de instalación y los dos snippets están copiados del README. No los ejecuté: el pip install y las llamadas al LLM los corrés vos en un entorno virtual limpio con tu propia key.

Instalación

pip install -U pageindex

Modo local: indexar y chatear en tu máquina

import os
from pageindex import PageIndexClient

os.environ["OPENAI_API_KEY"] = "your-openai-key"

client = PageIndexClient(
    index="gpt-6-luna",                 # model to build the tree index
    chat="gpt-6-sol",                   # model to search the tree
)
doc_id = client.submit_document("report.pdf")["doc_id"]

answer = client.chat("What was the 2023 operating margin?", doc_id=doc_id)
print(answer)

Modo Cloud: mismo cliente, índice guardado por PageIndex

import os
from pageindex import PageIndexClient

os.environ["PAGEINDEX_API_KEY"] = "your-pageindex-key"
os.environ["OPENAI_API_KEY"] = "your-openai-key"

client = PageIndexClient(
    index="cloud",                       # build and store the index in PageIndex Cloud
    chat="gpt-6-sol",                    # use your preferred compatible model for chat
)
doc_id = client.submit_document("report.pdf", wait=True)["doc_id"]
print(client.chat("What was the 2023 operating margin?", doc_id=doc_id))

Los nombres de modelos no coinciden dentro del propio README

El quickstart y los defaults de la v0.4.0 usan gpt-6-luna (índice) y gpt-6-sol (chat). La sección de Benchmarks, la documentación y el repo del benchmark usan gpt-5.6-luna y gpt-5.6-sol. Usá los IDs que tu proveedor exponga: el archivo de config dice que los nombres son los de LiteLLM, así que los nombres sueltos son modelos de OpenAI y otros proveedores usan provider/model, por ejemplo anthropic/claude-sonnet-5-5.

Conectarlo a tu propio agente

docs.pageindex.ai/sdk/agents lista estos helpers. Las tools son de solo lectura salvo que pases include_management=True.

  • • client.agent_tools(): funciones Python planas para cualquier framework
  • • client.as_openai_tools(): OpenAI Agents SDK
  • • client.as_anthropic_tools(): tool runner del SDK de Anthropic
  • • client.as_claude_mcp(): configuración MCP para el Claude Agent SDK

Fijá la versión

Salieron cinco releases entre el 2026-09-21 y el 2026-10-12. La v0.2.19 renombró resolve_citations a get_citations y la v0.2.21 cambió la forma del árbol, ambas marcadas como breaking en las notas de release. La v0.4.0 exige Python 3.10+ y litellm 1.105.0+. Fijá pageindex==0.4.0 y leé las notas antes de cada upgrade.

4. Local vs Cloud: Lo Que el Modo Open Source No Hace

Esta es la parte que la mayoría de los resúmenes se saltea. La tabla del propio README, donde la columna Cloud es el servicio alojado del vendor:

CaracterísticaLocal (open source)Cloud
DocumentosPDFs con textoCon texto, escaneados y con muchas imágenes
IndexaciónEn tu máquinaGestionada por PageIndex
AlmacenamientoDirectorio localAlmacenamiento cloud
CitasNivel páginaNivel bloque
OCR y comprensión de imágenes—✓
Metadatos—✓
Carpetas—✓
Servidor MCP—✓

La consecuencia práctica: una pila de contratos escaneados, o presentaciones donde el significado está en las figuras, es trabajo para Cloud (ahí corren el OCR y la comprensión de imágenes). El paquete local lee solo la capa de texto del PDF.

MCP es una función de Cloud

El servidor MCP alojado (https://api.pageindex.ai/mcp, API key como Bearer) responde preguntas sobre documentos ya indexados en tu cuenta de PageIndex Cloud. El SDK también tiene un helper as_claude_mcp() para el Claude Agent SDK; la tabla del README igual lista el servidor MCP como solo Cloud, y no verifiqué cómo se comporta ese helper en modo local.

Escalar también es territorio del vendor

El post de PageIndex File System (2026-05-03) describe una capa de árbol sobre muchos documentos: nodos virtuales por tema, metadatos inferidos por LLM y navegación capa por capa. Viene con PageIndex Enterprise, y el despliegue en cloud se anunció como próximo. No es parte del modo local open source, y el post no da cifras de costo ni de latencia.

5. Costo y Latencia: Lo Que Realmente Cuesta la Búsqueda en Árbol con LLM

Una consulta vectorial es una llamada de embedding, un lookup en el índice y una generación. Una consulta de PageIndex es un loop de LLM de varios pasos: el modelo que responde lee el esquema, pide páginas, evalúa si tiene suficiente y puede dar otra vuelta. Eso lo pagás en tokens y en segundos. Estos son los números del propio vendor, todos autoreportados.

💵

~$0.001 / página

Costo de indexación local

README, modelo de índice gpt-5.6-luna: un libro de 1,000 páginas cuesta un poco más de $1, una sola vez

⏱️

13 s a 4.5 min

Tiempo de indexación

Documentos del benchmark de 9 a 1,098 páginas, mismo setup local

🎯

85.5% a 100%

Precisión en 62 preguntas

gpt-5.6-luna sin razonamiento: 85.5% (53/62) a $0.0031 por pregunta; esfuerzo alto: 96.8% a $0.0036; gpt-5.6-sol medio o alto: 100% a unos $0.081

📄

2.1x a 16.6x

PDF nativo vs árbol, costo por consulta

De 52 hasta 420 páginas; con 805 páginas el PDF ya no entra en la ventana de contexto. Sin prompt caching

Lo que los números no te dicen

El benchmark no reporta latencia y no tiene baseline de RAG vectorial. Cubre 62 preguntas de búsqueda cuyas respuestas están en texto corrido (se excluyeron gráficos, tablas, figuras y aritmética), y los documentos que PageIndex se negó a indexar quedaron afuera en lugar de contarse como fallos. La cifra de 98.7% en FinanceBench sale del post de Mafin 2.5 (2025-02-19): no nombra el modelo ni quién corrigió, y dice que otros sistemas se probaron en el 66.7% del dataset. El gráfico del README muestra al RAG vectorial en 50%.

Mi lectura (inferencia, no una medición)

Comparado con un solo lookup vectorial, cada pregunta suma idas y vueltas al LLM, y el modelo que hace la búsqueda es el caro que el README te dice que compres (“el mejor modelo que puedas pagar”). Para pocos documentos y una persona esperando, está bien. Para volumen alto de consultas o un presupuesto de latencia en milisegundos, medilo con tus propias preguntas antes de comprometerte. No encontré ningún benchmark independiente de latencia.

6. Dónde Encaja

Estas son las formas de problema a las que apunta el diseño, según cómo lo describe el vendor. No las probé yo.

📊

Informes financieros y regulatorios largos

Memorias anuales y presentaciones con estructura de títulos real y referencias cruzadas. FinanceBench, el benchmark que cita el vendor, está armado con filings de la SEC.

📘

Manuales, specs y libros de texto

Documentos donde la respuesta vive en una sección y las referencias del estilo “ver Apéndice G” importan, un caso que el post original dice que la búsqueda por similitud pierde.

⚖️

Contratos y políticas con necesidad de auditoría

Cuando tenés que mostrar de qué página salió una respuesta: las citas a nivel página vuelven como datos estructurados con get_citations.

🤖

Una herramienta de documentos dentro de tu propio agente

Dale a un agente un puñado de PDFs de referencia largos con los helpers del OpenAI Agents SDK, el SDK de Anthropic o el Claude Agent SDK.

7. Cuándo NO Usarlo

Esta es la sección que me hubiera gustado leer antes de adoptarlo.

✅ Encaja bien si...

  • • Tenés un puñado de PDFs largos con texto y títulos reales
  • • Necesitás citas trazables a nivel página, no solo una respuesta
  • • El volumen de consultas es bajo y de todos modos hay una persona esperando
  • • Querés indexar en tu propia máquina y aceptás que el texto igual va al proveedor de LLM que configures
  • • Podés pagar un modelo de chat fuerte para el paso de búsqueda

⚠️ Evitalo (o andá híbrido) si...

  • • Tus PDFs están escaneados o llenos de imágenes y tenés que quedarte en local: el modo local lee solo la capa de texto
  • • Buscás sobre miles de documentos: la capa de árbol multi-documento es Enterprise y Cloud, no el paquete open source
  • • Necesitás latencia de milisegundos o consultas baratas a volumen alto
  • • Tus consultas son identificadores exactos como códigos de error o SKUs: la búsqueda léxica o híbrida está hecha para eso
  • • Tu contenido no tiene estructura (logs de chat, tickets, páginas scrapeadas): un árbol tiene poco con qué trabajar
  • • Necesitás MCP, carpetas o metadatos sin la nube del vendor
  • • Necesitás una API estable hoy: tuvo cambios breaking dos veces en el último mes

Mi postura

Tratá a PageIndex como una capa de navegación para los pocos documentos que importan, no como un reemplazo directo de tu vector store. Si ya corrés búsqueda híbrida, quedátela para descubrir dentro del corpus y dejá que una lectura guiada por árbol se ocupe del documento profundo. Elijas lo que elijas, armá primero un set de preguntas etiquetadas: el benchmark de arriba es del vendor, y los únicos números que cuentan son los de tus documentos.

Conclusión

PageIndex es una idea clara y bien acotada: que el modelo lea el esquema como lo haría una persona y después abra solo las páginas que necesita. El paquete open source te da eso para PDFs con texto en tu propia máquina, con una factura de LLM chica al indexar y más grande al consultar.

Lo que no te da gratis es OCR, carpetas, metadatos, un servidor MCP alojado ni la capa de árbol multi-documento. Eso es la oferta cloud y enterprise del vendor, y conviene saber dónde queda esa línea antes de diseñar alrededor.

Sello de verificación

Los comandos, los nombres de API y los números se chequearon contra el README, las páginas de docs, el listado de código del paquete, PyPI y las notas de release el 2026-10-14 (v0.4.0). No instalé ni corrí el paquete. Las cifras de benchmark son del vendor y autoreportadas.

Fuentes

Diego Rodriguez

Diego Rodriguez

Ingeniero Senior Full-Stack & AI

Diego tiene mas de 9 anos de experiencia construyendo aplicaciones potenciadas por IA de produccion, desde orquestacion de LLMs y pipelines RAG hasta deteccion de riesgos con ML y sistemas de trading algoritmico.

Conoce mas sobre Diego →