Nossa posição: somos a Geonode e vendemos proxies, que não têm nada a ver com frameworks de LLM. Não ganhamos nada independentemente da sua escolha, o que torna esta uma comparação escrita por quem não tem interesse no resultado — uma posição incomum numa categoria em que a maioria das comparações vem de um dos fornecedores. Todas as versões, licenças e atividade dos repositórios abaixo foram verificadas em setembro de 2026.
Por Que as Pessoas Procuram Alternativas
Vale nomear as queixas reais, porque elas determinam qual alternativa ajuda.
Profundidade da abstração. Depurar uma chain frequentemente significa ler o código-fonte do framework para descobrir qual prompt foi de fato enviado. A indireção que deixa a demo curta deixa os incidentes de produção longos.
Rotatividade da API. O framework mudou substancialmente ao longo da vida, e os tutoriais envelhecem rápido. Código escrito contra uma versão major precisa ser revisitado.
Peso das dependências. Uma superfície grande traz uma árvore de dependências grande, o que importa em deploys restritos e em revisão de segurança.
Fazer demais. Chains, agentes, memória, recuperação, tooling, avaliação. A maioria dos projetos precisa de dois desses e herda todos.
Note que nenhuma dessas queixas é sobre as ideias. As abstrações do LangChain são descrições razoáveis do espaço do problema, que é precisamente por que foram copiadas. As queixas são sobre o custo de adotar um framework inteiro para usar só uma parte.
Também vale dizer que o projeto não está parado: langchain está em 1.3.18 e langchain-core em 1.6.1, ambos lançados no fim de agosto de 2026, com licença MIT, e o repositório está entre os mais ativos da categoria. Muita crítica descreve uma versão mais antiga.
O Panorama
Todos os números vêm do PyPI e dos repositórios dos próprios projetos, verificados em setembro de 2026.
| Projeto | Mais recente | Licença | Foco |
|---|---|---|---|
| LangChain | 1.3.18 | MIT | Composição de propósito geral |
| LangGraph | 1.2.11 | MIT | Fluxos stateful, multiator |
| LlamaIndex | 0.14.24 | MIT | Indexação e recuperação de dados |
| Haystack | 3.1.0 | Apache-2.0 | Pipelines de produção |
| DSPy | 3.3.1 | MIT | Otimização programática de prompts |
| Semantic Kernel | 1.44.1 | MIT | Empresarial, multilíngue |
| Pydantic AI | 2.37.0 | MIT | Agentes com type safety |
| Instructor | 1.16.0 | MIT | Apenas saídas estruturadas |
Todos em desenvolvimento ativo — cada um recebeu push em questão de dias da verificação. Todos com licença permissiva. As diferenças estão no escopo e na filosofia, não na viabilidade.
LlamaIndex: Recuperação em Primeiro Lugar
A alternativa de propósito geral mais próxima, e ela chega por outra direção.
Onde o LangChain começou compondo chamadas de LLM, o LlamaIndex começou conectando LLMs aos seus dados — o próprio resumo é "interface between LLMs and your data". Essa origem aparece no que ele faz bem: carregamento de documentos de uma gama muito ampla de fontes, estratégias de chunking, construção de índices e padrões de recuperação além da similaridade top-k simples.
Escolha quando a qualidade da recuperação é a parte difícil do seu problema. As abstrações de índice e os query engines são mais sofisticados do que o equivalente num framework geral, e o ecossistema de loaders é amplo o bastante para que conectar uma fonte incomum costuma ser uma linha só.
A ressalva tem o mesmo formato da do LangChain: ele cresceu e virou um framework geral, então adotá-lo para recuperação traz agentes, fluxos e tooling que você talvez não queira.
Haystack: Pipelines de Produção
O framework da Deepset, e o mais explicitamente orientado a produção do grupo — descreve-se como um framework "to build customizable, production-ready LLM applications".
A propriedade distintiva é que os pipelines são grafos explícitos de componentes com entradas e saídas declaradas, serializáveis em YAML. Isso torna o que roda inspecionável de um jeito que method-chaining não torna, e faz do pipeline algo que você pode versionar, fazer diff e revisar.
Escolha quando você está construindo algo que será operado, não demonstrado — onde ver a estrutura do pipeline, serializá-lo e raciocinar sobre ele na revisão importa mais do que o caminho mais curto até um protótipo funcionando.
Também é o único projeto Apache-2.0 desta lista em vez de MIT, uma distinção sem muita diferença prática — ambos são permissivos — mas às vezes importa numa revisão jurídica com preferência.
DSPy: Uma Ideia Genuinamente Diferente
A alternativa mais interessante, e a que não é uma variação das outras.
A premissa do DSPy é que prompts escritos à mão são a abstração errada. Você declara o que um módulo deve fazer em termos de entradas e saídas, e o framework otimiza os prompts — inclusive exemplos few-shot — contra uma métrica que você define.
A consequência é um loop de desenvolvimento diferente. Em vez de iterar o texto do prompt à mão, você monta um conjunto de avaliação, define uma métrica e deixa o otimizador buscar. Isso converte engenharia de prompt de um ofício em algo mais próximo de um procedimento de treino.
Escolha quando você tem uma tarefa com qualidade mensurável, um conjunto de avaliação e volume suficiente para a otimização sistemática valer a pena. Classificação, extração e raciocínio estruturado se encaixam.
Não escolha quando você não consegue definir uma métrica, ou quando a tarefa é pontual. Toda a abordagem depende de pontuar saídas automaticamente, e montar esse conjunto de avaliação é o trabalho de verdade.
Com 37.000 stars e desenvolvimento ativo, já passou bem do estágio experimental — mas pede mais de você no início do que qualquer outra opção aqui.
Pydantic AI e Instructor: Estreitos de Propósito
Dois projetos que resolvem menos, de propósito.
Instructor faz uma coisa: saídas estruturadas. Você define um modelo Pydantic, e ele cuida do schema, da validação e do loop de retry em caso de inválido. Essa é a biblioteca inteira.
Uma parcela enorme do código de aplicações de LLM é "obter JSON válido neste formato de um modelo", e o Instructor é uma resposta completa a isso em poucas linhas, praticamente sem overhead de framework. Se esse é o seu requisito, adotar um framework geral para obtê-lo é um mau negócio.
Pydantic AI é mais amplo — um framework de agentes "the Pydantic way" — trazendo type safety, injeção de dependência e saídas estruturadas para a construção de agentes. É mais novo que os outros e cresce rápido, e atrai especialmente times já investidos em Pydantic e type checking.
Escolha estes quando o problema está bem definido e você prefere uma biblioteca a um framework. A distinção importa: uma biblioteca é algo que você chama, um framework é algo que chama você, e o segundo é bem mais difícil de abandonar.
Semantic Kernel: Empresarial e Multilíngue
O framework da Microsoft, e o que considerar quando Python não é a história toda.
Os diferenciais são suporte de primeira classe em .NET, Python e Java, e uma arquitetura construída em torno de plugins e planners que se mapeia a padrões de integração empresarial.
Escolha quando você está num time .NET, quando precisa dos mesmos conceitos em várias linguagens, ou quando as decisões de plataforma da organização apontam nessa direção. Essas são restrições reais e frequentemente decisivas independentemente do mérito técnico.
Para um projeto só em Python, sem essa restrição, as opções nativas de Python em geral têm mais momentum no ecossistema.
LangGraph: A Alternativa Dentro do LangChain
Vale separar, porque frequentemente é o que as pessoas realmente querem quando dizem que querem uma alternativa.
LangGraph — do mesmo time, licença MIT, na 1.2.11 — descreve-se como sendo para "building stateful, multi-actor applications with LLMs". É um modelo de execução em grafo com estado explícito, em vez de uma abstração de chain.
A distinção importa porque a maioria das queixas sobre o LangChain diz respeito a fluxo de controle oculto. O LangGraph torna o fluxo de controle a coisa que você escreve: nós, arestas, transições condicionais e um objeto de estado que você define. Isso é consideravelmente mais legível quando algo dá errado às três da manhã.
Escolha quando sua aplicação tem estado de verdade, ramificações ou ciclos — um agente que faz loop, um fluxo com etapas de aprovação, qualquer coisa em que "o que acontece depois" depende do que aconteceu antes. Pode ser usado sem adotar o resto do LangChain.
Sem Framework: O Caso a Favor
A opção que a maioria dos artigos de comparação omite, e a resposta certa para uma parcela substancial das aplicações.
Os SDKs dos provedores de modelo estão bons agora. Chamar um diretamente são poucas linhas, e é completamente transparente:
response = client.messages.create(
model=MODEL,
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
O que você abre mão: abstração de provedor, integrações prontas, componentes de recuperação prontos e o loop de agente.
O que você ganha: você consegue ler o próprio código. O prompt enviado é o prompt no arquivo. Depurar é ler uma request e uma response, em vez de rastrear camadas de framework. Sua árvore de dependências é um SDK. E as atualizações são as release notes do provedor, não um guia de migração de framework.
Uma posição intermediária razoável: use bibliotecas estreitas para problemas específicos — Instructor para saídas estruturadas, um client de banco vetorial para recuperação, um client HTTP para tool calls — e escreva a orquestração você mesmo. Orquestração costuma ser cinquenta linhas, e cinquenta linhas que você escreveu são mais fáceis de manter do que um framework que você não escreveu.
Quando um framework realmente ganha o lugar: quando você precisa de muitas integrações de provedor, quando está construindo agentes com uso complexo de tools e quer o loop resolvido, quando um time se beneficia de convenções compartilhadas, ou quando a velocidade de prototipar importa mais do que a legibilidade em produção. São razões reais e se aplicam a projetos reais.
O modo de falha a evitar é adotar um framework pela demo e descobrir em produção que você não consegue ver o que ele faz.
Migrando para Longe de um Framework
Se você já tem uma aplicação LangChain e está considerando a mudança, o trabalho é mais previsível do que parece — e a sequência importa.
Descubra primeiro o que ele está realmente enviando. Antes de mudar qualquer coisa, capture os prompts e parâmetros reais. A maioria dos frameworks expõe um callback ou uma flag de debug para isso, e ativá-la produz o artefato mais útil de todo o exercício: um registro do que sua aplicação faz, expresso como HTTP requests em vez de method calls. Metade das vezes isso sozinho revela que o framework está fazendo algo que você não pretendia.
Mova um componente por vez, não a aplicação inteira. As peças são separáveis. Substitua a etapa de recuperação por chamadas diretas ao client do banco vetorial, deixando o resto no lugar; confirme que a qualidade da saída não mudou; depois mova a próxima peça. Um rewrite big-bang mistura "o código novo está errado" com "o código novo é diferente", e você perde a capacidade de distinguir.
Mantenha um harness de comparação de saídas. Rode as duas implementações contra as mesmas entradas e faça diff dos resultados. Recuperação e geração são não determinísticas o bastante para que "parece ok" não seja evidência, e cem saídas pareadas vão mostrar uma regressão que o spot-check não mostra.
Espere que os templates de prompt sejam a parte difícil. Templates de prompt de framework frequentemente incluem boilerplate que você não escreveu e talvez não tenha lido — instruções de formatação, output parsers, scaffolding few-shot. Reproduzir o comportamento significa reproduzir isso, por isso capturar os prompts realmente enviados vem primeiro.
E seja honesto sobre se vale a pena. Uma aplicação que funciona e que você acha um pouco opaca não é obviamente pior do que uma reescrita que você entende e que tem bugs novos. O caso para migrar é forte quando o framework está custando ativamente — tempo de debug, churn de upgrade, conflitos de dependência — e fraco quando a motivação é estética. Rewrites justificados por gosto têm um histórico ruim.
O caminho intermediário realista para a maioria dos times é parar de adicionar superfície nova de framework em vez de remover a superfície existente. Componentes novos escritos direto, os antigos deixados em paz até precisarem mudar de qualquer forma.
Como Escolher
Um procedimento curto que resolve a maioria dos casos.
Anote o que você realmente precisa. Saídas estruturadas? Recuperação? Agentes em vários passos com tools? Troca de provedor? A maioria dos projetos precisa de um ou dois desses. Adotar um framework geral por um só é de onde vem o arrependimento.
Tente primeiro sem framework. Meio dia escrevendo direto contra um SDK mostra qual é de fato a parte difícil do seu problema, e essa resposta costuma apontar para uma biblioteca específica, não para um framework geral.
Combine a ferramenta com a parte difícil. Qualidade de recuperação aponta para LlamaIndex. Qualidade mensurável de tarefa com um conjunto de avaliação aponta para DSPy. Extração estruturada aponta para Instructor ou Pydantic AI. Fluxos stateful em vários passos apontam para LangGraph ou Haystack. Empresarial multilíngue aponta para Semantic Kernel.
Pese o custo de saída. Quanto do seu código mudaria se você removesse isso? Uma biblioteca que você chama é barata de deixar; um framework que dono do fluxo de controle não é. Essa pergunta vale ser feita antes da adoção, não depois.
E não escolha só por popularidade. Todas as opções aqui são ativamente mantidas e com licença permissiva. O tamanho do ecossistema importa para achar exemplos, e não é a mesma coisa que adequação ao seu problema.
Perguntas Frequentes
Qual é a melhor alternativa ao LangChain?
Depende de qual parte você precisa. LlamaIndex para aplicações pesadas em recuperação, Haystack para pipelines de produção inspecionáveis, DSPy para tarefas com qualidade mensurável, Instructor ou Pydantic AI para saídas estruturadas, LangGraph para fluxos stateful. Para muitas aplicações, chamar o SDK do provedor diretamente é a melhor opção.
O LangChain ainda é mantido?
Muito. langchain estava em 1.3.18 e langchain-core em 1.6.1 no fim de agosto de 2026, ambos com licença MIT, e o repositório está entre os mais ativos da categoria. Boa parte da crítica em circulação descreve versões anteriores.
Preciso de um framework para construir com LLMs?
Não. Os SDKs dos provedores são diretos, e uma chamada direta são poucas linhas com transparência total sobre o que é enviado. Frameworks ganham o lugar com muitas integrações, loops de agente complexos ou convenções compartilhadas de time — e custam a capacidade de ver o que está acontecendo.
LangChain ou LlamaIndex?
LlamaIndex se a recuperação é a parte difícil: os document loaders, as estratégias de chunking e as abstrações de índice são mais desenvolvidas. LangChain se você precisa de composição ampla entre muitos provedores e tools. Ambos cresceram e viraram frameworks gerais, então a distinção é menor do que já foi.
O que é DSPy e como é diferente?
Trata prompts como parâmetros a otimizar, não como texto a escrever. Você declara entradas e saídas, define uma métrica, e o framework otimiza prompts e exemplos few-shot contra o seu conjunto de avaliação. Exige um conjunto de avaliação, que é o custo real e também o benefício real.
LangGraph é uma alternativa ao LangChain?
É do mesmo time e pode ser usado de forma independente. Substitui abstrações de chain por um grafo explícito de nós, arestas e estado, o que atende à queixa mais comum sobre o LangChain — que o fluxo de controle fica oculto. Para aplicações stateful ou com ramificações, frequentemente é o que as pessoas realmente queriam.
Qual framework de LLM é melhor para produção?
Haystack é o mais explicitamente orientado a produção, com pipelines serializáveis que você pode versionar e revisar. LangGraph serve para fluxos stateful. Mas a escolha mais amigável à produção muitas vezes é a de menos framework — código que você lê às três da manhã vence abstrações que você precisa rastrear.
Esses frameworks são gratuitos e open source?
Todos. LangChain, LangGraph, LlamaIndex, DSPy, Semantic Kernel, Pydantic AI e Instructor têm licença MIT; Haystack é Apache-2.0. Todos são permissivos, sem restrições copyleft, e todos estavam em desenvolvimento ativo em setembro de 2026.
Conclusão
A pergunta do framework é, na verdade, uma pergunta de escopo. Cada projeto aqui é bem mantido e com licença permissiva, então a decisão não é sobre qualidade — é sobre quanto do fluxo de controle da sua aplicação você quer entregar.
Entregue muito e você ganha velocidade até a primeira versão funcionando, integrações que você não escreveu e um loop de agente em que você não precisou pensar. Entregue pouco e você ganha código que consegue ler, uma árvore de dependências que consegue auditar e debug que consiste em olhar uma request e uma response.
O hábito que vale construir é passar meio dia sem framework primeiro. Isso mostra qual é de fato a parte difícil do seu problema — e costuma ser qualidade de recuperação, ou validade de saída estruturada, ou avaliação, nenhuma das quais um framework geral resolve melhor do que uma biblioteca focada.
Depois escolha para esse problema específico. LlamaIndex para recuperação, DSPy onde você consegue medir qualidade, Instructor ou Pydantic AI para saídas estruturadas, LangGraph ou Haystack onde estado e inspecionabilidade importam, Semantic Kernel onde a decisão de plataforma já está tomada. E mantenha o custo de saída à vista, porque a diferença entre uma biblioteca e um framework não é o que ela faz por você — é quanto do seu código precisa mudar quando você para de usá-la.
