LlamaIndex
LlamaIndex é um framework de dados para ingerir, indexar e consultar dados privados com LLMs. Ele lida com divisão em pedaços (chunking), incorporação (embedding), recuperação (retrieval) e síntese de respostas.
Receita
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("O que é pytest?")Exemplo de Trabalho
"""llamaindex.py - construir índice e 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 usa fixtures para compartilhar a configuração de testes.", metadata={"source": "testing"}),
Document(text="FastAPI valida corpos de requisição com Pydantic.", metadata={"source": "web"}),
]
index = VectorStoreIndex.from_documents(documents)
engine = index.as_query_engine(similarity_top_k=2)
response = engine.query("Como funcionam as fixtures do pytest?")
print(response)
print("fontes:", [n.metadata for n in response.source_nodes])Armadilhas
- Configurações padrão de chunking - podem não se adequar aos seus dados. Correção: configure
chunk_size/overlapdoSentenceSplitter. - Sem citação de fonte por padrão - habilite
response_mode="compact"com nós de origem. - Configurações Globais - não são thread-safe em aplicativos multilocatários. Correção: passe
llm/embed_modelpor índice.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| LlamaIndex | RAG com muitos dados e conectores | Cadeias simples de uso único |
| LangChain | Composição de ferramentas/agentes | Ingestão com muitos conectores |
| SDK Bruto | Dependências mínimas | Muitas fontes de dados |
FAQs
LlamaIndex vs LangChain?
LlamaIndex se destaca na ingestão/consulta; LangChain na orquestração de agentes.Como carregar PDFs?
SimpleDirectoryReader("./data") detecta automaticamente os tipos de arquivo.O que é um motor de consulta?
Retriever + sintetizador de resposta que gera respostas a partir de nós recuperados.Motor de chat vs motor de consulta?
O motor de chat mantém o histórico da conversa entre turnos.Retriever personalizado?
Subclasse BaseRetriever ou configure os parâmetros do VectorIndexRetriever.Índice persistente?
StorageContext com ChromaVectorStore ou save_to_disk/load_from_disk.Como citar fontes?
response.source_nodes contém os pedaços recuperados com metadados.Saída estruturada?
PydanticProgram ou OpenAIPydanticProgram para respostas tipadas.Agentes no LlamaIndex?
ReActAgent com ferramentas; considere LangGraph para loops complexos.Como avaliar?
Módulos de avaliação do LlamaIndex: avaliação do retriever, fidelidade, relevância.Mudança do modelo de embedding?
Reconstrua o índice - os vetores são específicos do modelo.Servindo em produção?
llama_deploy ou envolva o query_engine em FastAPI.Relacionados
Versões da Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 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+ e uv 0.6+.