Agentes Autônomos com LangGraph: Um Guia Prático
Agentes Autônomos com LangGraph: Um Guia Prático
LangGraph é a evolução natural do LangChain para criação de agentes mais complexos e controlados. Neste artigo, vou mostrar como usar LangGraph para criar agentes autônomos que executam tarefas multi-step.
Por que LangGraph?
O LangChain tradicional tem limitações quando precisamos de:
- Ciclos complexos de execução
- Estado compartilhado entre steps
- Controle granular do fluxo
- Debugging e observabilidade
LangGraph resolve esses problemas com uma abordagem baseada em grafos.
Conceitos Fundamentais
StateGraph
from langgraph.graph import StateGraph
from typing import TypedDict, Annotated
from operator import add
class AgentState(TypedDict):
messages: Annotated[list, add]
current_step: str
results: dict
workflow = StateGraph(AgentState)Nodes e Edges
def research_node(state: AgentState) -> AgentState:
# Executa pesquisa
result = search_web(state["messages"][-1])
return {"results": {"research": result}}
def analyze_node(state: AgentState) -> AgentState:
# Analisa resultados
analysis = analyze_data(state["results"]["research"])
return {"results": {"analysis": analysis}}
workflow.add_node("research", research_node)
workflow.add_node("analyze", analyze_node)
workflow.add_edge("research", "analyze")Conditional Edges
def should_continue(state: AgentState) -> str:
if state["results"].get("complete"):
return "end"
return "research"
workflow.add_conditional_edges(
"analyze",
should_continue,
{"end": END, "research": "research"}
)Exemplo Completo: Agente de Pesquisa
Veja um exemplo de agente que pesquisa, analisa e gera relatórios:
from langgraph.graph import StateGraph, END
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4-turbo")
def create_research_agent():
workflow = StateGraph(AgentState)
workflow.add_node("plan", plan_research)
workflow.add_node("search", execute_search)
workflow.add_node("analyze", analyze_results)
workflow.add_node("report", generate_report)
workflow.set_entry_point("plan")
workflow.add_edge("plan", "search")
workflow.add_edge("search", "analyze")
workflow.add_conditional_edges(
"analyze",
check_completeness,
{"complete": "report", "incomplete": "search"}
)
workflow.add_edge("report", END)
return workflow.compile()Melhores Práticas
- Estado Imutável: Sempre retorne um novo estado, não modifique in-place
- Checkpoints: Use checkpointing para recuperação de falhas
- Timeouts: Implemente timeouts em cada node
- Observabilidade: Use LangSmith para debugging
Conclusão
LangGraph é essencial para quem precisa criar agentes robustos em produção. A abordagem baseada em grafos traz mais controle e previsibilidade para sistemas de IA autônoma.
Assine a Newsletter
Receba conteúdo exclusivo sobre IA, LLMs e desenvolvimento em produção diretamente no seu email.
Sem spam. Cancele quando quiser.
Posts Relacionados
O gap entre ter dados e entender o que está nos dados
Antes de qualquer pipeline de AI processar dados, alguém precisa inspecioná-los. Excel quebra com volumes reais. Python resolve o volume mas exige código para cada pergunta. Existe uma camada de ferramentas que fica no meio e que faz essa inspeção ser prática.
Prompt não é instrução. Contexto é o recurso que o modelo usa para raciocinar
A maioria das pessoas ainda trata prompt como uma instrução que você dá ao modelo. A mudança de perspectiva que importa é perceber que contexto é o recurso escasso, e o que você injeta nele determina o teto de qualidade do que sai.
Multi-tenancy em agentes: onde a separação de dados tem que ser feita
O default de qualquer deploy de agente é perigoso: qualquer usuário pode ver os dados de qualquer outro. Resolver isso exige uma decisão arquitetural sobre onde a separação de contexto é feita. Na borda, na aplicação, ou na camada de infraestrutura de agente.