TIPS 28 · LIMITE

Trezentos euros numa noite

O prompt para o Claude pôr um limite de pedidos na tua app, e como configurar o teto e o alerta de gastos no serviço de IA. Mais o teste para ver se funciona.

O que é e porque importa

Se a tua app chama um serviço de inteligência artificial, cada pedido pagas tu. Não o utilizador que carrega no botão: tu, com a chave que puseste no servidor.

Quase sempre, porém, ninguém escreveu um limite. Basta um bot, um script deixado a correr, alguém que clica cem vezes ou que encontrou a tua chave: os pedidos saem uns atrás dos outros, mesmo de noite, e só dás por isso quando chega a fatura.

O Claude Code escreve-te num instante a função que chama a IA. O limite, muitas vezes, não: não o acrescenta porque ninguém lho pediu. Bastam umas poucas linhas de código e uma definição, mas tens de ser tu a pedi-las.

São precisas duas proteções diferentes, e uma não substitui a outra:

  • O limite de pedidos está no teu código. Diz: esta pessoa pode fazer no máximo tantos pedidos por minuto. Quem o escreve é o Claude.
  • O teto de gastos está no painel do serviço de IA. Diz: este mês não se passa deste valor. Quem o configura és tu, à mão.

O limite trava o abuso do dia a dia. O teto é a rede por baixo: salva-te quando o limite tem um buraco, ou quando a chave cai em mãos erradas e alguém a usa sem passar pela tua app.

1. O limite no código

Abre o Claude Code na pasta da tua app (no terminal: entras na pasta e escreves claude) e cola isto:

O prompt
A minha app chama um serviço de inteligência artificial. Encontra todos os sítios do código de onde sai um pedido à IA. Depois:
1. põe um limite de pedidos por pessoa e por minuto nesses endpoints (por utilizador se tiver sessão iniciada, por endereço IP se não tiver), com uma mensagem clara tipo 'Demasiados pedidos, tenta outra vez daqui a um minuto';
   se a app correr em serverless ou em várias instâncias, o contador tem de estar num armazenamento partilhado (por exemplo Redis), não na memória do servidor;
2. verifica que a chave da IA está só no servidor e nunca no código que chega ao browser ou ao telemóvel;
3. no fim explica-me por palavras simples o que mudaste e como testar.

O que quer dizer, por palavras simples

  • Endpoint: é o endereço do teu servidor que a app chama quando o utilizador carrega no botão. O controlo fica aí, não na app: um controlo na app ou no browser contorna-se num instante.
  • Por utilizador ou por IP: se a pessoa iniciou sessão, reconhece-la pela conta. Se não, só tens o endereço IP. Não é perfeito, porque várias pessoas podem ter o mesmo IP e quem quer abusar pode mudá-lo, mas trava a maioria dos casos.
  • Armazenamento partilhado: num alojamento serverless, e em geral quando a app corre em várias cópias do servidor, cada pedido pode ir parar a uma cópia diferente. Um contador na memória de uma cópia só vê os próprios pedidos e volta a zero quando essa cópia se desliga. Por isso tem de estar num sítio que todas vejam: Redis ou a tua base de dados.
  • Chave só no servidor: tudo o que chega ao browser ou ao telemóvel pode ser lido. Uma chave dentro da app é, na prática, pública. Cuidado com as variáveis que alguns frameworks enviam de propósito para o browser, como as que começam por NEXT_PUBLIC_ no Next.js, VITE_ no Vite ou EXPO_PUBLIC_ no Expo: a chave da IA nunca pode estar aí.

Que número escolher

O prompt não diz quantos pedidos por minuto. Se o Claude te perguntar, pensa em quantas vezes uma pessoa real usa essa função num minuto e deixa alguma margem. Mais vale começar baixo: subir depois é fácil.

O limite por minuto, sozinho, não chega. Poucos pedidos por minuto, repetidos a noite toda, dão na mesma milhares de pedidos. Se a função for cara, acrescenta um limite diário:

O prompt
Acrescenta também um limite diário por utilizador nos mesmos pedidos à IA, usando o mesmo armazenamento partilhado do limite por minuto. Quando for ultrapassado, mostra uma mensagem clara tipo 'Chegaste ao limite de hoje, tenta outra vez amanhã'.

2. O teto de gastos

Isto fazes tu, não o Claude. Demora dois minutos.

  1. Entra no painel do serviço de IA que usas e procura a parte da faturação ou dos limites de utilização.
  2. Configura um teto mensal. Escolhe um número que possas dar-te ao luxo de perder numa noite má.
  3. Lê o que acontece quando o teto é atingido. É o passo que quase toda a gente salta.

Atenção: nem todos os serviços param mesmo os pedidos no teto, alguns só te mandam um alerta. Por isso não confies no nome da definição: confirma na documentação do teu serviço o que esse limite faz realmente. A diferença está entre «bloqueia os pedidos» e «manda-te uma notificação».

Se o teu painel só oferece o alerta, usa créditos pré-pagos com o carregamento automático desligado: acabados os créditos, os pedidos param. Também aqui, confirma que o teu serviço funciona assim antes de contares com isso.

Se a app usa outros serviços pagos, como o envio de SMS ou os mapas, repete a mesma verificação para cada um.

3. O alerta

No mesmo painel, se houver a opção, ativa um email de alerta para quando chegares a metade do teto. Põe-no num endereço que leias mesmo.

A razão é simples: um teto que bloqueia os pedidos também trava os teus utilizadores reais. O alerta a meio dá-te tempo para perceber o que se passa, se é gente real a usar a app ou um abuso, antes de a app deixar de responder.

4. O teste

Um limite que não testaste é um limite que não sabes se existe. Pede ao Claude:

O prompt
Escreve um pequeno script que chame o meu endpoint de IA 30 vezes num minuto com o mesmo utilizador de teste e diz-me quantos pedidos passam e quantos são bloqueados.

Se passarem todos, o limite não está a funcionar: pede que to corrija antes de publicar.

  • Faz o teste na versão local ou de testes da app, não na que os utilizadores usam. Os pedidos que passam chegam mesmo à IA.
  • Se o limite que escolheste for mais alto do que 30 por minuto, sobe também o número do teste, senão passam todos mesmo com o limite a funcionar.
  • Se a app corre em serverless, repete o teste também na versão de testes online. Em local há um só servidor, e um contador guardado em memória parece funcionar mesmo quando online não funcionaria.

Os erros mais comuns

  • Pôr o limite só na app ou no browser. Contorna-se facilmente: o controlo fica no servidor, no endpoint.
  • Guardar o contador na memória do servidor em serverless. Cada cópia conta por si: usa Redis ou a base de dados.
  • Configurar o orçamento no painel e achar que estás protegido. Às vezes é só um alerta: confirma o que faz realmente e, se for preciso, usa créditos pré-pagos sem carregamento automático.
  • Deixar a chave da IA no código da app ou numa variável pública. Passa-a para o servidor e, se já foi parar a uma app publicada, apaga-a no painel e cria uma nova.
  • Proteger um endpoint e esquecer outro. Pede ao Claude para listar todos os sítios de onde sai um pedido à IA e confirma que o limite está em cada um.
  • Não testar o limite. Corre o script de teste antes de publicar, sempre que mudares essas partes.

Checklist

  • Limite de pedidos em cada endpoint que chama a IA
  • Contador num armazenamento partilhado (Redis ou base de dados)
  • Chave da IA só no servidor
  • Teto mensal configurado no painel do serviço
  • Confirmado se o teto bloqueia os pedidos ou só manda um alerta
  • Email de alerta a metade do teto
  • Teste de 30 pedidos feito, com uma parte bloqueada

Perguntas frequentes

Tenho poucos utilizadores, preciso mesmo disto?

Sim. O problema não são os utilizadores reais, são os bots e os scripts, que não querem saber quantos utilizadores tens. Um endpoint aberto na internet pode ser encontrado mesmo que ninguém conheça a app.

O que é o Redis? Tenho de instalar alguma coisa?

É um armazenamento muito rápido, usado muitas vezes precisamente para contadores. Muitos alojamentos oferecem-no como serviço já pronto. Se não quiseres acrescentar nada, também serve a base de dados que já usas: diz ao Claude e ele usa essa para o contador.

O limite torna a app mais lenta?

Para quem a usa normalmente, não: é um controlo rapidíssimo antes do pedido e ninguém dá por ele. Só dá por isso quem ultrapassa o limite, e vê a mensagem.

Se o teto bloquear tudo, a minha app deixa de funcionar?

A parte que usa a IA, sim, até subires o teto ou carregares os créditos. É por isso que precisas do alerta a meio: dá-te tempo para perceber se é crescimento real ou um abuso, antes de acontecer.

← Todos os guias