Postman escala agente IA pra 40M developers (lições reais)
Postman roda agentes de IA pra 40M developers em produção. Demo vs realidade: Como escalar agente sem quebrar. Lições práticas.
Equipe OpenClaw · Time de Engenharia & Produto
A Equipe OpenClaw é formada por engenheiros, designers e especialistas em IA dedicados a construir a melhor plataforma de agentes conversacionais para negócios brasileiros. Combinamos expertise…
Postman escala agente IA pra 40M developers (lições reais)
Notícia: Postman (plataforma de API development usada por 40 milhões de developers) lançou Agent Mode: agente de IA integrado na plataforma. Problema: Não era só fazer demo funcionar — era escalar pra 40M users simultâneos, sem quebrar, sem custar R$ 10M/mês em tokens.
Implicação: Postman resolveu problemas que TODO founder com agente de IA em produção enfrenta. As lições deles? Ouro puro pra você.
**"Você é founder de SaaS com agente WhatsApp.
Cenário: Demo funciona perfeito
├─ Você testa com 10 users: Tudo bem ├─ Você escala pra 100 users: Latência aumenta (5s → 20s) ├─ Você tenta 1K users: Agente começa a alucinar (respostas piores) ├─ Você checa bill AWS: R$ 500K/mês (esperado: R$ 50K) ├─ Você tira agente do ar: Clientes furiosos └─ Realidade: Scaling é mais hard que build "**
O desafio: Demo ≠ Produção
Problema 1: Latência
Demo (10 users):
User pede: "Help me test this API"
Latência esperada: ~3-5 segundos Real: 3-5 segundos ✅
User experience: "Wow, AI assistant é rápido!"
Produção (40M users):
Milhões de users pedindo ajuda SIMULTANEAMENTE
Problema: ├─ LLM model tem limite de throughput (ex: 100 requests/second) ├─ Se 1M users acionam agente ao mesmo tempo ├─ Queue forma (fila de espera) ├─ Latência: 3s → 30s → 300s+ (inaceitável) └─ Users: "Agente tá morto" (churn)
Solução (Postman usou): ├─ Modelo sharding: Múltiplos models rodando em paralelo ├─ Request routing: Distribuir across servers ├─ Caching: Respostas similares são cached (não re-compute) └─ Async processing: Algumas requests rodam em background
Problema 2: Custo de tokens
Demo (100 requisições/dia):
Custo estimado: ~R$ 2/dia
Todos agentes = sucesso ✅
Produção (40M users, 10% usa agente/dia):
40M × 10% = 4M users/dia usando agente
Cada request = ~1000 tokens (média) ├─ Input: 500 tokens (contexto, história de chat) ├─ Output: 500 tokens (resposta)
Total/dia: 4M users × 1000 tokens = 4 bilhões tokens
Custo: ├─ Claude/GPT4: ~$0.01 per 1K tokens ├─ 4B tokens × $0.01 = $40K/dia ├─ $40K × 30 = $1.2M/mês └─ ❌ Insustentável (margin não suporta)
Solução (Postman usou): ├─ Usar modelo mais barato (ex: Bedrock with Llama) ├─ Prompt compression (remover contexto desnecessário) ├─ Caching agressivo (reuse responses) ├─ Rate-limiting (limitar requests por user) └─ Resultado: ~$50K-100K/mês (sustentável)
Problema 3: Qualidade degrada com escala
Demo (teste manual):
You: "How do I test this API?" Agent: "Here's how: [perfect response]"
Quality: ⭐⭐⭐⭐⭐ (100%)
Produção (automatizado, 40M users):
Problema: ├─ Agente ve 40M contextos diferentes ├─ Agente começa a hallucinate (alucinações) ├─ Respostas ficam genéricas (low quality) ├─ Alguns users recebem respostas completamente erradas └─ Quality degrada: 100% → 70%
Razão: ├─ LLM não é determinístico (mesmo prompt = outputs diferentes) ├─ Agente não tem memória (esquece contexto passado) ├─ Agente não consegue lidar com "ambiguidade" em escala └─ Resultado: Respostas piores quanto mais users
Solução (Postman usou): ├─ Fine-tuning: Treinar modelo especificamente pra Postman context ├─ Grounding: Conectar agente a database ("facts" checadas) ├─ Feedback loop: Usuários marcam respostas ruins (retraining) ├─ Human-in-the-loop: Respostas de alta-risco requerem human review └─ Monitoring: Detectar hallucinations automaticamente
Arquitetura de Postman: Como eles escalaram
1. Model sharding + Load balancing
O que fizeram:
Infra de Postman (antes): └─ 1 LLM model rodando (gargalo)
Infra de Postman (depois): ├─ Model 1: Bedrock Claude ├─ Model 2: Bedrock Llama (cheaper) ├─ Model 3: Local small model (on-device) └─ Load balancer: Roteia request pro model menos ocupado
Benefício: ├─ Throughput aumenta 3x (3 models em paralelo) ├─ Se 1 model fica lento, outros pegam overflow ├─ Custo reduz (Llama é 5x mais barato que Claude) └─ Latência reduz: 30s → 10s
2. Prompt compression + Caching
O que fizeram:
Prompt antes (verboso): ├─ Full context: 2000+ tokens ├─ Chat history: 1000+ tokens ├─ System instructions: 500+ tokens └─ Total: ~3500 tokens/request
Prompt depois (otimizado): ├─ Essencial context: 300 tokens (removeu redundância) ├─ Summarized history: 200 tokens (resumiu convo anterior) ├─ Instructions: 100 tokens (simplificou) └─ Total: ~600 tokens/request
Benefício: ├─ Token cost reduz 5x (3500 → 600) ├─ Latência reduz (menos processamento) ├─ Acurácia melhora (menos "noise") └─ Resultado: Produção fica viável
Caching: ├─ Mesma pergunta? Use resposta cached ├─ "How do I set headers?" → já respondemos 100K vezes ├─ Cache hit: Retorna em <100ms (vs 5s LLM call) ├─ Cache hit rate: ~40% (Postman estima) └─ Resultado: 40% de requests economizam 95% de tempo/cost
3. Asynchronous processing
O que fizeram:
Fluxo antes (síncrono): ├─ User solicita: "Help me debug this" ├─ Sistema: Aguarda LLM responder (bloqueia) ├─ Latência: ~5s (síncrono) └─ User: Aguarda
Fluxo depois (assincrônico): ├─ User solicita: "Help me debug this" ├─ Sistema: Enqueue job (retorna imediatamente) ├─ User: Vê mensagem "Processing your request..." ├─ Background job: Roda LLM call (não bloqueia user) ├─ Response: Notifica user quando pronto (em vez de esperar) └─ Latência percebida: <100ms (vs 5s)
Benefício: ├─ User experience melhora (não trava) ├─ Throughput aumenta (backend não fica bloqueado) ├─ Escalabilidade aumenta (request processing é paralelo) └─ Resultado: 10x mais users com mesma infra
4. Observability + Monitoring
O que fizeram:
Metricas que monitoram (real-time): ├─ Latency: P50, P95, P99 (percentis) ├─ Token usage: Total tokens/hour, cost/hour ├─ Error rate: % de requests que falharam ├─ Hallucination rate: % de respostas incorretas (detectado via user feedback) ├─ Cache hit rate: % de requests servidos por cache ├─ Model performance: Qual model performou melhor? ├─ User satisfaction: Thumbs up/down feedback └─ Infrastructure: CPU, memory, database latency
Alerts automáticos: ├─ P99 latency > 10s → Escala mais servers ├─ Error rate > 5% → Rollback agente ├─ Cost/hour > $500 → Rate-limit users ├─ Hallucination rate > 10% → Retrain modelo └─ Cache hit rate < 30% → Otimizar prompts
Benefício: ├─ Detecta problema antes de usuario reclamar ├─ Reagem em minutos (não horas) ├─ Data-driven decisions (não guessing) └─ Resultado: SLA de 99.9% uptime
Lições práticas pra seu agente
Lição 1: Não comece com LLM premium
Erro comum:
Startup thinking: "Vou usar GPT-4 (melhor model)"
Realidade: ├─ GPT-4: $0.03-0.06 per 1K tokens ├─ Llama 2: $0.001 per 1K tokens (30x mais barato) ├─ Local model: $0 (roda on-device) └─ Margem: Se usar GPT-4, unit economics quebra
Estrategia de Postman: ├─ Comece com Llama/Bedrock (barato) ├─ Se não funciona bem: Use GPT-4 pra casos específicos ├─ Resultado: 90% de requests com Llama, 10% com GPT-4 └─ Custo: 5x mais barato que all-GPT-4
Ação:
python
model_selector.py
class AdaptiveModelRouter: """ Escolhe modelo baseado em request complexity """
def select_model(self, query: str) -> str:
complexity = estimate_complexity(query)
if complexity < 3: # Fácil (ex: "What is REST API?")
return "llama-7b" # Barato, rápido
elif complexity < 6: # Médio (ex: "Debug my code")
return "llama-70b" # Mais caro, melhor
else: # Difícil (ex: "Solve complex architecture problem")
return "gpt-4" # Premium (últimas tentativas)
def estimate_complexity(query: str) -> int:
# Heurística simples
length = len(query.split())
has_code = "" in query
has_error = "error" in query.lower()
score = length // 5 # +1 per 5 words
score += 2 if has_code else 0
score += 1 if has_error else 0
return min(score, 10) # Cap at 10
Lição 2: Caching é seu melhor amigo
Dado que 40% de requests são repetidos:
python
cache_strategy.py
class SmartCache: def init(self): self.cache = {} # {question_hash: response} self.ttl = 86400 # 24 hours
def get_response(self, query: str):
query_hash = hash_query(query)
# Exact match?
if query_hash in self.cache:
return self.cache[query_hash] # <100ms
# Similar query?
similar = find_similar_query(query) # Embedding similarity
if similar:
return adapt_response(self.cache[similar], query)
# No cache hit, call LLM
response = llm.call(query)
self.cache[query_hash] = response
return response
Impact:
- Without cache: 4B tokens/day = $40K/day
- With 40% hit rate: 2.4B tokens/day = $24K/day
- Savings: $16K/day = $480K/month!
Lição 3: Monitoring desde dia 1
O que monitorar:
☐ Latency (P50, P95, P99) ☐ Cost per request (token usage) ☐ Error rate (failures) ☐ Hallucination rate (incorrect responses) ☐ Cache hit rate ☐ User satisfaction (thumbs up/down) ☐ Model performance (which model is best?) ☐ Infrastructure health (CPU, memory, DB)
Setup (simple): ├─ Use CloudWatch/Datadog (já integrado com AWS) ├─ Set alerts (quando métrica diverge de baseline) ├─ Dashboard: Visualize em tempo real └─ Weekly review: Compare semana anterior
Lição 4: Rate-limiting é obrigatório
Sem rate-limiting:
Um usuário maligno (ou bot): ├─ Faz 1M requests/hora ├─ Sua bill: +$10K/hora ├─ Seu serviço: Slow pra outros users └─ Você não sabe quem foi (até tarde)
Com rate-limiting: ├─ Max 100 requests/user/hora ├─ Exceder: "Rate limited, try again later" ├─ Sua bill: Controlada ├─ Seu serviço: Fair pra todos └─ Resultado: Sustentável
Implementação:
python
rate_limiter.py
class RateLimiter: def init(self, max_requests=100, window_seconds=3600): self.max_requests = max_requests self.window_seconds = window_seconds self.requests = {} # {user_id: [timestamps...]}
def is_allowed(self, user_id: str) -> bool:
now = time.time()
window_start = now - self.window_seconds
# Clean old requests
if user_id in self.requests:
self.requests[user_id] = [
ts for ts in self.requests[user_id]
if ts > window_start
]
else:
self.requests[user_id] = []
# Check limit
if len(self.requests[user_id]) < self.max_requests:
self.requests[user_id].append(now)
return True
else:
return False # Rate limited
Checklist: Preparar seu agente pra escala
☐ Escolher modelo barato (Llama, não GPT-4 default) ☐ Implementar caching (respostas similares) ☐ Async processing (não bloqueia user) ☐ Load balancing (múltiplos models, múltiplos replicas) ☐ Monitoring (latency, cost, error, satisfaction) ☐ Rate-limiting (por user, por IP) ☐ Prompt compression (remover contexto desnecessário) ☐ Feedback loop (users marcam respostas ruins) ☐ Grounding (conectar a database checado) ☐ Fallback strategy (se agente falha, retorna default)
Conclusão: Demo é fácil, produção é hard
Realidade:
Demo (10 users): ✅ Agente funciona ✅ Latência: <5s ✅ Custo: Negligível ✅ Qualidade: Ótima └─ Conclusão: "Sucesso! Ship it!"
Produção (1M users): ❌ Agente lento (30s+) ❌ Custo explode ($100K/mês) ❌ Qualidade degrade (mais erros) ❌ Uptime cai (overload) └─ Conclusão: "Por que não avisar antes?" (retro)
Postman (40M users): ✅ Agente rápido (<5s P99) ✅ Custo sustentável (~$100K/mês, margens positivas) ✅ Qualidade consistente (99%+ acurácia) ✅ Uptime 99.9%+ └─ Conclusão: "Engineering maturity" (years of work)
Implicação:
Você tem 2 opções:
-
Learning the hard way └─ Build → Scale → Falha → Rebuild └─ Tempo: 1-2 anos └─ Custo: R$ 1M+ em infraestrutura └─ Oportunidade perdida: Meses de churn
-
Learning de Postman └─ Implementar estratégias de Postman desde dia 1 └─ Tempo: 2-3 meses └─ Custo: R$ 100K em eng (uma vez) └─ Vantagem: 10x mais rápido, 10x mais barato
Ação:
- Comece com Llama (não GPT-4): Economia de custo imediata
- Implemente caching: 40% de requests economizam 95% de tempo/cost
- Setup monitoring: Veja problemas em tempo real
- Add rate-limiting: Proteja sua infraestrutura
- Test em 10K+ users: Descubra gargalos antes de produção
→ OpenClaw: Agentes otimizados pra escala (já pronto pra 1M+ users)
Sua demo funciona em 10 users. Consegue rodar em 1M? Postman aprendeu da forma difícil. Você pode aprender de graça. 🚀
Publicado em 9 de outubro de 2026