ABJ Informática
Home IA Generativa
00:00:00
341 acessos

Logística — rastreio e atendimento com IA

Estudo de Caso

Estudo de caso da TransLog BR (fictícia): quatro programas PHP aplicam classificação de tickets, geração de e-mails, RAG sobre FAQ + pedidos e extração de endereço em JSON — com dados de exemplo e modo demo sem API.

Cenário — TransLog BR

Arquivo Técnica de IA Função
01-classificar-ticket.php Few-shot Triagem automática de mensagens SAC
02-email-atraso.php Prompt estruturado + contexto JSON E-mail de atraso personalizado
03-rag-status-pedido.php RAG simplificado Resposta sobre status com FAQ + pedido
04-extrair-endereco.php Structured output (JSON) Endereço a partir de texto livre

Dados de exemplo

Pedido de exemplo (pedidos.json):

{
  "codigo": "BR-2026-00492",
  "cliente": "TechParts Importadora",
  "origem": "Campinas — SP",
  "destino": "Belo Horizonte — MG",
  "status": "Atrasado",
  "previsao": "2026-02-27",
  "observacao": "Retido no pátio por inspeção documental."
}

Programa 1 — Classificar ticket (few-shot)

# Caminho: abjinfo_gen/exemplos/logistica/01-classificar-ticket.php

php 01-classificar-ticket.php "Minha entrega BR-2026-00492 não chegou"

# Trecho principal — exemplos few-shot + classificação:

$user = <<<PROMPT
Exemplos:
Entrada: "Qual o status do pedido BR-2026-00481?"
Saída: RASTREIO
...
Classifique:
Entrada: "{$mensagem}"
Saída:
PROMPT;

$categoria = $client->chat([
    ['role' => 'system', 'content' => $system],
    ['role' => 'user', 'content' => $user],
], 0.0);

Programa 2 — E-mail de atraso

# Caminho: abjinfo_gen/exemplos/logistica/02-email-atraso.php

php 02-email-atraso.php BR-2026-00492

# Carrega pedido real do JSON e monta o prompt:

$contexto = json_encode($pedido, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);

$prompt = <<<PROMPT
Com base APENAS nos dados JSON abaixo, redija um e-mail formal...
Dados do pedido:
{$contexto}
PROMPT;

Programa 3 — RAG: FAQ + pedido

# Caminho: abjinfo_gen/exemplos/logistica/03-rag-status-pedido.php

php 03-rag-status-pedido.php BR-2026-00492 "Por que atrasou?"

# Montagem do contexto recuperado:

$trechos = [
    '[FAQ]' . "\n" . $faq,
    '[PEDIDO]' . "\n" . json_encode($pedido, JSON_UNESCAPED_UNICODE),
];
$contexto = implode("\n\n---\n\n", $trechos);

# Prompt exige resposta só com base nos trechos e cita a fonte.

Programa 4 — Extrair endereço (JSON)

# Caminho: abjinfo_gen/exemplos/logistica/04-extrair-endereco.php

php 04-extrair-endereco.php

# Saída esperada (estrutura):

{
  "logradouro": "Av. Paulista",
  "numero": "1000",
  "complemento": "conj 42",
  "bairro": "Bela Vista",
  "cidade": "São Paulo",
  "uf": "SP",
  "cep": "01310-100",
  "referencia": "ed. azul ao lado do MASP",
  "contato": "Carlos (11) 98765-4321"
}

Cliente OpenAI compartilhado

# abjinfo_gen/exemplos/logistica/lib/OpenAiClient.php

$client = OpenAiClient::fromEnv();

if ($client === null) {
    echo "[MODO DEMO — defina OPENAI_API_KEY para chamar a API]\n";
    // ... resposta simulada pedagógica
    exit(0);
}

$resposta = $client->chat($messages, $temperature);

Como executar na prática

Etapa operacional Programa sugerido Revisão humana?
Triagem fila SAC 01-classificar-ticket.php Não — só roteamento
Comunicar atraso 02-email-atraso.php Sim — antes de enviar
Chat rastreio 03-rag-status-pedido.php Sim — se status Atrasado
Cadastro endereço 04-extrair-endereco.php Sim — conferir CEP/número

Vídeo — RAG na prática (Azure AI Search)

Demonstração de Retrieval Augmented Generation — base do Programa 3 do estudo de caso TransLog BR.

Abrir no YouTube
Baixar projeto (.zip) Quatro scripts PHP, dados de exemplo e README — funciona em modo demo sem API.
← Voltar aos tópicos