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)
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:
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
- VectifyAI/PageIndex: README, LICENSE y repositorio (MIT, Python)
- Notas de release de PageIndex v0.4.0 (2026-10-12)
- PyPI: pageindex 0.4.0 (Python 3.10+, MIT)
- Docs de PageIndex: Getting started (instalación, local vs cloud, index= y chat=)
- Docs de PageIndex: Agents (agent_tools, as_openai_tools, citas)
- Docs de PageIndex: servidor MCP (API key, api.pageindex.ai/mcp)
- Blog de PageIndex: Next-Generation Vectorless, Reasoning-based RAG (2025-09-19)
- Blog de PageIndex: PageIndex Flash (2026-08-26)
- Blog de PageIndex: Scale PageIndex to Millions of Documents (2026-05-03)
- VectifyAI/PageIndex-OSS-Benchmark: 62 preguntas, 34 PDFs, tabla de resultados
- Blog de PageIndex: Mafin 2.5 y la cifra de FinanceBench (2025-02-19, reportada por el vendor)



