06-02-01 — LlamaIndex: foco em dados, RAG e agentes data-aware

⏱ 12 minFontes validadas em: 2026-04-29

TL;DR

LlamaIndex não é um agent framework — é um data framework. Seu ponto forte é conectar LLMs a qualquer fonte de dados (PDFs, bancos SQL, APIs, SharePoint) e construir pipelines de indexação + retrieval altamente otimizados. Use LlamaIndex quando o problema central é como recuperar o dado certo; use LangChain/LangGraph quando o problema é como orquestrar o fluxo do agente.

Filosofia: data-centric vs agent-centric

LlamaIndex parte de uma premissa diferente dos outros frameworks: a maior dificuldade em produção não é o LLM, mas conectar o LLM aos seus dados corporativos. Por isso sua arquitetura gira em torno de:

  • Data Connectors (Readers) — ingere dados de 100+ fontes
  • Indices — estruturas otimizadas para retrieval (vector, keyword, summary, knowledge graph)
  • Retrievers — estratégias de busca (dense, sparse, hybrid, BM25)
  • Query Engines — interface de alto nível para perguntas sobre dados indexados
  • Agents — agentes que usam query engines como ferramentas

Pipeline básico

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, Settings
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding

# Configuração global
Settings.llm = OpenAI(model="gpt-4o-mini")
Settings.embed_model = OpenAIEmbedding(model="text-embedding-3-small")

# 1. Ingestão: carrega documentos
documents = SimpleDirectoryReader("./data/contratos/").load_data()

# 2. Indexação: cria vetores e armazena
index = VectorStoreIndex.from_documents(documents)

# 3. Query Engine: interface para perguntas
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("Qual o prazo de entrega do contrato com a TIM?")
print(response)
print(response.source_nodes)  # chunks que embasaram a resposta

Indices avançados

from llama_index.core import SummaryIndex, KeywordTableIndex
from llama_index.core.indices.knowledge_graph import KnowledgeGraphIndex

# SummaryIndex: melhor para resumos e sínteses
summary_index = SummaryIndex.from_documents(documents)
summary_engine = summary_index.as_query_engine(response_mode="tree_summarize")

# KeywordTableIndex: melhor para busca por termos exatos
keyword_index = KeywordTableIndex.from_documents(documents)

# Router Query Engine: escolhe automaticamente qual índice usar
from llama_index.core.query_engine import RouterQueryEngine
from llama_index.core.tools import QueryEngineTool

tools = [
    QueryEngineTool.from_defaults(query_engine=query_engine, description="Para busca semântica em contratos"),
    QueryEngineTool.from_defaults(query_engine=summary_engine, description="Para resumir documentos completos"),
]
router_engine = RouterQueryEngine.from_defaults(query_engine_tools=tools, use_async=True)

Agentes data-aware

LlamaIndex tem seu próprio sistema de agents onde os query engines viram ferramentas. O agente decide automaticamente qual fonte de dados consultar:

from llama_index.core.agent import ReActAgent
from llama_index.core.tools import QueryEngineTool, FunctionTool

# Query engines como ferramentas do agente
contratos_tool = QueryEngineTool.from_defaults(
    query_engine=index.as_query_engine(),
    name="busca_contratos",
    description="Busca informações nos contratos corporativos"
)

# Função Python como ferramenta
def calcular_multa(valor: float, percentual: float) -> float:
    """Calcula multa contratual."""
    return valor * percentual / 100

multa_tool = FunctionTool.from_defaults(fn=calcular_multa)

agent = ReActAgent.from_tools(
    [contratos_tool, multa_tool],
    llm=Settings.llm,
    verbose=True
)

response = agent.chat("Qual a multa de 10% sobre o valor do contrato com a Vale?")

Integração com vector stores enterprise

from llama_index.vector_stores.azureaisearch import AzureAISearchVectorStore
from llama_index.vector_stores.postgres import PGVectorStore

# Azure AI Search (ideal para stack Microsoft)
vector_store = AzureAISearchVectorStore(
    search_or_index_client=search_client,
    index_name="contratos-index",
    embedding_dimensionality=1536,
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)

LlamaIndex vs LangChain: quando usar cada um

CritérioLlamaIndexLangChain
Foco principalIndexação e retrieval de dadosOrquestração de fluxos LLM
RAG avançado✅ Nativo, muito mais opções⚠️ Possível, menos especializado
Múltiplas fontes de dados✅ 100+ conectores✅ Muitos loaders
Agentes com estado⚠️ Básico✅ Via LangGraph
Multi-agent complexo❌ Não é o foco✅ Via LangGraph
Curva de aprendizadoModeradaModerada
Combinação poderosa: LlamaIndex para construir o retrieval pipeline + LangGraph para orquestrar o agente. O query engine do LlamaIndex vira uma tool no grafo do LangGraph.

LlamaCloud e LlamaParse

LlamaParse: parser especializado para PDFs complexos (tabelas, figuras, layouts multi-coluna) — muito superior ao PyPDF2 para documentos corporativos. LlamaCloud: plataforma gerenciada para pipelines de dados + RAG em produção.

Como isso se conecta

  • Módulo 05 (RAG) — LlamaIndex implementa todos os padrões RAG vistos no módulo anterior
  • 06-01-01 LangChain — podem ser combinados: LlamaIndex para retrieval, LangChain para orquestração
  • 06-03-01 Semantic Kernel — SK tem seu próprio sistema de Memory/RAG, mas LlamaIndex é mais maduro para casos complexos
  • 06-04-03 Decision matrix — LlamaIndex é a escolha quando RAG avançado é o requisito principal

Fontes

  1. LlamaIndex Docs — Official Documentation
  2. LlamaIndex Docs — Query Engines
  3. LlamaIndex Docs — Agents
  4. GitHub — run-llama/llama_index