LlamaIndex empezó siendo el framework de referencia para RAG, pero desde su módulo AgentWorkflow también sirve para construir agentes: programas que razonan sobre una tarea, deciden qué herramienta usar y encadenan pasos hasta resolverla. La gracia es que puedes reutilizar todo lo que ya tienes indexado (tus documentos, tu base vectorial, tus motores de consulta) y convertirlo en herramientas que un agente invoca por su cuenta. En esta guía verás qué es LlamaIndex y qué aporta AgentWorkflow, cómo pasar de un flujo RAG a un agente con herramientas, en qué se diferencian FunctionAgent y ReActAgent, un ejemplo que responde sobre tus propios archivos, y cuándo elegir LlamaIndex frente a LangChain. La misma explicación está disponible en inglés.

Puntos clave

  • LlamaIndex es un framework de Python, con licencia MIT, que nació en noviembre de 2022 (como «GPT Index») para conectar datos privados con un LLM. Su repositorio run-llama/llama_index supera las 50 900 estrellas en GitHub y la versión 0.14.23 es del 24 de junio de 2026.
  • AgentWorkflow, presentado el 22 de enero de 2025, es el sistema que orquesta uno o varios agentes: mantiene el estado, transmite eventos en tiempo real y permite que los agentes se deleguen tareas entre sí.
  • Hay dos agentes principales en llama_index.core.agent.workflow: FunctionAgent, para modelos con llamada a funciones nativa, y ReActAgent, que funciona con cualquier modelo, incluso uno que ejecutes en tu propia máquina.
  • Una herramienta es una función de Python con su docstring y sus tipos; un motor de consulta RAG se convierte en herramienta con QueryEngineTool, de modo que el agente busca en tus documentos cuando lo necesita.
  • LlamaIndex destaca en recuperación de información: en una comparativa alcanzó un 92 % de precisión y exige entre un 30 % y un 40 % menos de código que LangChain para el mismo RAG.

¿Qué es LlamaIndex y qué aporta AgentWorkflow?

LlamaIndex es un framework de Python para construir aplicaciones sobre modelos de lenguaje con tus propios datos. Su especialidad histórica es la generación aumentada por recuperación (RAG): ingesta documentos, los trocea, calcula embeddings, los guarda en un índice y responde preguntas recuperando los fragmentos más relevantes. Si quieres entender la pieza de almacenamiento que hay debajo, conviene repasar antes qué es una base de datos vectorial.

Sobre esa base, LlamaIndex añadió una capa de agentes. La documentación oficial define un agente como «una pieza de software semiautónoma, impulsada por un LLM, a la que se le asigna una tarea y que ejecuta una serie de pasos para resolverla». La diferencia con una consulta RAG normal es que el agente decide: elige qué herramienta llamar, con qué argumentos y cuándo ha terminado.

El componente que coordina todo esto es AgentWorkflow, presentado en enero de 2025 y construido sobre las abstracciones de Workflow. Se encarga de mantener el estado y el contexto entre pasos, de transmitir los eventos en tiempo real para que veas qué hace el agente, y de gestionar el traspaso de tareas cuando tienes varios agentes especializados. Puedes usarlo con un solo agente o montar un equipo que se reparte el trabajo.

¿Cómo se pasa de RAG a un agente con herramientas?

Un flujo RAG clásico es lineal: pregunta, recuperación, respuesta. Funciona bien cuando la respuesta está en los documentos, pero se queda corto en cuanto la tarea necesita varios pasos, cálculos o fuentes distintas. Ahí entra el agente, que trata cada capacidad como una herramienta y decide por su cuenta cuáles usar y en qué orden.

Para instalar LlamaIndex basta con el paquete meta o con los componentes que necesites:

pip install llama-index-core llama-index-llms-openai

Una herramienta puede ser, sencillamente, una función de Python con su docstring y sus anotaciones de tipo; LlamaIndex lee esa firma para saber qué hace y cómo llamarla. Este es el agente mínimo, un FunctionAgent con una herramienta y una llamada asíncrona:

from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI

def multiplicar(a: float, b: float) -> float:
    """Multiplica dos números y devuelve el resultado."""
    return a * b

agente = FunctionAgent(
    tools=[multiplicar],
    llm=OpenAI(model="gpt-4o-mini"),
    system_prompt="Eres un agente que resuelve cálculos con herramientas.",
)

respuesta = await agente.run(user_msg="¿Cuánto es 5 por 3?")
print(respuesta)

El agente recibe la pregunta, entiende que necesita multiplicar, llama a la función con los argumentos correctos y redacta la respuesta final con el resultado. Ese bucle de razonar, actuar y observar es el corazón de cualquier agente.

¿En qué se diferencian FunctionAgent y ReActAgent?

Ambos viven en llama_index.core.agent.workflow y heredan de la misma clase base, pero eligen la herramienta de forma distinta.

  • FunctionAgent se apoya en la llamada a funciones nativa del modelo. El proveedor (OpenAI, Anthropic o Google) devuelve directamente qué herramienta invocar y con qué argumentos en un campo estructurado. Es la opción recomendada cuando tu modelo soporta function calling, porque es más fiable y consume menos tokens.
  • ReActAgent implementa el patrón ReAct (razonamiento y acción): en lugar de un campo estructurado, el modelo escribe en texto su razonamiento («necesito buscar X»), la acción y la observación, y repite el ciclo. Su ventaja es que funciona con cualquier modelo, aunque no tenga API de funciones, incluido un modelo abierto que ejecutes de forma local con Ollama.

En la práctica, si trabajas con un modelo frontera comercial, usa FunctionAgent. Si quieres un agente que corra sobre un modelo abierto en tu propio equipo, o quieres ver el razonamiento paso a paso, ReActAgent encaja mejor. Cambiar de uno a otro es tan sencillo como sustituir la clase, porque comparten la misma interfaz de herramientas y de ejecución.

¿Cómo montar un agente sobre tus documentos?

Aquí es donde LlamaIndex brilla: convertir tu RAG existente en una herramienta del agente. Se hace con QueryEngineTool, que envuelve un motor de consulta y le pone un nombre y una descripción para que el agente sepa cuándo usarlo. El siguiente ejemplo indexa una carpeta de documentos y deja que un FunctionAgent responda a partir de ellos:

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.tools import QueryEngineTool
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI

documentos = SimpleDirectoryReader("./docs").load_data()
indice = VectorStoreIndex.from_documents(documentos)
motor = indice.as_query_engine()

herramienta = QueryEngineTool.from_defaults(
    query_engine=motor,
    name="busqueda_docs",
    description="Responde preguntas sobre la documentación interna.",
)

agente = FunctionAgent(
    tools=[herramienta],
    llm=OpenAI(model="gpt-4o-mini"),
    system_prompt="Responde solo con la documentación disponible.",
)

respuesta = await agente.run(user_msg="¿Cómo configuro las copias de seguridad?")
print(respuesta)

La descripción de la herramienta es clave, porque es lo que lee el modelo para decidir si esta consulta merece buscar en los documentos o resolverse de otra forma. Con el mismo patrón puedes añadir varias herramientas (una por cada fuente de datos) y dejar que el agente elija. Y si quieres coordinar varios agentes especializados, defines cada uno con su parámetro name y can_handoff_to, y los reúnes en un AgentWorkflow con un root_agent que actúa como punto de entrada.

¿LlamaIndex o LangChain?

Es la comparación inevitable, y la respuesta corta es que resuelven problemas con distinto centro de gravedad. LlamaIndex está construido alrededor de los datos: ingesta, indexación, recuperación y síntesis. Según IBM y varias comparativas independientes, ofrece mejor calidad de recuperación de serie (hasta un 92 % de precisión en un benchmark) y necesita entre un 30 % y un 40 % menos de código para un RAG equivalente.

LangChain, con su capa LangGraph, está pensado para la orquestación de agentes complejos: bucles cíclicos, máquinas de estado y coordinación entre subagentes. Los Workflow de LlamaIndex cubren mucho de eso, pero la orquestación sigue siendo su segundo objetivo, no el primero.

Por eso el patrón más habitual en producción no es elegir uno, sino combinarlos: LlamaIndex para la capa de recuperación sobre tus documentos, dentro de un agente orquestado con LangGraph. Si tu producto es la calidad de recuperación, empieza por LlamaIndex; si es la lógica de decisión entre muchas herramientas y agentes, apóyate en LangGraph. Para un enfoque de tipado estricto sobre las respuestas del agente, también merece la pena mirar Pydantic AI.

Preguntas frecuentes

¿LlamaIndex es gratis y de código abierto?

Sí. LlamaIndex es un proyecto de código abierto con licencia MIT, así que puedes usarlo, leerlo y modificarlo sin coste. Lo que sí cuesta es el modelo de lenguaje que conectes: si usas un proveedor comercial como OpenAI, pagas por los tokens que consuman las consultas del agente. Con un modelo abierto que ejecutes en tu propia máquina, ese gasto desaparece y solo pones el hardware.

¿Necesito una base de datos vectorial para usar LlamaIndex?

No para empezar. VectorStoreIndex mantiene los embeddings en memoria, suficiente para prototipos y colecciones pequeñas. Cuando el volumen crece o quieres persistencia, conectas un almacén vectorial externo (como Chroma, Qdrant o pgvector) sin cambiar el resto del código. La abstracción es la misma, solo cambia dónde se guardan los vectores.

¿Puedo usar LlamaIndex con un modelo local sin OpenAI?

Sí. LlamaIndex admite muchos proveedores, incluido Ollama para modelos abiertos que corren en tu propio equipo. Para agentes, ten en cuenta que FunctionAgent exige un modelo con buena llamada a funciones; si el modelo local no la soporta bien, usa ReActAgent, que funciona con cualquier modelo aunque razone algo peor en tareas largas.

Conclusión

LlamaIndex te permite reaprovechar todo el trabajo de indexación y recuperación que ya tienes y elevarlo a un agente que decide y actúa. La ruta es clara: instala el paquete, envuelve tu motor de consulta en un QueryEngineTool, elige FunctionAgent o ReActAgent según tu modelo y, si la tarea lo pide, coordina varios agentes con AgentWorkflow. Si tu prioridad es la calidad de recuperación sobre tus documentos, es de las opciones más sólidas de 2026. El siguiente paso natural es montar el ejemplo sobre una carpeta real y comparar FunctionAgent y ReActAgent con tu propio modelo.

Fuentes: [1] Documentación oficial de LlamaIndex, agentes[1], [2] llama_index en GitHub[2], [3] Presentación de AgentWorkflow[3], [4] LlamaIndex frente a LangChain, IBM[4].

Fuentes

  1. Documentación oficial de LlamaIndex, agentes
  2. llama_index en GitHub
  3. Presentación de AgentWorkflow
  4. LlamaIndex frente a LangChain, IBM

Ruta: Frameworks para construir agentes de IA