⏱️ Lectura: 12 min

El rag multimodal es la respuesta a una limitación incómoda del RAG clásico: los documentos del mundo real no son solo texto. Un PDF científico mezcla párrafos con figuras, tablas, fórmulas y, a veces, fragmentos de código. Cuando un sistema de Retrieval-Augmented Generation se restringe a texto plano, descarta entre 30% y 50% de la información útil de un documento técnico promedio. RAG-Anything, publicado por el grupo HKUDS de la Universidad de Hong Kong, ataca ese problema con un framework all-in-one que procesa cualquier tipo de contenido dentro de un único pipeline coherente.

📑 En este artículo
  1. Abstract: el problema del RAG limitado a texto
  2. Qué es RAG-Anything
  3. Cómo funciona: arquitectura dual-graph
    1. Grafo textual
    2. Grafo modal
    3. Cross-modal hybrid retrieval
  4. El pipeline de 5 etapas
    1. Etapa 1: Parsing
    2. Etapa 2: Análisis modal
    3. Etapa 3: Extracción de conocimiento
    4. Etapa 4: Indexación
    5. Etapa 5: Query
  5. Implementación práctica
    1. Instalación
    2. Indexar un PDF con texto, imágenes y tablas
    3. Consulta multimodal
  6. Benchmarks reportados
  7. Casos de uso reales
  8. Ventajas y desventajas
    1. Ventajas
    2. Desventajas
  9. Limitaciones y trabajo futuro
  10. Conclusiones
  11. Preguntas frecuentes
    1. ¿RAG-Anything reemplaza a LightRAG?
    2. ¿Necesito un VLM caro como GPT-4o para usarlo?
    3. ¿Qué storage usa por defecto?
    4. ¿Cuánto cuesta indexar 1000 papers?
    5. ¿Funciona offline con modelos locales?
    6. ¿Cómo se compara con LlamaIndex multimodal o LangChain?
  12. Referencias

En este artículo desarmamos la arquitectura completa: cómo se construye el dual-graph que conecta entidades textuales con elementos visuales, cómo funciona el cross-modal hybrid retrieval, qué hace cada una de las cinco etapas del pipeline (parsing, análisis modal, extracción de conocimiento, indexación y consulta), y cómo se instala y utiliza desde Python en menos de diez líneas. Todo el material se basa en el paper arXiv 2510.12323 y los repositorios oficiales en GitHub.

Abstract: el problema del RAG limitado a texto

El RAG tradicional sigue una receta sencilla: dividir documentos en chunks, embeberlos con un modelo como text-embedding-3-large o bge-m3, almacenarlos en una base vectorial (FAISS, Qdrant, pgvector) y, en tiempo de consulta, recuperar los k más cercanos para inyectarlos en el contexto del LLM. Funciona bien para wikis, documentación técnica plana o transcripciones, pero falla cuando el conocimiento vive en formatos no textuales:

  • Diagramas de arquitectura — un grafo dice más que mil palabras, pero el OCR los pierde.
  • Tablas comparativas — la relación fila-columna desaparece al linealizarlas.
  • Fórmulas matemáticas — LaTeX mal extraído rompe el contexto semántico.
  • Figuras experimentales — un benchmark se entiende mirando la curva, no leyendo la leyenda.

RAG-Anything propone un sistema unificado donde cada modalidad mantiene su semántica original durante todo el flujo, en lugar de aplastarla a texto perdiendo información estructural.

Qué es RAG-Anything

RAG-Anything es una librería Python open-source ([raganything en PyPI](https://pypi.org/project/raganything/)) construida por el equipo del Hong Kong University Data Science Lab (HKUDS). Combina dos proyectos previos del mismo grupo:

  • LightRAG — un framework RAG basado en grafos de conocimiento que combina retrieval por entidades y por relaciones.
  • MinerU — un parser de documentos PDF/DOCX desarrollado por OpenDataLab que preserva layout, tablas y figuras con alta fidelidad.

La novedad técnica de RAG-Anything está en cómo orquesta ambos sistemas y añade una capa de análisis modal especializado: cada figura se describe con un Vision-Language Model (VLM), cada tabla se serializa preservando su estructura relacional y cada fórmula se normaliza a LaTeX antes de entrar al grafo de conocimiento.

Arquitectura del framework rag multimodal RAG-Anything con dual-graph
Arquitectura general: parsing, análisis modal, dual-graph y retrieval híbrido.

Cómo funciona: arquitectura dual-graph

El corazón conceptual del sistema es la estructura dual-graph. En lugar de un único grafo de conocimiento, RAG-Anything mantiene dos grafos interconectados:

Grafo textual

Equivalente al de LightRAG: nodos son entidades extraídas del texto (personas, conceptos, organizaciones, métodos), aristas son relaciones semánticas (causa, parte-de, equivalente-a). Se construye con extracción guiada por LLM sobre los chunks textuales del documento.

Grafo modal

Cada elemento no textual (imagen, tabla, ecuación) se convierte en un nodo modal con tres atributos:

  • Embedding visual — del VLM, captura la apariencia.
  • Caption generado — descripción textual producida por el VLM.
  • Contexto local — los párrafos cercanos donde aparece el elemento.

Las aristas entre ambos grafos se llaman cross-modal links y se generan cuando una entidad textual es mencionada en el caption de una figura, o cuando una tabla referencia un concepto del cuerpo del documento. Esa conectividad bidireccional permite saltar de “¿qué dice la Figura 3?” a “¿qué entidades del paper aparecen en la Figura 3?” en un solo hop.

💭 Clave: el dual-graph no es decoración arquitectónica. Es lo que permite que una query como “compará el rendimiento de los modelos en la tabla 2” recupere simultáneamente la tabla, su descripción textual y los párrafos que la contextualizan.

Cross-modal hybrid retrieval

En el momento de la consulta, RAG-Anything ejecuta tres búsquedas en paralelo y fusiona resultados:

  1. Vector search textual — sobre los embeddings de chunks.
  2. Graph traversal — sobre el grafo de entidades, expandiendo desde las entidades nombradas en la query.
  3. Modal retrieval — busca elementos visuales relevantes vía similaridad de embedding o coincidencia de caption.

Los resultados se rerankean con scoring híbrido y se inyectan al LLM como contexto. Cuando el modelo es un VLM (GPT-4o, Claude 3.5 Sonnet, Qwen2-VL), las imágenes se pasan como entrada nativa; cuando es un LLM solo-texto, se usa el caption generado.

El pipeline de 5 etapas

Estructuralmente, el flujo desde un PDF hasta una respuesta atraviesa cinco fases bien definidas.

flowchart LR
  A[PDF/DOCX] --> B[1. Parsing<br/>MinerU]
  B --> C[2. Análisis modal<br/>VLM + parsers]
  C --> D[3. Extracción de<br/>conocimiento]
  D --> E[4. Indexación<br/>dual-graph]
  E --> F[5. Query<br/>retrieval híbrido]
  F --> G[Respuesta]

Etapa 1: Parsing

MinerU procesa el documento de entrada y produce un JSON estructurado con bounding boxes, tipos de elemento (texto, imagen, tabla, fórmula) y orden de lectura. Soporta PDF, DOCX, PPTX y formatos de imagen (PNG, JPG con OCR).

Etapa 2: Análisis modal

Cada elemento se rutea al procesador adecuado: el texto va a un chunker semántico, las imágenes a un VLM que produce descripciones detalladas, las tablas a un serializador que preserva la estructura relacional, las fórmulas a un normalizador LaTeX.

Etapa 3: Extracción de conocimiento

Sobre los chunks de texto se aplica extracción de entidades y relaciones guiada por LLM (mismo enfoque que LightRAG). Sobre los elementos modales, se generan tripletas a partir de los captions visuales.

Etapa 4: Indexación

Se construyen los dos grafos, se calculan embeddings para nodos textuales y modales, y se establecen los cross-modal links. Todo se persiste en almacenamiento configurable (por defecto, JSON+NumPy local; opcionalmente Neo4j, Milvus, PostgreSQL).

Etapa 5: Query

El retrieval híbrido recupera contexto relevante y se invoca al LLM (o VLM) generador de la respuesta final.

Pipeline de 5 etapas de RAG-Anything procesando un PDF científico
Las cinco etapas convierten un PDF en un grafo consultable.

Implementación práctica

RAG-Anything se distribuye como paquete PyPI estándar. La instalación trae todas las dependencias necesarias incluyendo MinerU.

Instalación

pip install raganything

# Variables de entorno (OpenAI por defecto)
export OPENAI_API_KEY="sk-..."
export OPENAI_BASE_URL="https://api.openai.com/v1"

Indexar un PDF con texto, imágenes y tablas

import asyncio
from raganything import RAGAnything, RAGAnythingConfig
from raganything.llm import openai_complete_if_cache, openai_embed
from functools import partial

config = RAGAnythingConfig(
    working_dir="./rag_storage",
    parser="mineru",
    parse_method="auto",
    enable_image_processing=True,
    enable_table_processing=True,
    enable_equation_processing=True,
)

llm = partial(openai_complete_if_cache, "gpt-4o-mini")
vlm = partial(openai_complete_if_cache, "gpt-4o")
embed = partial(openai_embed, model="text-embedding-3-large")

rag = RAGAnything(
    config=config,
    llm_model_func=llm,
    vision_model_func=vlm,
    embedding_func=embed,
)

async def main():
    await rag.process_document_complete(
        file_path="./papers/transformer.pdf",
        output_dir="./parsed",
        parse_method="auto",
    )

asyncio.run(main())

Esto ejecuta el pipeline completo: MinerU parsea, el VLM describe figuras, el LLM extrae entidades, y el dual-graph se persiste en ./rag_storage.

Consulta multimodal

async def consultar():
    respuesta = await rag.aquery(
        "¿Qué muestra la Figura 1 sobre la atención multi-cabeza? "
        "Compará con los resultados de la Tabla 2.",
        mode="hybrid",  # combina vector + graph + modal
    )
    print(respuesta)

asyncio.run(consultar())

El modo hybrid activa las tres rutas de retrieval simultáneamente. Otros modos disponibles son local (solo entidades cercanas), global (relaciones de alto nivel), naive (vector simple) y mix (híbrido + agente).

💡 Tip: para documentos grandes (papers de más de 50 páginas), conviene usar parse_method="ocr" en vez de auto: aumenta el tiempo de parsing pero captura figuras escaneadas que el modo automático puede saltarse.

Benchmarks reportados

El paper arXiv 2510.12323 evalúa RAG-Anything en cuatro datasets: DocBench (documentos técnicos), MMLongBench-Doc (documentos largos multimodales), PaperQA (preguntas sobre papers científicos) y FinanceBench (informes financieros).

Los resultados, comparados contra baselines de RAG solo-texto (vanilla RAG con GPT-4) y otros sistemas multimodales (M3DocRAG, ColPali), muestran mejoras consistentes:

  • +18% accuracy promedio en preguntas que requieren información de tablas o figuras.
  • +12% en F1 sobre el bench30%k global comparado con RAG vanilla.
  • Reducción del 30% en tokens de contexto inyectado al LLM gracias al retrieval dirigido por grafo.

Las mejoras son especialmente marcadas (más de 25%) en preguntas multi-hop que requieren cruzar información entre texto y figuras, lo que valida empíricamente la hipótesis del dual-graph.

Casos de uso reales

  • Búsqueda en literatura científica — equipos de investigación que indexan miles de papers y necesitan encontrar resultados específicos en figuras y tablas.
  • Análisis de informes financieros — los 10-K y 10-Q de la SEC son PDFs con tablas densas; RAG-Anything las preserva.
  • Documentación técnica empresarial — manuales con diagramas de arquitectura, especificaciones de hardware, esquemas eléctricos.
  • Educación — sistemas de tutoría que pueden razonar sobre los gráficos de un libro de texto.
  • Compliance y legal — contratos con anexos visuales, regulaciones con flujogramas.

Ventajas y desventajas

Ventajas

  • End-to-end — un solo paquete cubre desde el PDF hasta la respuesta.
  • Modelo-agnóstico — funciona con OpenAI, Anthropic, Ollama local, vLLM y cualquier endpoint compatible.
  • Open-source con licencia MIT — uso comercial sin restricciones.
  • Storage configurable — desde JSON local para prototipos hasta Neo4j+Milvus para producción.
  • Construido sobre componentes maduros — LightRAG y MinerU son proyectos consolidados.

Desventajas

  • Costo de indexación — el análisis modal con VLM es caro; un paper de 20 páginas puede consumir entre 0,30 y 1,50 USD de API.
  • Latencia de parsing — MinerU sobre un PDF complejo tarda minutos, no segundos.
  • Calidad dependiente del VLM — captions pobres degradan el cross-modal retrieval.
  • Sin soporte nativo para video o audio todavía — el roadmap los menciona pero no están implementados.
  • Complejidad operacional — más componentes que un RAG vanilla, más superficie de fallo.
⚠️ Ojo: si tu corpus es 100% texto plano (chats, transcripciones, código fuente), RAG-Anything es overkill. Usá LightRAG directamente o un RAG vectorial clásico.

Limitaciones y trabajo futuro

Los autores reconocen explícitamente tres limitaciones en la sección 7 del paper:

  1. Dependencia del parser — errores de MinerU se propagan al pipeline completo.
  2. Cross-modal links incompletos — el matching entre entidades textuales y elementos visuales aún se basa en heurísticas que fallan con captions ambiguos.
  3. Escalabilidad del grafo — para corpus de millones de documentos hace falta sharding del graph storage, no incluido out-of-the-box.

El roadmap contempla soporte para video (con frame sampling y descripción temporal), audio (transcripción + identificación de hablantes) y un mecanismo de aprendizaje continuo del grafo a partir del feedback del usuario.

Conclusiones

RAG-Anything es la evolución natural del rag multimodal: en lugar de tratar imágenes y tablas como ciudadanos de segunda clase que se aplanan a texto, las eleva a nodos de primera clase con su propio embedding, su propia descripción y enlaces explícitos al texto que las contextualiza. La arquitectura dual-graph y el retrieval híbrido cross-modal no son trucos arquitectónicos: son la forma correcta de razonar sobre documentos que mezclan modalidades.

Para equipos que ya tienen un RAG vanilla en producción y notan que las preguntas sobre figuras o tablas devuelven respuestas pobres, RAG-Anything ofrece un upgrade incremental sin reescribir todo el stack. Para proyectos nuevos sobre corpus técnicos o científicos, es probablemente el mejor punto de partida open-source disponible en 2026.

📖 Resumen en Telegram: Ver resumen

Preguntas frecuentes

¿RAG-Anything reemplaza a LightRAG?

No. RAG-Anything extiende LightRAG agregando soporte multimodal. Si tu corpus es solo texto, LightRAG por sí solo es más liviano y rápido. RAG-Anything tiene sentido cuando hay imágenes, tablas o fórmulas relevantes.

¿Necesito un VLM caro como GPT-4o para usarlo?

No es obligatorio. Podés usar VLMs open-source como Qwen2-VL-7B vía Ollama o vLLM. La calidad de los captions baja, pero el sistema funciona. También podés desactivar enable_image_processing si solo te interesan tablas y texto.

¿Qué storage usa por defecto?

Por defecto persiste en JSON+NumPy en el directorio working_dir. Para producción se recomienda Neo4j para el grafo, Milvus o Qdrant para los embeddings, y PostgreSQL para los chunks textuales. La configuración se hace mediante el objeto RAGAnythingConfig.

¿Cuánto cuesta indexar 1000 papers?

Estimando 20 páginas por paper con figuras y tablas, y usando GPT-4o-mini para extracción + GPT-4o para captions visuales, ronda los 300-800 USD según la densidad multimodal. Con modelos locales (Qwen2-VL + Llama 3.1) el costo es solo de cómputo GPU.

¿Funciona offline con modelos locales?

Sí. RAG-Anything soporta cualquier endpoint compatible con la API de OpenAI, incluyendo Ollama, vLLM y LM Studio. Solo hay que apuntar OPENAI_BASE_URL al servidor local y elegir el modelo correspondiente.

¿Cómo se compara con LlamaIndex multimodal o LangChain?

LlamaIndex y LangChain ofrecen primitivas multimodales pero requieren orquestar manualmente el parsing, el captioning y el grafo. RAG-Anything trae todo ensamblado y agrega el dual-graph, que ninguna de las dos librerías generalistas implementa por defecto.

Referencias

  • HKUDS/RAG-Anything — repositorio oficial del framework con documentación, ejemplos y código fuente.
  • arXiv 2510.12323 — paper técnico de RAG-Anything con arquitectura completa y benchmarks.
  • HKUDS/LightRAG — framework de RAG basado en grafos, base sobre la que se construye RAG-Anything.
  • raganything en PyPI — paquete oficial para instalación con pip.
  • opendatalab/MinerU — parser de documentos PDF/DOCX usado en la etapa 1 del pipeline.

📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.


Andrés Morales

Desarrollador e investigador en inteligencia artificial. Escribe sobre modelos de lenguaje, frameworks, herramientas para devs y lanzamientos open source. Cubre papers de ML, ecosistema de startups tech y tendencias de programación.

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.