LlamaIndex: Framework para agentes enfocados en RAG
Qué cubre este artículo
- Qué es LlamaIndex y cómo funciona.
- Cómo construir agentes con LlamaIndex y RAG.
- Índices de datos, motores de consulta y herramientas para agentes.
- Ejemplos prácticos para preguntas sobre documentos y bases de conocimiento.
- Mejores prácticas para calidad y rendimiento en RAG.
Introducción: LlamaIndex explicado
LlamaIndex es un framework para agentes basados en RAG. Conecta LLMs con índices de datos (bases de datos vectoriales), motores de consulta (búsqueda) y herramientas (acciones). Ideal para agentes que acceden a documentos y bases de conocimiento.
Este artículo está dirigido a desarrolladores que quieren construir agentes RAG con LlamaIndex. Encontrarás conceptos fundamentales en RAG local y Frameworks para agentes de IA.
Por qué necesito LlamaIndex
Imagina que estás construyendo un agente que responde preguntas sobre tus documentos. LangChain es genérico, LlamaIndex es especializado: ofrece índices listos para usar, motores de consulta y herramientas de recuperación para RAG. Para agentes basados en documentos, es la mejor opción.
LlamaIndex en resumen
LlamaIndex es un framework enfocado en RAG. Índices de datos para documentos, motores de consulta para búsqueda, herramientas para agentes. Para agentes basados en documentos y bases de conocimiento.
La idea central es: RAG primero para agentes basados en documentos.
Para quién es este artículo
- Desarrolladores de RAG que construyen agentes basados en documentos.
- Gestores de conocimiento que implementan preguntas y respuestas sobre documentos.
- Desarrolladores que usan LlamaIndex para agentes.
- Desarrolladores Python que comparan frameworks de RAG.
Conceptos clave
- LlamaIndex - Framework de RAG. Cuándo es útil: para agentes RAG.
- RAG - Retrieval-Augmented Generation. Cuándo es útil: el concepto.
- Base de datos vectorial - Almacenamiento. Cuándo es útil: para índices.
- Ollama - Servidor de modelos local. Cuándo es útil: para modelos.
- Motor de consulta - Buscador. Cuándo es útil: para recuperación.
Configuración
pip install llama-index llama-index-llms-ollama llama-index-embeddings-ollama
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
# Configurar LLM
llm = Ollama(model="llama3.1", base_url="http://ollama:11434")
# Configurar embedding
embed_model = OllamaEmbedding(
model_name="multilingual-e5",
base_url="http://ollama:11434"
)
Ejemplo práctico 1: Índice de documentos
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
# Cargar documentos
documents = SimpleDirectoryReader("./dokumente").load_data()
# Crear índice
index = VectorStoreIndex.from_documents(
documents,
embed_model=embed_model
)
# Motor de consulta
query_engine = index.as_query_engine(llm=llm)
# Formular pregunta
response = query_engine.query("¿Qué dice el contrato sobre la rescisión?")
print(response)
Ejemplo práctico 2: Agente con herramientas
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import FunctionTool
# Definir herramienta
def multiply(a: int, b: int) -> int:
"""Multiplica dos números"""
return a * b
def get_weather(location: str) -> str:
"""Obtener el clima"""
return f"Clima en {location}: 22°C"
# Crear herramientas
tools = [
FunctionTool.from_defaults(fn=multiply),
FunctionTool.from_defaults(fn=get_weather)
]
# Crear agente
agent = ReActAgent.from_tools(
tools,
llm=llm,
verbose=True
)
# Usar agente
response = agent.chat("¿Cuánto es 123 * 456?")
print(response)
Ejemplo práctico 3: Agente RAG
from llama_index.core.agent import ReActAgent
from llama_index.core.tools import QueryEngineTool, ToolMetadata
# Motor de consulta como herramienta
query_tool = QueryEngineTool(
query_engine=query_engine,
metadata=ToolMetadata(
name="document_search",
description="Buscar en documentos"
)
)
# Agente con herramienta RAG
agent = ReActAgent.from_tools(
[query_tool],
llm=llm,
verbose=True
)
# El agente usa RAG para responder
response = agent.chat("¿Qué dice el documento sobre protección de datos?")
print(response)
Ejemplo práctico 4: Agente con múltiples índices
# Varios índices para diferentes documentos
index_contracts = VectorStoreIndex.from_documents(
SimpleDirectoryReader("./vertraege").load_data(),
embed_model=embed_model
)
index_invoices = VectorStoreIndex.from_documents(
SimpleDirectoryReader("./rechnungen").load_data(),
embed_model=embed_model
)
# Herramientas para cada índice
contract_tool = QueryEngineTool(
query_engine=index_contracts.as_query_engine(llm=llm),
metadata=ToolMetadata(
name="contract_search",
description="Buscar en contratos"
)
)
invoice_tool = QueryEngineTool(
query_engine=index_invoices.as_query_engine(llm=llm),
metadata=ToolMetadata(
name="invoice_search",
description="Buscar en facturas"
)
)
# Agente con múltiples herramientas
agent = ReActAgent.from_tools(
[contract_tool, invoice_tool],
llm=llm
)
LlamaIndex vs. LangChain
| Aspecto | LlamaIndex | LangChain |
|---|---|---|
| Enfoque | RAG, documentos | General |
| Índices | Sí, dedicados | No, manual |
| Motor de consulta | Sí, dedicado | No, manual |
| Agentes | Sí, ReAct | Sí, varios |
| Complejidad | Más simple para RAG | Más complejo, flexible |
| Mejor para | Preguntas sobre documentos | Agentes generales |
Notas de seguridad
- Fuentes de datos: Los índices pueden contener datos sensibles. Implementa control de acceso.
- Inyección de prompt: Los documentos pueden contener inyecciones. Ver Inyección de prompt.
- Auditoría: Registra todas las acciones del agente. Ver Audit Logging.
- Permisos: El agente debe acceder solo a los índices necesarios. Ver Permisos de herramientas.
Errores comunes
- Demasiados documentos: Los índices grandes pueden ser lentos. Usa chunking y filtrado.
- Embeddings deficientes: El modelo de embedding incorrecto resulta en búsqueda pobre. Usa multilingual-e5 para alemán.
- Sin citas de fuentes: El agente debería indicar las fuentes, no solo dar respuestas.
- Alucinaciones: Sin una buena recuperación, el modelo alucina. Verifica la calidad del RAG.
- Demasiadas herramientas: Más de 5-7 herramientas sobrecargan el modelo.
Enlaces relacionados
- LlamaIndex - GitHub.
- RAG local - Conceptos de RAG.
- Frameworks para agentes de IA - Descripción general.
- LangChain - Alternativa.
- Semantic Kernel - Alternativa.
- Ollama - Servidor de modelos.
Puntos clave:
- LlamaIndex es un framework enfocado en RAG para agentes basados en documentos.
- Índices de datos, motores de consulta y herramientas para agentes.
- Para preguntas sobre documentos, bases de conocimiento y aplicaciones RAG.
- Más simple para RAG que LangChain, más especializado.
- Para agentes generales: usa LangChain o CrewAI.
Preguntas frecuentes
¿Qué es LlamaIndex?
¿LlamaIndex o LangChain?
¿Qué son los índices de datos?
¿Qué es un motor de consulta?
¿Qué modelo de embedding usar?
¿Están mis documentos seguros?
¿Cuánto cuesta LlamaIndex?
¿Qué tal el rendimiento de LlamaIndex?
Fuentes y lecturas adicionales
- LlamaIndex - GitHub.
- LlamaIndex Docs - Documentación.
- RAG Guide - Técnicas de RAG.


