Introdução a Agentes

Fluxo de Decisão

Pipeline completo — intenção, tool call, resposta — com exemplo "Meu pedido já saiu?".

Intermediário 25 min 25 pontos Leitura 0%

Nesta aula você vai

  • Mapear fluxo usuário → agente → tool → resposta
  • Tratar casos sem tool (conversa direta)
  • Escalar para humano quando necessário

Fluxo de Decisão

Objetivos

  • Construir agentes orientados a tarefas
  • Visualizar pipeline end-to-end

Caso: "Meu pedido já saiu?"

1. Usuário envia mensagem
2. Backend carrega histórico + system prompt
3. LLM analisa intenção
4. LLM chama buscar_pedido — falta ID? pede ao usuário (sem tool)
5. Usuário: "8842"
6. LLM chama buscar_pedido(8842)
7. Backend executa GET /orders/8842 (autorizado)
8. Retorno: { status: "shipped", tracking: "BR123" }
9. LLM gera: "Seu pedido 8842 foi enviado. Rastreio: BR123."
10. Salva assistant no histórico

Diagrama

┌─────────┐     ┌─────────┐     ┌──────────┐     ┌─────────┐
│ Usuário │────▶│ Backend │────▶│   LLM    │────▶│  Tool   │
└─────────┘     └─────────┘     └──────────┘     └─────────┘
                     ▲                │                │
                     └────────────────┴────────────────┘
                           resultado da tool

Árvore de decisão (simplificada)

Mensagem recebida
├─ Contém ID pedido ou contexto anterior com ID?
│   ├─ Sim → buscar_pedido
│   └─ Não → LLM pergunta número (texto puro)
├─ Pergunta sobre produto?
│   └─ listar_produtos ou buscar_faq
├─ Reclamação grave / jurídico?
│   └─ criar_ticket + mensagem empática
└─ Small talk
    └─ Resposta direta, sem tool

Parte disso o LLM infere; parte você reforça no system prompt.

System prompt para fluxo

Fluxo de pedidos:
1. Se usuário perguntar status e você tiver pedido_id, use buscar_pedido.
2. Se não tiver ID, peça o número do pedido — não invente status.
3. Se buscar_pedido retornar not_found, oriente verificar e-mail de confirmação.
4. Nunca exponha dados de outro cliente.

Fallback humano

if (result.requiresHuman || userMessage.includes('processo') || result.not_found >= 2) {
  await createTicket(sessionId, transcript);
  return 'Encaminhei para nossa equipe. Protocolo #9921.';
}

Métricas do fluxo

  • % mensagens resolvidas sem humano
  • % tool calls bem-sucedidas
  • Tempo médio por conversa
  • Taxa de "not_found" em pedidos

Resumo

  • Agente = pipeline com ramificações, não resposta única
  • Tool só quando há dado/action necessário
  • Peça informação faltante antes de chutar
  • Escala humana é feature, não falha