# Como decidir: cadeia, grafo ou harness
Antes de escolher LangChain ou LangGraph, nomeie o fluxo que você quer construir. A diferença principal não é o logotipo: é a forma do fluxo. São três formas práticas.
Cadeia (LangChain)
A cadeia é o caso mínimo e direto. Estrutura LCEL: prompt → modelo → StrOutputParser. Você injeta um dicionário, recebe uma string. É simples de ler e de invocar em poucas linhas. Não há tentativas automáticas de retry, pausa para humano, checkpoint ou persistência de estado entre sessões. Quando o pedido é uma transformação única (traduzir, classificar, extrair), LCEL costuma ser suficiente.
O atalho de agente que LangChain oferece compila um runtime por baixo, mas se o fluxo efetivamente não precisa de ciclo ou de estado, você está pagando complexidade desnecessária ao escolher um grafo.
Grafo (LangGraph)
O custo do grafo é desenho: cada nó novo é uma superfície de erro e aumenta o blast radius de uma ferramenta equivocada. Deve-se pesar complexidade versus necessidade de durabilidade e controle.
Harness (política externa)
O harness não é apenas código de grafo: é a política que governa o loop. O IDE ou o sistema externo pode executar o loop, aplicar guias antes da geração (pre-prompts), sensores e políticas pós-sensor (logs, aprovações, drift detection). O harness aparece no pre-commit, no pipeline e em sensores contínuos — não só dentro do chat. Nem LangChain nem LangGraph substituem esse papel.
Onde os dois se cruzam
LangGraph pode compilar um StateGraph e devolver um Runnable compatível com LangChain. Isso significa que você pode invoke um agente do LangGraph como se fosse uma cadeia. Se não houver ferramentas a chamar, o grafo pode operar como uma cadeia vazia de estado. O teste prático: o transcript tem múltiplos nós ou houve um único invoke que acabou? Se for o segundo caso, você pagou o grafo para um problema que LCEL resolve.
Quatro perguntas antes de adicionar um grafo ao PR
- 1O fluxo é unidirecional (gera, classifica, extrai) ou precisa de ciclos? Se unidirecional, use cadeia.
- 2Precisa de retomada após falha ou pausa para humano? Se sim, precisará de checkpointer e interrupt (grafo).
- 1Onde está o "cérebro" real? Na biblioteca, num serviço externo (Cursor, Kiro, Claude Code) ou no harness que aplica políticas?
Conclusão prática