Uma pergunta. Seis especialistas. Uma decisão de caixa.
Loop agêntico explícito. Cascade Opus→Sonnet→Haiku. Python + FastAPI.
Agentes como objetos + saída estruturada. Fallback determinístico.
UI-only — o modelo mental do grafo. Lição de honestidade de engenharia.
Runtime-first: DO, edge, WebSocket "de graça".
A tese: runtime de borda + cérebro de planejamento, colados por MCP. A arquitetura mais alinhada a um banco.
O padrão é independente do framework. O SDK muda o custo de produção daquele padrão — não o padrão.
Passos em sequência; a saída de um LLM alimenta o próximo.
Classifica a entrada e a envia ao handler certo. ← o híbrido separa factual de planejamento.
Subtarefas independentes em paralelo, com agregação.
LLM central quebra a tarefa em runtime, delega e sintetiza. Espinha dorsal do cash management.
Um gera, outro critica e refina em loop.
Como cada implementação maximiza o seu SDK — com o trecho que revela a personalidade de cada um.
Orquestrador (Opus) roda um tool-use loop sobre 4 tools; cada especialista é uma chamada Claude one-shot. O ciclo é dirigido pela inspeção de stop_reason.
for _ in range(max_iterations):
response = await client.messages.create(model=orchestrator_model, tools=ALL_TOOLS, ...)
if response.stop_reason == "end_turn": yield final; return
if response.stop_reason == "tool_use":
for block in response.content:
output = await TOOL_DISPATCH[block.name](**block.input)
Um Treasury Advisor orquestra; cada especialista é uma tool que instancia um sub-Agent com saída estruturada Zod.
outputType / Responses strict:true.tool({ name: config.toolName, parameters: z.object({ query: z.string() }),
execute: async ({ query }) => {
const agent = new Agent({ model: "gpt-4.1-mini", outputType: specialistSchema });
return (await run(agent, prompt, { conversationId, maxTurns: 4 })).finalOutput;
}})
O nome promete LangGraph; o código é só frontend com streaming simulado. Não há LangGraph rodando — o próprio MERITS.md audita.
useStream({stream_mode:"updates"}) retornaria.NodeInterrupt, Send(), LangSmith.sg = StateGraph(CashManagementState)
sg.add_conditional_edges("risk_gate",
lambda s: "human_approval" if s.get("requires_approval") else "synthesize")
graph = sg.compile(checkpointer=PostgresSaver(...))
OrchestratorAgent estende AIChatAgent; loop streamText com tools Zod sobre 5 especialistas-DO.
export default { async fetch(request, env) {
const r = await routeAgentRequest(request, env);
return r ?? env.ASSETS.fetch(request);
} };
const intent = await this.classifyIntent(model, scenarioId);
if (intent === "planning" || intent === "compliance_critical")
return this.delegateToBrain(...); // → LangGraph
return this.runFactualPath(...); // → DOs locais
Use os botões para destacar uma coluna (SDK).
| Dimensão | Claude | OpenAI | LangGraph | Cloudflare | Híbrido |
|---|---|---|---|---|---|
| Estado / memória | manual (DB) | Sessions | checkpointer | SQLite/DO ✦ | DO + checkpoint |
| Streaming | SSE manual | run_streamed | stream_mode | WebSocket ✦ | WS + SSE |
| Human-in-the-loop | DIY | DIY | nativo ✦ | reinventar | nativo ✦ |
| Time-travel / auditoria | manual | tracing | nativo ✦ | ad-hoc | nativo ✦ |
| Latência ponta-a-ponta | média | média | maior | baixíssima ✦ | baixa/média |
| Multi-tenant / isolamento | linha em DB | sessão | thread_id | DO físico ✦ | DO + thread ✦ |
| Saída estruturada | parse manual | Zod / strict ✦ | Pydantic state | Zod nas tools | Pydantic ⊕ Zod |
| Paralelização | sequencial (POC) | via tools | Send() ✦ | Promise.all | asyncio.gather/Send |
| Observabilidade | logs próprios | tracing SDK | LangSmith ✦ | Tail + Logs | LangSmith + Tail |
| Deploy | server + DB | server | PG + API + Redis | 1 comando ✦ | Worker + PG |
| Otimização de custo | cascade ✦ | mini + fallback | depende provider | Workers AI s/ chave | WAI + Claude |
| Lock-in | baixo ✦ | médio | médio | alto | médio (MCP) |
| Fit p/ banco grande | POC | produto | compliance | escala | COMPLETO ✦ |
✦ = ponto onde aquele SDK é diferencial. Verde = vantagem clara.
Regra de bolso: escolha pela camada que domina o seu requisito.
O valor não está em "qual framework" — está no que combinar as camadas permite oferecer ao cliente de atacado.
Edge (<2s) + planner auditável: conversar com o caixa como com um analista sênior, com replay de cada recomendação para o comitê.
NodeInterrupt troca o "e-mail pro gerente" por uma pausa formal dentro do agente — controle bancário digital nativo.
Um Durable Object por empresa-cliente isola contexto fisicamente — argumento de LGPD/segregação que vira diferencial.
ERP/Bancos/Mercado/Risco viram um catálogo de capacidades sob um contrato — base para um marketplace de agentes de tesouraria.
Opus só onde precisa, Haiku no volume: experiências premium de IA com custo unitário controlado.
Testar cenários e comparar branches de decisão; briefing pré-comitê automático com trilho de auditoria.
Não existe "melhor SDK" — existe melhor camada. A inovação vem de compor raciocínio + governança + runtime.