
LangChain vs LlamaIndex: quando usar cada um
Dois Frameworks, Propósitos Diferentes
LangChain e LlamaIndex são os dois frameworks de IA mais populares do ecossistema Python — e frequentemente são tratados como substitutos um do outro. Na prática, eles resolvem problemas diferentes e funcionam melhor juntos do que em competição.
LangChain surgiu para orquestração de pipelines de LLM: chains, agents, tools, memória e integração com dezenas de serviços. LlamaIndex surgiu para indexação e recuperação de documentos — RAG (Retrieval-Augmented Generation) é sua especialidade central.
Entender essa diferença fundamental economiza semanas de tentativa e erro.
LangChain: Orquestração de Fluxos com LLMs
LangChain se destaca quando você precisa coordenar múltiplos passos, ferramentas e modelos em um fluxo de trabalho complexo.
Quando LangChain brilha:
from langchain.agents import create_react_agent, AgentExecutor
from langchain.tools import DuckDuckGoSearchRun, PythonREPLTool
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o", temperature=0)
tools = [DuckDuckGoSearchRun(), PythonREPLTool()]
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = executor.invoke({"input": "Pesquise o preço atual do Bitcoin e calcule quanto eu teria hoje se tivesse investido R$ 1000 em 2020"})
Neste exemplo, o agent decide autonomamente quando buscar na web e quando executar código Python. LangChain gerencia o loop de raciocínio-ação-observação (ReAct) automaticamente.
Pontos fortes do LangChain:
- Agents com acesso a ferramentas externas (web, banco de dados, APIs)
- Chains complexas com múltiplos LLMs encadeados
- Memória de conversação (buffer, summary, entity)
- Integração com 300+ providers (OpenAI, Anthropic, HuggingFace, etc.)
- LCEL (LangChain Expression Language) para pipelines declarativos
Limitações:
- Abstração pesada — difícil debugar quando algo dá errado
- Documentação nem sempre acompanha a velocidade de mudanças da lib
- Overhead para casos simples (RAG básico não precisa de LangChain)
LlamaIndex: Recuperação de Informação Estruturada
LlamaIndex foi construído para um problema específico: como fazer um LLM responder perguntas sobre uma base de documentos de forma precisa e controlada.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core.node_parser import SentenceSplitter
# Carregar e indexar documentos
documents = SimpleDirectoryReader("contratos/").load_data()
parser = SentenceSplitter(chunk_size=512, chunk_overlap=64)
nodes = parser.get_nodes_from_documents(documents)
index = VectorStoreIndex(nodes)
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("Quais são as cláusulas de rescisão do contrato com a Empresa X?")
print(response)
print(response.source_nodes) # Mostra os trechos que geraram a resposta
LlamaIndex gerencia automaticamente: chunking, embedding, armazenamento vetorial, recuperação por similaridade e síntese da resposta.
Pontos fortes do LlamaIndex:
- RAG com controle granular de chunking e retrieval
- Rastreabilidade de fontes (source nodes)
- Suporte nativo a estruturas complexas (tabelas, PDFs, HTML)
- Sub-question decomposition para perguntas complexas
- Integrações com vetores stores (Pinecone, Weaviate, pgvector, Chroma)
Limitações:
- Menos flexível para pipelines que vão além de RAG
- Agents são menos maduros que os do LangChain
- Ecosistema menor de integrações com ferramentas externas
Matriz de Decisão
| Caso de Uso | LangChain | LlamaIndex | Ambos |
|---|---|---|---|
| Chatbot com documentos internos | — | ✓ | — |
| Agent com acesso à internet | ✓ | — | — |
| Pipeline RAG com controle de chunking | — | ✓ | — |
| Workflow multi-step com APIs externas | ✓ | — | — |
| Síntese de múltiplos documentos | — | ✓ | — |
| Agent que pesquisa e depois consulta base | — | — | ✓ |
| Análise de contratos e documentos legais | — | ✓ | — |
| Automação de processos internos | ✓ | — | — |
Usando LangChain e LlamaIndex Juntos
A combinação mais poderosa é usar LlamaIndex para indexação e recuperação, e LangChain para orquestração do agent:
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from langchain_community.retrievers import LlamaIndexRetriever
from langchain.agents import create_react_agent
# LlamaIndex cuida do RAG
documents = SimpleDirectoryReader("base-conhecimento/").load_data()
index = VectorStoreIndex.from_documents(documents)
retriever = LlamaIndexRetriever(index=index, query_kwargs={"similarity_top_k": 5})
# LangChain cuida da orquestração do agent
from langchain.tools import Tool
knowledge_base_tool = Tool(
name="base_conhecimento_empresa",
func=lambda q: retriever.get_relevant_documents(q),
description="Busca na base de conhecimento interna da empresa"
)
# Agent com acesso à base + internet
tools = [knowledge_base_tool, DuckDuckGoSearchRun()]
agent = create_react_agent(llm, tools, prompt)
Conclusão
Escolha LangChain quando seu sistema precisa de agents que tomam decisões e usam ferramentas diversas. Escolha LlamaIndex quando seu problema principal é fazer um LLM responder perguntas sobre documentos com precisão e rastreabilidade. Use ambos quando precisar de agents que também consultam uma base de documentos estruturada.
A SystemForge tem experiência com ambos os frameworks em projetos de automação com IA. Se quiser entender qual abordagem faz mais sentido para seu caso, fale com nosso time.
Quer Automatizar com IA?
Implementamos soluções de IA e automação para empresas de todos os tamanhos.
Saiba mais →Precisa de ajuda?

