LlamaIndex
LlamaIndex es un framework de datos para ingerir, indexar y consultar datos privados con LLMs. Maneja la fragmentación, incrustación, recuperación y síntesis de respuestas.
Receta
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
Settings.llm = OpenAI(model="gpt-4o-mini")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What is pytest?")Ejemplo de trabajo
"""llamaindex.py - construir índice y consultar."""
from llama_index.core import Document, VectorStoreIndex, Settings
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI as LlamaOpenAI
Settings.llm = LlamaOpenAI(model="gpt-4o-mini", temperature=0)
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")
documents = [
Document(text="pytest uses fixtures to share test setup.", metadata={"source": "testing"}),
Document(text="FastAPI validates request bodies with Pydantic.", metadata={"source": "web"}),
]
index = VectorStoreIndex.from_documents(documents)
engine = index.as_query_engine(similarity_top_k=2)
response = engine.query("How do pytest fixtures work?")
print(response)
print("sources:", [n.metadata for n in response.source_nodes])Trampas
- Configuración de fragmentación predeterminada - puede no ajustarse a tus datos. Solución: configura
SentenceSplitterchunk_size/overlap. - Sin cita de fuente por defecto - habilita
response_mode="compact"con nodos de origen. - Configuración Global - no segura para hilos en aplicaciones multi-inquilino. Solución: pasa
llm/embed_modelpor índice.
Alternativas
| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| LlamaIndex | RAG con muchos datos y conectores | Cadenas simples de un solo uso |
| LangChain | Composición de herramientas/agentes | Ingesta con muchos conectores |
| SDK Raw | Dependencias mínimas | Muchas fuentes de datos |
Preguntas frecuentes
¿LlamaIndex vs LangChain?
LlamaIndex destaca en ingesta/consulta; LangChain en orquestación de agentes.¿Cómo cargo PDFs?
SimpleDirectoryReader("./data") detecta automáticamente los tipos de archivo.¿Qué es un motor de consulta?
Retriever + sintetizador de respuesta que genera respuestas a partir de nodos recuperados.¿Motor de chat vs motor de consulta?
El motor de chat mantiene el historial de conversación entre turnos.¿Retriever personalizado?
Subclase `BaseRetriever` o configura los parámetros de `VectorIndexRetriever`.¿Índice persistente?
StorageContext con ChromaVectorStore o `save_to_disk`/`load_from_disk`.¿Cómo cito fuentes?
`response.source_nodes` contiene fragmentos recuperados con metadatos.¿Salida estructurada?
`PydanticProgram` o `OpenAIPydanticProgram` para respuestas tipadas.¿Agentes en LlamaIndex?
`ReActAgent` con herramientas; considera LangGraph para bucles complejos.¿Cómo evalúo?
Módulos de evaluación de LlamaIndex: evaluación de retriever, fidelidad, relevancia.¿Cambio de modelo de incrustación?
Reconstruye el índice: los vectores son específicos del modelo.¿Servicio en producción?
`llama_deploy` o envuelve `query_engine` en FastAPI.Relacionado
- LangChain
- Fragmentación e Ingesta
- Bases de Datos Vectoriales
- Conceptos básicos de RAG
- Evaluación y Barreras de seguridad
Versiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.