Introdução a Agentes

Fluxo de Decisão

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

Intermediário 30 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

Uma pergunta, muitos caminhos

"Meu pedido já saiu?" parece simples. Na prática, o agente precisa decidir:

  • Tenho número do pedido?
  • Preciso chamar tool ou só conversar?
  • O pedido existe?
  • Como formular resposta com dado real?

Esta aula é o mapa desse labirinto — para você implementar sem adivinhar no meio do código.

Caso: "Meu pedido já saiu?"

1. Usuário envia mensagem
2. Backend carrega histórico + system prompt
3. LLM analisa intenção
4. LLM percebe: falta ID → pede ao usuário (sem tool ainda)
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

Note os dois turnos: primeiro coleta informação, depois age. Agente bom não chuta — pergunta o que falta.

Diálogo real:

Usuário: "Meu pedido já saiu?"
Agente: "Claro! Qual o número do pedido?"
Usuário: "8842"
Agente: "Pedido 8842 enviado. Rastreio BR123."

Diagrama

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

O backend está no centro — não o modelo. Quem persiste histórico, autoriza tool e escala humano é sempre seu código.

Á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. Não espere que o modelo adivinhe políticas da empresa — documente no PCORS.

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.

Prompt + tools + executor = comportamento previsível.

Fallback humano

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

Escalar para humano não é falha do agente — é feature. Cliente irritado com pedido não encontrado duas vezes prefere pessoa real a loop infinito com bot.

Tom da mensagem:

"Entendo sua frustração. Encaminhei para nossa equipe — protocolo #9921. Alguém retorna em até 2 horas."

Métricas do fluxo

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

Métrica guia onde melhorar: prompt, tool ou fallback humano.

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

Fluxo mapeado — hora de entregar. Na próxima aula, o projeto final que consolida tudo em um sistema publicável.