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.
| 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 |
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."
}
# 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);
# 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;
# 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.
# 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"
}
# 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);
| 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 |
Demonstração de Retrieval Augmented Generation — base do Programa 3 do estudo de caso TransLog BR.