LlamaParse - Parsing de documentos para RAG
LlamaParse es un servicio de parsing de documentos del equipo de LlamaIndex, construido específicamente para pipelines de LLM y RAG. Su enfoque es el caso difícil: PDFs con tablas complejas, layouts multi-columna, figuras y charts embebidos que los extractores de texto genéricos aplanan en texto inutilizable. Produce Markdown limpio que preserva estructura, y su característica distintiva es instrucciones de parsing en lenguaje natural — describes cómo se layout el documento y qué hacer con él, en lugar de configurar reglas de extracción.
LlamaParse es un servicio hospedado con un tier gratuito (API key requerida). Para parsing completamente local ver Docling o Marker.
Instalación
| Método | Comando |
|---|
| pip | pip install llama-parse |
| Con LlamaIndex | pip install llama-index llama-parse |
| API key | export LLAMA_CLOUD_API_KEY="llx-..." |
| Verificar | python -c "from llama_parse import LlamaParse; print('ok')" |
Parsing básico
from llama_parse import LlamaParse
parser = LlamaParse(result_type="markdown")
documents = parser.load_data("./report.pdf")
print(documents[0].text)
| Parámetro | Propósito |
|---|
result_type | "markdown" (preservador de estructura) o "text" |
num_workers | Procesamiento de página paralelo |
verbose | Salida de progreso |
language | Pista de lenguaje del documento |
parsing_instruction | Guía en lenguaje natural (abajo) |
Instrucciones de parsing (el diferenciador)
parser = LlamaParse(
result_type="markdown",
parsing_instruction="""
Este es un reporte financiero. Preserva todas las tablas como tablas Markdown.
Para cada chart, escribe un párrafo de una línea describiendo la tendencia que muestra.
Ignora encabezados y pies de página.
""",
)
Describes el documento y el manejo deseado en lenguaje plano en lugar de escribir código de extracción — útil para layouts específicos del dominio (facturas, papers científicos, contratos legales) donde los parsers genéricos funcionan pobremente.
Async & batch
import asyncio
async def parse_many(paths):
parser = LlamaParse(result_type="markdown", num_workers=8)
return await parser.aload_data(paths)
docs = asyncio.run(parse_many(["a.pdf", "b.pdf", "c.pdf"]))
| Método | Usar |
|---|
load_data(path) | Archivo único, síncrono |
aload_data([paths]) | Async, múltiples archivos |
get_json_result(path) | JSON estructurado con metadata de página |
get_images(...) | Extraer imágenes embebidas |
Entradas soportadas
| Formato | Nota |
|---|
| PDF | Objetivo primario, incluyendo escaneados (OCR) |
| DOCX / PPTX / XLSX | Formatos Office |
| HTML | Documentos web |
| Images | PNG/JPEG vía OCR |
Cableando a un pipeline RAG
from llama_parse import LlamaParse
from llama_index.core import VectorStoreIndex
from llama_index.core.node_parser import MarkdownElementNodeParser
docs = LlamaParse(result_type="markdown").load_data("./manual.pdf")
# Chunking consciente de Markdown mantiene tablas y secciones intactas
node_parser = MarkdownElementNodeParser()
nodes = node_parser.get_nodes_from_documents(docs)
index = VectorStoreIndex(nodes)
Emparejar salida Markdown con un node parser consciente de Markdown es el punto: las tablas sobreviven el parsing y chunking, que es donde la mayoría de pipelines RAG pierden hechos tabulares.
Manejando tablas bien
| Técnica | Por qué |
|---|
result_type="markdown" | Las tablas se convierten en grillas Markdown |
| Instrucción de parsing para tablas | Forzar manejo consistente de tabla |
MarkdownElementNodeParser | Mantiene una tabla en un chunk |
| Serialización row-per-sentence | Hace filas individuales recuperables |
Costo & notas prácticas
| Consideración | Detalle |
|---|
| Servicio hospedado | Los documentos se envían a LlamaCloud |
| Tier gratuito | Páginas limitadas por día |
| Caching | Re-parsear el mismo archivo puede reusar resultados |
| Privacidad | Para documentos sensibles, prefiere parsers locales |
LlamaParse vs parsers locales
| Aspecto | LlamaParse | Docling | Marker |
|---|
| Hosting | Servicio en cloud | Local | Local |
| Tablas complejas | Muy fuerte | Fuerte | Bueno |
| Instrucciones personalizadas | Lenguaje natural | Config | Config |
| Privacidad | Los datos dejan tu máquina | Completamente local | Completamente local |
| Mejor para | Layouts difíciles, resultados rápidos | Ingesta RAG self-hosted | Conversión bulk local |
Para corpus sensibles a privacidad usa Docling; para conversión bulk local usa Marker.
Recursos