Problema
Chave no app mobile, prompt concatenado sem sanitização e ausência de timeout — fila de requests estoura custo e SLA. “IA no backend” virou script frágil.
Solução
Toda chamada a modelo atrás de serviço server-side com rate limit, quota por tenant, logging sem dados sensíveis e retries exponenciais só onde idempotente. Abstrair provedor (LLMProvider) para trocar OpenAI ↔ Gemini sem reescrever casos de uso.
Arquitetura
Client → sua API → LLMProvider → OpenAI/Gemini
↘ cache de respostas (opcional) + moderation
- Streaming: SSE ou WebSocket com backpressure.
- Guardrails: validar saída com schema (JSON mode / repair loop com limite).
Código
export async function summarizeTicket(text: string) {
const truncated = text.slice(0, 12_000); // política explícita
const res = await openai.chat.completions.create({
model: "gpt-4.1-mini",
messages: [
{ role: "system", content: "Resuma em 5 bullets objetivos." },
{ role: "user", content: truncated },
],
max_tokens: 400,
temperature: 0.2,
});
return res.choices[0]?.message?.content ?? "";
}Performance
Batch onde fizer sentido; cache semântico cuidadoso; modelos menores para triagem e grandes só para etapa final.
Melhorias futuras
Evals automatizados; tracing por trace_id; fallback multi-provedor.
Conclusão
IA em 2026 é dependência externa como pagamento ou e-mail. Tratar assim no código é o que diferencia experimento de feature de produto.