Em 2026, "AI feature" é cobrança em quase todo produto. A maioria das implementações é frágil: prompts hardcoded em strings, sem versioning; sem evals; latency 30s sem streaming; vazamento de PII pra provider; rate limit ignorado; cost imprevisível. Frente a frente com production reality, "ChatGPT mas pro nosso uso" frequentemente não passa do MVP.
Este módulo é AI/LLM como engenheiro de sistemas vê: APIs (Anthropic Claude, OpenAI, Gemini, open-source), token economy, streaming, structured outputs, function calling, RAG, embeddings, vector DBs, agents, evals, observability LLM, custo, segurança/PII. Não é curso de ML; é engenharia de software com modelos de linguagem como deps.
2. Teoria Hard
2.1 LLM como dep externa
Trate como qualquer dep externa:
Latência variável (1-30s típicos).
Falhas transientes.
Rate limits.
Cost por chamada.
Versionamento (Claude 4.7, GPT-5, etc., modelos evoluem; prompts viram brittle se não versionados).
Outputs não-determinísticos.
Aplicar resilience patterns (04-04): timeouts, retries em transient errors, circuit breaker, idempotency keys, fallback (modelo menor ou cached response).
Cost = sum(tokens) per request × volume. Em SaaS, isso vira parcela material da bill.
2.4 Prompt caching
Anthropic e similares oferecem cache de prefix prompt: chamadas com mesmo início (system prompt, instructions longas, RAG context) reusam tokens cached, reduzindo cost 80-90% em hit.
Implementar: marca cache breakpoints na request. Em Logística com prompt sistema longo (regras do domínio, examples), cache vira no-brainer.
2.5 Streaming
LLM produz tokens sequencialmente. UI deve streaming pra evitar 10s+ de "loading":
SSE: padrão. ChatGPT-style.
WebSocket: bi-direcional.
Server emite tokens conforme chegam do provider.
UX: user vê texto aparecer; perceived latency drasticamente menor.
2.6 Structured outputs e function calling
Em vez de "chat" livre, force formato:
JSON mode: provider garante saída JSON valid.
Schema-validated: provider segue Zod/JSON Schema.
Function calling / tool use: LLM "chama" funções com argumentos tipados; app executa e retorna result; LLM continua.
Function calling é o que permite agents robustos. Exemplo:
User: "Reagende minha entrega de amanhã pra quinta."
LLM (tool call): findOrders(customer="...", date="2026-04-29")
App executes; returns orders.
LLM (tool call): rescheduleOrder(orderId="...", newDate="2026-05-01")
App executes; returns confirmation.
LLM: "Reagendei pra quinta-feira, 1º de maio."
Exige tool definitions claras (name, description, params schema). E código robusto que executa as tools.
2.7 Context window management
Modelos têm limit de tokens (8k, 32k, 200k, 1M). Conversas longas excedem. Estratégias:
Truncation: drop mensagens antigas.
Summarization: compactar histórico em resumo.
Retrieval: extrai apenas peças relevantes (RAG).
Em apps de produção, gerenciar context é tarefa de engenharia.
2.8 RAG, Retrieval Augmented Generation
LLM não sabe seu domínio. RAG alimenta LLM com contexto relevante:
Documents (KB, Logística policies, FAQ) chunked e embedded.
Embeddings armazenados em vector DB.
Query do user → embed → find top-K similar chunks.
Inject chunks em prompt → LLM responde grounded.
Eficácia: RAG bem feito reduz hallucination, aumenta accuracy.